Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Sommare elementi di una matrice e metterli in un'altra matrice.

    Allora: devo seguire alla lettera questa traccia d'esame, ma ho trovato difficoltà nel penultimo punto.
    Il codice non da errori, ma ci deve essere qualche passaggio sbagliato!

    TRACCIA
    codice:
    ESERCIZIO 1
    Si realizzi un programma che, mediante opportuni sottoprogrammi, legga da tastiera una matrice di
    interi con segno di dimensioni scelte dall'utente, la stampi, crei un'altra matrice che contenga le
    somme dei valori contenuti in tutte le sue sottomatrici 2x2 non sovrapposte, la stampi e restituisca
    la riga che contiene il valore massimo nella nuova matrice.
    Il candidato realizzerà:
    – la lettura della matrice mediante un sottoprogramma che funzioni per qualsiasi matrice, note
    in precedenza le sue dimensioni;
    – la stampa di entrambe le matrici riutilizzando un unico sottoprogramma che stampa una
    matrice di dimensioni qualsiasi;
    – la generazione della seconda matrice mediante un sottoprogramma apposito che funzioni
    con matrici di dimensioni qualsiasi (vedere esempio in figura) e indichi al programma
    principale se tutti i valori sono stati usati o meno;
    – la ricerca della riga che contiene il valore massimo mediante un sottoprogramma apposito
    che funzioni per qualsiasi matrice.
    Il candidato curerà che l'utente sia impossibilitato ad inserire valori negativi per le dimensioni della
    matrice.
    Esercizio svolto da me:
    codice:
    #include <iostream>
    using namespace std;
    
    void leggiMat(int*mat, int rig, int col);
    void stampaMat (int*mat, int rig, int col);
    bool mat2x2 (int*mat, int rig, int col);
    
    
    int main () {
        int r,c;
        cout<<"inserire n.righe\n";
        cin>>r;
        cout<<"inserire n.colonne\n";
        cin>>c;
        int m[r][c];
        leggiMat (&m[r][c],r,c);
        stampaMat (&m[r][c],r,c);
        cout<<endl<<endl;
        if (mat2x2 (&m[r][c],r,c)==false) cout<<"Non ci sono valori inutilizzati\n";
        else cout<<"Ci sono valori inutilizzati\n";
        
        }
        
    
    void leggiMat (int*mat, int rig, int col) {
        for (int i=0;i<rig;i++) {
            for (int j=0;j<col;j++) {
                cout<<"inserisci mat["<<i<<"]["<<j<<"]: ";
                cin>>*(mat+i*col+j);
                }
            }
        }
    
    
    void stampaMat (int*mat, int rig, int col) {
        for (int i=0;i<rig;i++) {
            for (int j=0;j<col;j++) {
                cout<<*(mat+i*col+j);
                }
            cout<<endl;
            }
        }
    
    
    bool mat2x2 (int*mat, int rig, int col) {
        bool valori_inutilizzati=false;
        int RIG,COL;
        if (rig%2==0) RIG=rig/2;
        else { RIG=(rig-1)/2; valori_inutilizzati=true; }
        if (col%2==0) COL=col/2;
        else { COL=(col-1)/2; valori_inutilizzati=true; }
        int MAT[RIG][COL];
        
        int I=0,J=0;
        for (int i=0;i<rig;i=i+2) {
            for (int j=0;j<col;j=j+2) {
                MAT[I][J]=*(mat+i*col+j)+*(mat+i*col+(j+1))+*(mat+(i+1)*col+j)+*(mat+(i+1)*col+(j+1));
                J++;
                }
            cout<<endl;
            I++;
            }
        stampaMat (&MAT[RIG][COL],RIG,COL);
        
        return valori_inutilizzati;
        }
    L'errore dovrebbe essere nel sottoprogramma mat2x2...

  2. #2
    Ho scoperto che il sottoprogramma sta fatto bene, perchè se stampo la matrice senza usare lo stampaMat, e quindi cosi:
    (il codice per stampare è in grassetto)
    quindi il problema è nel fatto che il sottoprogramma mat2x2 non usa bene il sottoprogramma stampaMat (che quindi è usato bene solo dal main), quindi, Come fare per far si che stampaMat possa essere usato anche dai sottoprogrammi??

    codice:
    bool mat2x2 (int*mat, int rig, int col) {    
        bool valori_inutilizzati=false;
        int RIG,COL;
        if (rig%2==0) RIG=rig/2;
        else { RIG=(rig-1)/2; valori_inutilizzati=true; }
        if (col%2==0) COL=col/2;
        else { COL=(col-1)/2; valori_inutilizzati=true; }
        int MAT[RIG][COL];
        
        int I=0,J=0;
        for (int i=0;i<rig;i=i+2) {
            for (int j=0;j<col;j=j+2) {
                MAT[I][J]=*(mat+i*col+j)+*(mat+i*col+(j+1))+*(mat+(i+1)*col+j)+*(mat+(i+1)*col+(j+1));
                cout<<MAT[I][J];
                J++;
                }
            cout<<endl;
            I++;
            }
        
        return valori_inutilizzati;
        }

  3. #3
    Problema risolto: nelle chiamate alle funzioni dovevo scrivere
    &m[0][0]
    e non
    &m[r][c]

    Grazie lo stesso.

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.