Visualizzazione dei risultati da 1 a 5 su 5

Discussione: matrici c++

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    67

    matrici c++

    Ragazzi sto cercando di ordinare una matrice... es:
    matrice di partenza:
    3 2 1
    4 6 5
    deve diventare:
    1 2 3
    4 5 6;
    ho provato a scrivere un programma che mi copia la matrice in un vettore, ordina il vettore e poi ricopia il vettore ordinato nella matrice...ma non va...ecco il codice


    #include<iostream>
    using namespace std;
    void leggi_mat(int m[100][100], int &c, int&r);
    void ordina(int *v,int n);
    int main()
    {int m[100][100];
    int*v;
    int n,r,c,k,i,j;
    cout<<"r";
    cin>>r;
    cout<<"c";cin>>c;
    n=r*c;
    v=(int*)malloc (n*sizeof (int));
    leggi_mat(m,r,c);
    for(i=0;i<r;i++)
    {for(j=0;j<c;j++)
    v[k]=m[i][j];
    k++;}
    ordina(v,n);
    for(i=0;i<r;i++)
    {for(j=0;j<c;j++)
    m[i][j]=v[k];
    k++;
    cout<<m[i][j]<<"\t";
    cout<<endl;}







    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];}}



    void ordina(int *v,int n)
    {int i,j,temp;
    for(i=0;i<n-1;i++)
    {for(j=0;j<n-i-1;i++)
    if(v[j]>v[j+1])
    {temp=v[i];
    v[i]=v[i+1];
    v[i+1]=temp;
    }



    }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    67

    Re: matrici c++

    Ragazzi sto cercando di ordinare una matrice... es:
    matrice di partenza:
    3 2 1
    4 6 5
    deve diventare:
    1 2 3
    4 5 6;
    ho provato a scrivere un programma che mi copia la matrice in un vettore, ordina il vettore e poi ricopia il vettore ordinato nella matrice...ma non va...ecco il codice


    #include<iostream>
    using namespace std;
    void leggi_mat(int m[100][100], int &c, int&r);
    void ordina(int *v,int n);
    int main()
    {int m[100][100];
    int*v;
    int n,r,c,k,i,j;
    cout<<"r";
    cin>>r;
    cout<<"c";cin>>c;
    n=r*c;
    v=(int*)malloc (n*sizeof (int));
    leggi_mat(m,r,c);
    for(i=0;i<r;i++)
    {for(j=0;j<c;j++)
    v[k]=m[i][j];
    k++;}
    ordina(v,n);
    for(i=0;i<r;i++)
    {for(j=0;j<c;j++)
    m[i][j]=v[k];
    k++;
    cout<<m[i][j]<<"\t";
    cout<<endl;}







    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];}}



    void ordina(int *v,int n)
    {int i,j,temp;
    for(i=0;i<n-1;i++)
    {for(j=0;j<n-i-1;i++)
    if(v[j]>v[j+1])
    {temp=v[i];
    v[i]=v[i+1];
    v[i+1]=temp;
    }



    }
    }
    Potrebbero esserci problemi nella stampa a video della matrice ordinata...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Preliminariamente ti consiglio di postare il codice indentandolo, magari utilizzando le tag apposite... giusto perché così si capisce meglio ed è più facile aiutarti.

    Il problema è innanzitutto nella funzione di ordinamento. Mi sembra che volessi implementare il Bubble sort ma così è sbagliato, tra l'altro come errore più evidente incrementi l'indice i anche nel ciclo for interno dove invece andrebbe incrementata j.

    Inoltre l'indice k del vettore v (nel main) va incrementato nel ciclo for interno sia quando copi gli elementi dal vettore alla matrice sia quando fai la copia inversa, altrimenti incrementando k nel ciclo esterno consideri un numero di elementi pari al numero di righe della matrice, e non a quello dei suoi elementi.

    Ricorda anche di azzerare l'indice k dopo il primo doppio for e occhio anche alla stampa della matrice alla fine: la stampa degli elementi deve avvenire - ancora una volta - nel ciclo for interno.

    Poi... perché passi per riferimento le dimensioni della matrice alla funzione di lettura? Non ti compromette il funzionamento del programma ma è inutile...

    Ti consiglio di provare a debuggarlo da solo, comunque nel caso avessi troppi problemi ti posto il codice corretto... senza eccessive modifiche al tuo.

    codice:
    #include <iostream>
    using namespace std;
    
    void leggi_mat(int m[100][100], int c, int r);
    void ordina(int *v, int n);
    
    int main()
    {
        int m[100][100];
        int *v;
        int n, r, c, k = 0, i, j;
        cout << "r";
        cin >> r;
        cout << "c";
        cin >> c;
        n = r * c;
        v = (int *) malloc(n * sizeof(int));
        leggi_mat(m, r, c);
        for (i = 0; i < r; i++) {
    	for (j = 0; j < c; j++) {
    	    v[k] = m[i][j];
    	    k++;
         }
        }
    
        ordina(v, k);
    
        k = 0;
        for (i = 0; i < r; i++) {
    	for (j = 0; j < c; j++) {
    	    m[i][j] = v[k];
    	    k++;
                cout << m[i][j] << "\t";
            }
           cout << endl;
        }
    }
    
    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];
    	}
    }
    
    
    
    void ordina(int *v, int n)
    {
        int i, j, temp;
    
        for (i = 0; i<n-1; i++)
    
           for (j=n-1; j>i; j--)
    
              if (*(v + i) > *(v + j)) {
                 temp = v[i];
                 v[i] = v[j];
                 v[j] = temp;
              }
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma perche' hai aperto un altro thread invece di continuare in quello gia' aperto?

    Cosi' si fa confusione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Non apriamo discussioni duplicate sugli stessi argomenti.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.