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

    Esercizio in C++ clessidra per colonne

    Salve, ragazzi, questa è la traccia dell' ultimo esercizio che ci ha dato il prof:

    Traccia:
    "Assegnato un array bidimensionale di A ad N*N componenti di tipo intero costruire un vettore VET di
    cardinalità N in maniera che contenga gli elementi di una clessidra costruita al seguente modo. Si tracci la
    diagonale principale e quella secondaria sulla matrice A tutti gli elementi contenuti in queste due diagonali
    (ivi compresi le diagonali) rappresentano la clessidra in questione. A questo punto gli elementi da
    memorizzare nel vettore si ottengano sommando le porzioni di colonne delimitate dalla clessidra (si veda
    l'esempio di esecuzione). Questa somma venga allocata nel vettore come elementi del vettore VET. Per
    eseguire queste operazioni si utilizzi una funzione somma_clessidra (iterativa o ricorsiva) che prenda in
    input la colonna e ne restituisca la somma da memorizzare come elemento del vettore VET."

    Ora questo il mio codice(so che non va assolutissimamente bene):
    codice:
    #include<iostream>
    #include<cstdlib>
    #include<iomanip>
    using std::setw;
    
    
    using namespace std;
    
    
    const int N=10;
    void Leggi_Matrice( int a[N][N]){
        
        int row;
        int column;
        cout<<"Digita numero righe: ";
        cin>>row;
        cout<<"\nDigita numero colonne: ";
        cin>>column;
        
        for(int i=0;i<row;i++){
            for(int j=0;j<column;j++){
                cout<<"\nInserisci elemento a["<<i<<"] ["<<j<<"] : ";
                cin>>a[i][j];
            }
        }
        
        cout<<"\nLa matrice caricata vale: \n";
        
        for(int i=0;i<row;i++){
            for(int j=0;j<column;j++)
                cout<<setw(5)<<a[i][j];
                cout<<"\n";
    }
    
    
    return;
    }
        
    void Somma(int a[N][N]){
    
    
        int row, column;
        int sum=0;
        int sum1=0;
        int sum2=0;
        int sum3=0;
        
        for(int i=0;i<row;i++){
            sum+=a[i][0];
        }
        for(int i=1;i<(row-1);i++){
            sum1+=a[i][1];
        }
        for(int i=1;i<(row-1);i++){
            sum2+=a[i][2];
        }
            for(int i=0;i<row;i++){
            sum3+=a[i][3];}
            
        cout<<"\nLa somma vale: "<<sum;
        return;
    }
    
    
    int main() {
        const int N1=10;
        int a1[N1][N1];
        Leggi_Matrice(a1);
        Somma(a1);
        
        return 0;
    }
    Qualcuno saprebbe aiutarmi!! Il mio problema e che non riesco far sommare,indipendentemente da quante righe e colonne scelga l'utente in input i vari elementi(porzioni di colonne) e poi salvarle contemporaneamente, queste somme all'interno di un vettore!! Se c'è una soluzione semplice mi servirebbe come il pane !!E' l'ultima esercitazione, grazie di cuore a tutti!!

  2. #2
    Risolto, posto il codice come sempre, grazie a tutti!!!

    codice:
    #include<iostream>
    #include<cstdlib>
    using namespace std;
     
     
    void leggi_matrice(int* matrice, int N)
    {
        for(int i = 0; i < N; i++)
            for(int j = 0; j < N; j++)
            {
                cout << "Inserisci l'elemento della riga " << i << " e della colonna " << j << "." << endl;
                cin >> matrice[i*N+j];
            }
    }
     
    void somma_vettore(int *vettore, int *matrice, int N)
    {
        for(int nc = 0; nc < N; nc++)
        {
            int lim_sup = 0; // la clessidra delimita una parte della colonna
            int lim_inf = 0;
            // ne calcolo gli estremi in base all'indice della colonna stessa
            if(nc<N/2) // se operiamo su una colonna con indice minore della metà del numero di colonne
            {
                lim_sup = nc; // l'estremo superiore è uguale all'indice della colonna
                lim_inf = N-1 - nc; // l'estremo inferiore è uguale all'indice dell'ultima riga meno l'estremo superiore (nc)
            } else { // se operiamo su una colonna con indice maggiore o uguale alla metà del numero di colonne è il contrario
                lim_inf = nc; // l'estremo inferiore è uguale all'indice della colonna
                lim_sup = N-1 - nc; // l'estremo superiore è uguale all'indice dell'ultima riga meno l'estremo inferiore (nc)
            }
           
            for(int nr = lim_sup; nr <= lim_inf; nr++)
                vettore[nc] += matrice[nr*N+nc];
        }
    }
     
    void stampa_vettore(int *vettore, int N)
    {
        for(int i = 0; i < N; i++)
            cout << "La somma della colonna con indice " << i << " vale " << vettore[i] << endl;
    }
     
    int main(int argc, char **argv)
    {
     
        cout << "Inserisci il numero N di righe e colonne" << endl;
        int N;
        cin >> N;
       
       
        int *matrice ;
    	matrice= (int*)malloc(N*N*sizeof(int)); // alloco memoria per una matrice di N righe e N colonne di interi
                                                      // ne memorizzo l'indirizzo in 'matrice'
       
        leggi_matrice(matrice,N); // inserisco manualmente i valori degli elementi della matrice
       
        int *vettore; 
    	vettore=(int*)calloc(N,sizeof(int));   // alloco memoria per un vettore di cardinalità N inizializzando tutti gli interi memorizzati a 0
                                                      // ne memorizzo l'indirizzo in 'vettore'
       
        somma_vettore(vettore, matrice, N);
        stampa_vettore(vettore,N);
       
        // libero la memoria allocata dinamicamente
        free(vettore);
        free(matrice);
       
     
    }

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.