Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C++] Matrici

  1. #1

    [C++] Matrici

    Salve ragazzi ho un problema con un programma sulle matrice.
    codice:
    #include <iostream>
    #include <fstream>
    #define maxr 4
    #define maxc 4
    using namespace std;
    void apertura_file(fstream& miofile3)
    {
        miofile3.open("miofile.txt",ios::in);
        if(!miofile3)
        {
            cout<<"errore connessione";
            exit(1);
            
        }
        else
        {
            cout<<"connessione riuscita"<<endl;
        }
    }
    void crea_matrice(int mat[maxr][maxc], fstream& miofile3)
    {
        int i,j;
        for (i=0; i<maxr; i++ )
        for (j=0; j<maxc; j++ )
        {
            miofile3>>mat[i][j];
        }
    }
    void stampa_matrice(int mat[maxr][maxc]){
        cout<<"\n\n";
    
    
        for (int i=0; i<maxr; i++)
        {
            cout<<"\n";
            for (int j=0; j<maxc; j++)
            {
                cout<<"\t"<<mat[i][j]<<" ";
            }
        }
    }
    void inverti_diagonali(int mat[][maxc])
    {
      for (int i=0; i<maxr; i++)
      {
          int tmp=mat[i][i];
          mat [i][i]=mat[i][maxr-1-i];
          mat [i][maxr-1-i]= tmp;
      }
      cout<<"\n";
      for(int i=0; i<maxr; i++)
      {
          cout<<"\n";
          for (int j=0; j<maxc; j++)
          {
              cout<<"\t"<<mat[i][j]<<" ";
          }
      }
    }
    void matrice_trasposta(int mat[maxr][maxc])
    {
        for( int y=0; y<maxc; y++)
        {
            cout<<"\n";
            for (int x=0; x<maxr; x++)
            {
                cout<<"\t"<<mat[x][y]<<" ";
            }
        }
    }
    void massimo_matrice(int mat[maxr][maxc])
    {
        int i,j,max;
        max=mat[0][0];
        for (i=0; i<maxr; i++)
        {
            
            for (j=0; j<maxc; j++)
            {
                if (max<mat[i][j])
                {
                    max=mat[i][j];
                    
                }
            }
        }
        cout<<"il massimo della matrice e':"<<max<<endl;
    }
    void minimo_matrice(int mat[maxr][maxc])
    {
        int i,j,min;
            min=mat[0][0];
        for (i=0; i<maxr; i++)
        {
        
            for (j=0; j<maxc; j++)
            {
                if(min>mat[i][j])
                {
                    min=mat[i][j];
                }
            }
        }
        cout<<"il minimo della matrice e':"<<min<<endl;
    }
    void massimo_righe(int mat[maxr][maxc],int matmax[maxr][maxc])
    {
        int i,j,massimor;
        for(i=0; i<maxr; i++){
            massimor=mat[i][0];
            for (j=0; j<maxc; j++)
            {
                if(massimor<mat[i][j])
                
                    massimor=mat[i][j];
                
            }cout<<"i massimi per le righe sono:"<<massimor<<endl;
        matmax[i][i]=massimor;
        }
        
    }
    void crea_matricemax(int matmax[maxr][maxc])
    {
        cout<<"\n\n";
        for (int i=0; i<4; i++)
        {
            cout<<"\n";
            for (int j=0; j<4; j++)
            {
                cout<<"\t"<<matmax[i][j];
            }
        }
    }
    int main() {
        fstream miofile3;
        int mat[maxr][maxc];
        apertura_file(miofile3);
        int matmax[maxr][maxc];
        crea_matrice(mat,miofile3);
        cout<<"la matrice originale nel file e':"<<endl;
        stampa_matrice(mat);
        cout<<"\n\n";
        cout<<"la matrice con la diagonale principale al posto della diagonale secondaria e viceversa e':"<<endl;
        inverti_diagonali(mat);
        cout<<"\n\n";
        cout<<"la matrice trasposta e':"<<endl;
        matrice_trasposta(mat);
        cout<<"\n\n";
        massimo_matrice(mat);
        cout<<"\n";
        minimo_matrice(mat);
        cout<<"\n\n";
        massimo_righe(mat,matmax);
        cout<<"\n\n";
        cout<<"la matrice con i massimi sulla diagonale principale e':"<<endl;
        crea_matricemax(matmax);
        cout<<"\n\n";
        system("pause");
        return 0;
    }
    Quando voglio creare una nuova matrice con i massimi posti nella diagonale principale ottengo questo per esempio:
    7 0 9245584 0
    256 7 36095 0
    ecc,cioè mi mette i massimi sulla diagonale principale ma sugli altri posti della matrice non escono tutti 0,ma numeri molto grandi.-.
    Il problema me lo fa solo quando voglio creare questa nuova matrice dopo aver letto una matrice posta in un file.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Così non si capisce ... devi essere più precisa nelle spiegazione del problema.

    Quei valori sono visualizzati dalla chiamata

    stampa_matrice(mat);

    ?

    Mostra il contenuto del file dei dati che leggi
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Scusami,hai ragione.
    Sono questi i valori:
    6 8 9 2
    90 100 70 0
    1 44 67 4
    34 6 8 3

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Nella funzione massimo_righe non ricopi tutto il resto della matrice ... basta inserire la linea che assegna dopo la for j come di seguito ma non so se ti va bene perché non ho capito se il massimo va scambiato con il valore presente nella diagonale o no

    for (j=0; j<maxc; j++)
    {
    matmax[i][j]=mat[i][j];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Si il massimo va scambiato con il valore presente nella diagonale principale

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quote Originariamente inviata da AdelaidePuglies Visualizza il messaggio
    Si il massimo va scambiato con il valore presente nella diagonale principale
    Allora apporta le (semplici) modifiche necessarie. ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    ci sto da stamattina su questo programma,sarò scema io,ma non riesco a capire quali (semplici) modifiche devo effettuare..
    un pò più chiaro?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Più chiaro c'è solo il codice ...

    codice:
    void massimo_righe(int mat[maxr][maxc],int matmax[maxr][maxc])
    {
        int i,j,mi,mj,massimor,tmp;
    
    
        for(i=0; i<maxr; i++)
       {
        massimor=mat[i][0];
    
        for (j=0; j<maxc; j++)
            {
                 matmax[i][j]=mat[i][j];
    
    
            if(massimor<mat[i][j])
           {
                    massimor=mat[i][j];
            mi=i;
            mj=j;
           }
        }
            
        cout<<"i massimi per le righe sono:"<<massimor<<endl;
        
        tmp=matmax[i][i];
        matmax[i][i]=massimor;
        matmax[mi][mj]=tmp;
        }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    quando poi vado a creare una funzione per stamparmi la matrice con i massimi sulla diagonale principale devo creare un due nuovi cicli for con mi e mj e non più i,j?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    No,non devi toccare nulla... hai studiato le linee di codice che ti ho proposto
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.