Visualizzazione dei risultati da 1 a 8 su 8

Discussione: esercizio matrici[c++]

  1. #1

    esercizio matrici[c++]

    Salve ragazzi...Qualcuno mi potrebbe dare qualche dritta su questa traccia?
    Leggere una sequenza di matrici di uguali dimensioni definite dall'utente e calcolare la percentuale di valori diversi nella stessa posizione tra coppie di matrici successive,memorizzando tutte le percentuali opportunemente in una struttura dati. La traccia poi continua ma io non sono riuscita a fare neppure questo primo punto . Perchè per fare la percentuale devo andare a confrontare le due matrici ,ma quando passo la seconda matrice alla funzione PercUguali e provo a stampare per verifica..mi stampa tutt'altro quindi non posso pensare di fare un confronto..come posso passare le due matrici da confrontare ? grazie mille
    codice:
    void LeggiMatrice(int r,int c,int *mat);
    void StampaMatrice(int r,int c,int *mat);
    void PercUguali(int r,int c,int *mat,int *mat1);
    char scelta;
    int k=0;
    int main()
    {
    
       int righe,colonne;
       do
       {
       cout<<"inserisci dimensione della matrice"<<endl<<"righe"<<endl;
       cin>>righe;
       cout<<"colonne"<<endl;
       cin>>colonne;
       }
       while(righe<0||colonne<0);
       int matrice[righe][colonne];
       int *matr=&matrice[0][0];
       LeggiMatrice(righe,colonne,matr);
       StampaMatrice(righe,colonne,matr);
    }
    void LeggiMatrice(int r,int c,int *mat)
    {
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {   do
              {
                cout<<"inserisci elemento di posto"<<i+1<<"X"<<j+1<<endl;
                cin>>*(mat+c*i+j);
              }
              while(*(mat+c*i+j)<0);
            }
        }
    }
    void StampaMatrice(int r,int c,int *mat)
    {
    
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                cout<<'\t'<<*(mat+c*i+j);
            }
            cout<<endl;
        }
        k++;
        cout<<k;
           do
       {
       cout<<"continuare?(s/n)"<<endl;
       cin>>scelta;
       }
       while(scelta!='s'&&scelta!='n');
       if(scelta=='s')
       {
              int matr1[r][c];
              int *mat1=&matr1[0][0];
              if(k==2)
              {
               PercUguali(r,c,mat,mat1);
              }
              LeggiMatrice(r,c,mat1);
              StampaMatrice(r,c,mat1);
      }
    }
    
    void PercUguali(int r,int c,int *mat,int *mat1)
    {
        k=0;
        cout<<k;
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
              cout<<'\t'<<*(mat1+c*i+j);
            }
            cout<<endl;
        }
        cout<<"inserire una nuova matrice?(s/n)"<<endl;
        cin>>scelta;
        if(scelta=='s')
        {
              LeggiMatrice(r,c,mat);
              StampaMatrice(r,c,mat);
    
        }
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    In C++ questo è decisamente scorretto
    codice:
    int matrice[righe][colonne];
    Devi utilizzare l'allocazione dinamica.
    Puoi scegliere se fare un blocco unico di r*c elementi o allocare prima un array di tipo int * di dimensione r e poi per ogni elemento allocare degli array di int di dimensione c.
    Nel primo caso dovresti indicializzare con i*c+j (i -> riga; j -> colonna), nel secondo puoi usare indici normali.
    Ricordati di liberare la memoria.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    grazie mille per quanto riguarda il passaggio delle matrici per passarle alla funzione qualcuno sa come potrei fare?...come ho fatto io stampa dei valori completamente sballati

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    allocando la matrice nel primo modo è semplicemente un int *, nel secondo modo risulta essere un int **, quindi non ci sono problemi.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    ho fatto int mat1[r*c] e poi int *mat1 ma nulla da fare ..mi sa che c'era più di un errore ...grazie mille

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Ti ho detto che devi allocare la memoria dinamicamente, qui c'è un esempio
    codice:
    #include <iostream>
     
    using namespace std;
     
    void inizializza_matrice(int *mat, int r, int c);
    void stampa_matrice(int *mat, int r, int c);
     
    int main() {
        int r, c;
        do {
            
            cout << "Inserire il numero di righe e colonne (>=0)" << endl
                << "Righe: ";
            cin >> r;
            cout << "Colonne: ";
            cin >> c;
        } while(c < 0 || r < 0);
        int *mat = new int[r*c];
        inizializza_matrice(mat, r, c);
        cout << endl;
        stampa_matrice(mat, r, c);
        delete[] mat;
        return 0;
    }
    
    void inizializza_matrice(int *mat, int r, int c) {
        cout << endl << "Inserire gli elementi della matrice" << endl;
        for(int i = 0; i < r; i++) {
            for(int j = 0; j < r; j++) {
                cout << "(" << i+1 << ", " << j+1 << "): ";
                cin >> mat[i*c+j];
            }
        }
    }
     
    void stampa_matrice(int *mat, int r, int c) {
        for(int i = 0; i < r; i++) {
            for(int j = 0; j < r; j++) {
                cout.width(4);
                cout << mat[i*c+j];            
            }
            cout << endl;
        }
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    grazie : )

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Originariamente inviato da azzurra_93
    grazie : )
    Non c'è di che
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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.