//calcola e stampa(qualora ci fossero) i punti di sella (maggiori tra i valori d
ella riga e minore tra i valori della colonna a cui appartengono)
void calcolasella (matrice mat, int riemp, int riemp2); /*Questo programma strutturato in modo da far inserire a chi lo apre il numero d i righe e di colonne che vuole avere nella propria matrice, dopodich lo stesso utente pu inserire i valori, uno p er volta, all'interno della stessa matrice. A questo punto se la matrice una matrice quadr ata il programma stampa la matrice, stampa la somma di tutti i valori all'interno di essa, restituisce tutti i massimi e i minimi di riga e colonna, stampa gli eventuali punti di sella, mostra le due diagonali e ne somma il contenuto. Se la matrice invece non quadra ta il programma esegue solo le operazioni possibili su una matrice normale. Alla fine del programma si ha la possibilit di decidere se uscir e dal programma o reinserire una nuova matrice. */ int main () { int riemp=0; int riemp2=0; int i=0; //questa variabile servir in una struttura di controllo per far stam pare a video una parola una sola volta matrice mat; array arr; char scelta; //variabile per scegliere se uscire o meno dal programma bool esci=false; //la variabile booleana servir per uscire un ciclo "do...whi le"
//M:utilizzo un ciclo do...while per ripetere il programma finch non diventa falsa la condizione finale do{ //M:Utilizzo questa struttura di controllo utile(in questo prog ramma) per stampare il messaggio una volta sola if (i==0){ cout<<"BENVENUTO"<<endl<<endl; i++; } system ("cls");//pulisce lo schermo della cons ole da tutte le scritte precedenti //M:Utilizzo una piccola procedura non differe nziata dal main per inserire numero di righe e colonne cout<<"Inserisci il numero di righe e di colon ne della tua matrice:"<<endl<<endl; cout<<"RIGHE: "; cin>>riemp; cout<<endl; cout<<"COLONNE: "; cin>>riemp2; cout<<endl<<endl;
//richiamo la procedura inseriscimat (mat, riemp, riemp2);
system ("pause");//ferma il programma fino all a pressione di un tasto qualsiasi
system ("cls");
//M:utilizzo la struttura di controllo per cap ire se la matrice quadrata if (riemp==riemp2){ //richiamo tutte le funzion i e le procedue per le matrici quadrate stampamatrice (mat, riemp, riemp2); stampasomma (sommatuttamatr ice (mat, riemp, riemp2)); maxriga (mat, riemp, riemp2 ); minriga (mat, riemp, riemp2 ); maxcolonna (mat, riemp, rie mp2); mincolonna (mat, riemp, rie mp2); calcolasella (mat, riemp, r iemp2); system ("cls"); trovadiagonale (mat, arr, r iemp); //A:dopo la la procedura "t rovadiagonale" l'array arr assume i valori della diagonale prima stampadiagonale (arr, riemp ); stampasomma (sommadiagonale (mat, riemp)); system ("cls"); trovasecondadiagonale (mat, arr, riemp); //A:dopo la la procedura "t rovasecondadiagonale" l'array arr assume i valori della diagonale seconda stampadiagonale (arr, riemp ); stampasomma (sommasecondadi agonale (mat, riemp)); system ("cls"); } //M:se l'if non soddisfatto la matrice non quadrata quindi utilizzo un else else { //richiamo le funzioni per una matrice normale stampamatrice (mat, ri emp, riemp2); stampasomma (sommatutt amatrice (mat, riemp, riemp2)); maxriga (mat, riemp, r iemp2); minriga (mat, riemp, r iemp2); maxcolonna (mat, riemp , riemp2); mincolonna (mat, riemp , riemp2); calcolasella (mat, rie mp, riemp2); system ("cls"); }
//M:utilizzo questa pi ccola procedura per scegliere se uscire dal programma o reinserire un'altra matr ice cout<<"Se vuoi reinser ire un'altra matrice digita \"s\""<<endl; cout<<"altrimenti digi ta un carattere qualsiasi per uscire."<<endl; cin>>scelta; if ((scelta=='s') || ( scelta=='S')){ syste m ("pause"); } else {
}while (!esci);//A:quando esci=true esco dal ciclo do...while
system ("pause");
//il programma termina
}
void maxriga (matrice mat, int riemp, int riemp2){ int max=0; for (int i=0; i<riemp; i++){ max=mat[i][0]; for(int j=0; j<riemp2; j++){ if(mat[i][j]>max){ max=mat[i][j]; } } cout<<"Il massimo della riga "<<i+1<<" e':"<<max<<endl<<endl; } system("pause"); cout<<endl<<endl; }
void maxcolonna (matrice mat, int riemp, int riemp2){ int max=0; for (int j=0; j<riemp2; j++){ max=mat[0][j]; for(int i=0; i<riemp; i++){ if(mat[i][j]>max){ max=mat[i][j]; } } cout<<"Il massimo della colonna "<<j+1<<" e':"<<max<<endl<<endl ; } system("pause"); cout<<endl<<endl; }
void minriga (matrice mat, int riemp, int riemp2){ int min=0; for (int i=0; i<riemp; i++){ min=mat[i][0]; for(int j=0; j<riemp2; j++){ if(mat[i][j]<min){ min=mat[i][j]; } } cout<<"Il minimo della riga "<<i+1<<" e':"<<min<<endl<<endl; } system("pause"); cout<<endl<<endl; }
void mincolonna (matrice mat, int riemp, int riemp2){ int min=0; for (int j=0; j<riemp2; j++){ min=mat[0][j]; for(int i=0; i<riemp; i++){ if(mat[i][j]<min){ min=mat[i][j]; } } cout<<"Il minimo della colonna "<<j+1<<" e':"<<min<<endl<<endl; } system("pause"); cout<<endl<<endl; }
void inseriscimat (matrice &mat, int riemp, int riemp2){ for (int i=0; i<riemp; i++) { for (int j=0; j<riemp2; j++) { cout<<"Inserisci valore in riga "<<i+1<<" e colonna "<<j+1<<"."<<en dl; cin>>mat[i][j]; } } }
void stampamatrice (matrice mat, int riemp, int riemp2) { cout<<"Stampa della matrice"<<endl<<endl; for(int k=0; k<riemp2; k++){ if (k==0){cout<<" "; } if (k+1<10){ cout<<" "; } cout<<k+1<<" "; } cout<<endl; cout<<":::::::::::::::::::::::::::::::::::::::::::"; cout<<endl<<endl; for (int i=0; i<riemp; i++){ if(i+1<10){ cout<<" "; } cout<<i+1<<"| "; for(int j=0; j<riemp2; j++){ if (mat[i][j]<10){ cout<<" "; } cout<<mat[i][j]<<" "; } cout<<endl<<endl; } cout<<endl<<endl; system ("pause"); cout<<endl<<endl; }
void trovasecondadiagonale (matrice mat, array &arr, int riemp){ int cont=riemp-1; for(int i=0; i<riemp; i++){ arr[i]=mat[i][cont]; cont--;} }
void stampadiagonale (array arr, int riemp){ cout<<"Stampa diagonale della matrice"<<endl<<endl; for (int i=0; i<riemp; i++){ cout<<arr[i]<<" "; } cout<<endl<<endl; system ("pause"); cout<<endl<<endl; }
int sommadiagonale (matrice mat, int riemp){ int somma=0; for (int i=0; i<riemp; i++){ somma+=mat[i][i]; } return somma; }
int sommasecondadiagonale (matrice mat, int riemp){ int cont=riemp-1; int somma=0; for (int i=0; i<riemp; i++){ somma+=mat[i][cont]; cont--; } return somma; }
int sommatuttamatrice (matrice mat, int riemp, int riemp2) { int somma=0; for (int i=0; i<riemp; i++){ for(int j=0; j<riemp2; j++){ somma+=mat[i][j]; } } return somma; }
void stampasomma (int somma){ cout<<"La somma dei valori precedenti e': "<<somma<<endl<<endl;; system ("pause"); cout<<endl<<endl; }
void calcolasella (matrice mat, int riemp, int riemp2) { int riga=0; int max=0; int min=0; int sella=0; int colonna=0; for(riga=0; riga<riemp; riga++){ max=mat[riga][0]; for (int j=0; j<riemp2; j++){ if(max<mat[riga][j]){ max=mat[riga][j]; colonna=j; } min=mat[riga][colonna]; for(int i=0; i<riemp; i++){ if (min>mat[i][colonna]){ min=mat[i][colonna]; }
}
}
if(min==mat[riga][colonna]){
sella=min;
cout<<"C'e' una sella in posizione ["<<riga+1<<"]["<<colonna+1<<"] e': "<< sella<<endl<<endl;