You are on page 1of 6

//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
{

esci=true;

system("cls");

cout<<"**************ARRIVEDERCI**************"<<endl<<endl;

}

}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 trovadiagonale (matrice mat, array &arr, int riemp){
for(int i=0; i<riemp; i++){
arr[i]=mat[i][i];}
}

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;

system ("pause");

cout<<endl<<endl;

}

}

}