Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    67

    scambio righe matrici c/c++

    Ragazzi sto provando a scrivere un programma che in una matrice mi scambi la riga con somma massima con quella di somma minima...vi posto il codice(ve lo posto così xkè nn conosco i tag appositi sono un po inesperto)


    //scambia la riga con somma max con quella con somma min

    #include<iostream>
    using namespace std;
    void leggi_mat(int m[100][100], int &c, int&r);
    void stampa_mat(int m[100][100], int &c, int&r);
    int sommamax(int m[][100],int r, int c);
    int sommamin(int m[][100],int r, int c);
    void scambia_righe(int m[][100], int&r,int&c, int x, int k);
    int main()
    {int m[100][100];
    int r,c,x,k;
    cin>>r>>c;
    leggi_mat(m,r,c);
    x=sommamax(m,r,c);
    k=sommamin(m,r,c);
    scambia_righe(m,r,c,x,k);


    system("PAUSE");
    }


    void leggi_mat(int m[100][100], int &c, int&r)
    {int i,j;
    for(i=0;i<r;i++)
    for(j=0;j<c;j++)
    {cout<<"m["<<i<<"]["<<j<<"]";
    cin>>m[i][j];}}

    int sommamax(int m[][100],int r, int c)
    {int somma=0,temp,j,i,k;
    for(i=0;i<r;i++)
    {temp=0;
    for(j=0;j<c;j++)
    temp+=m[i][j];
    if(somma<temp)
    {somma=temp;
    k=i;}
    }
    return k;

    }

    int sommamin(int m[][100],int r, int c)
    {int somma=0,temp,j,i,k;
    for(i=0;i<r;i++)
    {temp=0;
    for(j=0;j<c;j++)
    {temp+=m[i][j];
    somma=temp;
    if(temp<somma)
    { somma=temp;
    k=i;
    }
    }
    return k;}


    }
    void scambia_righe(int m[][100], int&r,int&c, int x, int k)//scambia riga x con riga k
    {int j,y,i;
    int temp[100];
    i=0;
    for(j=0;j<c;j++)
    {temp[i]=m[x][j]; //temp[i]è un vettore d'appoggio x lo scambio
    m[x][j]=m[k][j];
    m[k][j]=temp[i];
    i++;
    }
    stampa_mat(m,r,c); }

    void stampa_mat(int m[100][100], int &c, int&r)
    {int i,j;
    for(i=0;i<r;i++)
    {for(j=0;j<c;j++)
    cout<<m[i][j]<<"\t";
    cout<<endl;
    }
    }


    il programma viene compilato ma non mi funziona...help!

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    Innanzi tutto la prossima volta usa i tag appositi, non è difficile, basta scrivere:
    [*code*]
    CODICE TUO
    [/*code*]
    Nota però che non devi mettere gli asterischi...e prima di postare magari fai una anteprima e vedi se esce in maniera corretta.
    counque ho dato un'occhiata al codice da te proposto e ho notato qualche errorino banale di distrazione tipo che sbagli a passare i parametri alla funzione che legge la matrice:
    codice:
    void leggi_mat(int m[100][100], int &c, int&r);
    in questo modo leggi la matrice all'incontrario, perchè dal main tu passi:
    codice:
    leggi_mat(m,r,c);
    quindi si invertono le variabili di riga e colonna;
    Lo stesso accade nella funzione di stampa che richiami dalla funzione che scambia le righe!
    --2) Poi c'è un errore anche nella funzione della ricerca della somma minima:
    codice:
    int sommamin(int m[][100],int r, int c)
    {int somma=0,temp,j,i,k;
    for(i=0;i<r;i++)
    {temp=0;
    for(j=0;j<c;j++)
    {temp+=m[i][j];
    ---->somma=temp;<----
    if(temp<somma)
    { somma=temp;
    k=i;
    }
    }
    return k;}
    Non capisco a cosa serve somma = temp! così facendo, non entrerà main nell'if sotto! e inoltre ti conviene dichiarare somma=1000, altrimenti se la somma minore è 5 già non entrerà mai nell'if e il programma va in palla! quindi modificala così:
    codice:
    int sommamin(int m[][100],int r, int c)
    {int somma=1000,temp,j,i,k;
    for(i=0;i<r;i++)
    {temp=0;
    for(j=0;j<c;j++)
    {temp+=m[i][j];
    if(temp<somma)
    { somma=temp;
    k=i;
    }
    }
    return k;}
    Poi c'è una cosa che non ho ben capito, ovvero perchè nella funzione di scambio di righe definisci temp come vettore di 100 unità?? per fare quello che fai basta una variabile int normale senza nessun vettore!
    codice:
    void scambia_righe(int m[][100], int&r,int&c, int x, int k)//scambia riga x con riga k
    {int j,y,i;
    int temp;
    for(j=0;j<c;j++)
    {temp=m[x][j]; //temp è una variabile d'appoggio x lo scambio
    m[x][j]=m[k][j];
    m[k][j]=temp;
    }
    stampa_mat(m,r,c); }
    per il resto sembra andare bene...testalo un pò e vedi su funziona come dovrebbe altrimenti posta di nuovo!

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    67
    Ho provato ma nn va...mi stampa la matrice normale senza righe invertite come faceva anche prima...forse ci sono problemi nell'inserimento della stampa a video? dovrei metterla da un altra parte?

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    veramente io avevo provato a eseguirlo e sembrava funzionare...ti posto tutto il prigramma che ho provato io!
    codice:
    #include<iostream>
    using namespace std;
    void leggi_mat(int m[100][100], int &c, int&r);
    void stampa_mat(int m[100][100], int &c, int&r);
    int sommamax(int m[][100],int r, int c);
    int sommamin(int m[][100],int r, int c);
    void scambia_righe(int m[][100], int&r,int&c, int x, int k);
    
    int main()
    {int m[100][100];
    int r,c,x,k;
    cout<<"Inserire numero riga e colonna: ";
    cin>>r>>c;
    cout<<"riga: "<<r<<"\ncolonna: "<<c<<"\n";
    
    leggi_mat(m,r,c);
    
    x=sommamax(m,r,c);
    
    k=sommamin(m,r,c);
    
    scambia_righe(m,r,c,x,k);
    
    
    system("PAUSE");
    }
    
    
    void leggi_mat(int m[100][100], int &r, int&c)
    {int i,j;
    for(i=0;i<r;i++)
    for(j=0;j<c;j++)
    {cout<<"m["<<i<<"]["<<j<<"]";
    cin>>m[i][j];}}
    
    int sommamax(int m[][100],int r, int c)
    {int somma=0,temp,j,i,k;
    for(i=0;i<r;i++)
    {temp=0;
    for(j=0;j<c;j++)
    temp+=m[i][j];
    if(somma<temp)
    {somma=temp;
    k=i;}
    }
    return k;
    
    }
    
    int sommamin(int m[][100],int r, int c)
    {int somma=1000,temp,j,i,k;
    for(i=0;i<r;i++)
    {temp=0;
    for(j=0;j<c;j++)
    {temp+=m[i][j];
    if(temp<somma)
    { somma=temp;
    k=i;
    }
    }
    return k;}
    
    
    }
    void scambia_righe(int m[][100], int&r,int&c, int x, int k)//scambia riga x con riga k
    {int j,y,i;
    int temp;
    for(j=0;j<c;j++)
    {temp=m[x][j]; //temp[i]è un vettore d'appoggio x lo scambio
    m[x][j]=m[k][j];
    m[k][j]=temp;
    }
    stampa_mat(m,r,c); }
    
    void stampa_mat(int m[100][100], int &r, int&c)
    {int i,j;
    for(i=0;i<r;i++)
    {for(j=0;j<c;j++)
    cout<<m[i][j]<<"\t";
    cout<<endl;
    }
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.