PDA

Visualizza la versione completa : Esercizio in C++ clessidra per colonne


AmedeoFalco
28-07-2017, 12:45
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):

#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!! :messner::messner:

AmedeoFalco
28-07-2017, 22:01
Risolto, posto il codice come sempre, grazie a tutti!!! :D




#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);


}

Loading