buona sera,
ho ricevuto un esercizio all'università e a prescindere dalla traccia che non scriverò, anche perchè è implementata nei commenti del codice, non riesco a risolvere il problema di segmentation fault durante il run del programma. ve lo posto così potete voi più esperti cercar di trovare l'errore.
grazie!!codice:#include <iostream> #include <string> using namespace std; void operazioni_diagonali (int **X, int a); int somma_ric (int **X, int a); void concatena_una_riga (int **X, int n); main () { // // leggere da tastiera gli elementidi una matrice di dimensioni NxN allocandola dinamicamente // cout << "inserisci la dimensione N della tua matrice NxN" << endl; int n; cin >> n; int **A=new int *[n]; int i, j; for (i=0; i<n; i++) { A[i]=new int [n]; } // // inserimento di "0" in tutta la matrice // for (i=0; i<n; i++) { for (j=0; j<n; j++) { A[i][j]=0; } } // // // allocazione dinamica terminata // // inserimento da tastiera dei valori sulle 3 diagonali della matrice // (non verranno quindi inseriti elementi non delle diagonali // cout << "inserisci gli elementi delle 3 diagonali principali della matrice NxN" << endl << "prima diagonale (principale): " << endl; for (i=0; i<n; i++) { cin >> A[i][i]; } cout << "seconda diagonale (inferiore)" << endl; j=0; for (i=1; i<n; i++) { cin >> A[i][j]; j++; } cout << "terza diagonale (superiore)" << endl; j=1; for (i=0; i<n-1; i++) { cin >> A[i][j]; j++; } // // diagonali inserite // // operazioni su diagonali // operazioni_diagonali (A, n); // la funzione calcolerà tutto il resto // // chiamata della funzione "concatena_una_riga" // concatena_una_riga (A, n); // termine programma for (i=0; i<n; i++) { delete[] A[i]; } delete[] A; return 0; } // prototipo funzione operazioni_diagonale void operazioni_diagonali (int **X, int a) { // // calcolo della somma sulla diagonale inferiore attraverso un'altra funzione "somma_ric" ricorsiva // cout << "la somma degli elementi sulla diagonale inferiore e': " << somma_ric (X, a) << endl; // // // calcolo (non ricorsivo) della media degli elementi sulle rimanenti 2 diagonali // int i, j, media=0, contatore_per_la_media=0; for (i=0; i<a; i++) { media=media+X[i][i]; contatore_per_la_media++; } for (i=0; i<a-1; i++) { for (j=1; j<a-1; j++) { media=media+X[i][j]; contatore_per_la_media++; } } media=media/contatore_per_la_media; cout << "la media della somma della diagonale superiore e principale e': " << media << endl; } // prototipo della funzione ricorsiva "somma_ric" usata dalla funzione "operazioni_diagonali" int somma_ric (int **X, int a) { if (a=0) { return X[a+1][a]; } else { return X[a+1][a]+somma_ric (X, a-1); } } // prototipo di "concatena_una_riga" void concatena_una_riga (int **X, int a) { int i=1, j=0, h=0, k=1; string stringa; for (i=0; i<a-1; i++) { stringa=X[i][j]+X[h][k]; cout << "stringa concatenamento simmetrico " << i+1 << " = " << stringa << endl; i++; j++; h++; k++; } }

Rispondi quotando