Salve a tutti, di seguito vi posto la traccia dell'esercizio:
Il punto
(a) è svolto; nel punto
(b) funziona l'algoritmo di ricerca del massimo e stampa degli elementi della riga che contengono il massimo tranne in un caso.
In pratica se l'elemento più grande della matrice è il primo, il programma non lo calcola. Ho fatto un po' di tracing ma non trovo l'errore, allora ho pensato che il problema sarebbe potuto saltare all'occhio a chi non lo aveva scritto il programma.
lo svolgimento vero e proprio del punto
(b) parte dalle linee di codice:
fflush(stdin);
lettura_mat(&m,&r1,&c1);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DIM 10
typedef int matrice[MAX_DIM][MAX_DIM];
void lettura_mat(matrice *m, int *r, int *c){
int i,j;
printf("Inserire il numero di righe: ");
scanf("%d",r);
printf("Inserire il numero di colonne: ");
scanf("%d",c);
for(i=0;i<*r;i++){
printf("\n Riga %d \n",i+1);
for(j=0;j<*c;j++){
//printf("\n");
scanf("%d",&((*m)[i][j]));
}
}
}
void stampa_mat(matrice m, int r, int c){
int i,j;
for(i=0;i<r;i++){
printf("\n");
for(j=0;j<c;j++){
printf(" %d ",m[i][j]);
}
}
printf("\n");
}
int confronto(int n,int m){
int max;
if(n>m)
max=n;
else
max=m;
return max;
}
int main(){
int r1,c1,r2,c2,i,j,k,st,maxt,maxr,it; //st= somma temporanea
matrice m1,m2,s,p,m;
lettura_mat(&m1,&r1,&c1);
lettura_mat(&m2,&r2,&c2);
printf("\n La somma delle due matrici e':");
if(r1==r2 && c1==c2){
for(i=0;i<r1;i++){
for(j=0;j<c1;j++){
s[i][j]=m1[i][j]+m2[i][j];
}
}
stampa_mat(s,r1,c1);
}else printf("\nNon e' possibile effettuare la somma di due matrici di dimensioni diverse");
printf("\n il prodotto delle due matrici e'");
if(c1==r2){
for(i=0;i<r1;i++){
for(k=0;k<c2;k++){
st=0;
for(j=0;j<r2;j++){
st=st+(m1[i][j]*m2[j][k]);
}
p[i][k]=st;
}
}
stampa_mat(p,r1,c2);
}else printf("\nNon e' possibile effettuare il prodotto righe per colonne:");
//printf("test) %d %d\n",confronto(2,3),confronto(7,5));
fflush(stdin);
lettura_mat(&m,&r1,&c1);
maxt=0;
it=0;
maxr=m[0][0];
for(i=0;i<r1;i++){
j=0;
//printf("\ntest) i=%d maxr=%d maxt=%d it=%d\n",i,maxr,maxt,it);
while(j<(c1-1)){
maxr=confronto(m[i][j+1],m[i][j]);
j++;
}
if(maxt!=confronto(maxt,maxr))
it=i;
maxt=confronto(maxt,maxr);
}
printf("\nLa riga con l'elemento maggiore della matrice e'(se il valore massimo si trovi in piu' righe verra' stampata a video la prima):\n");
for(j=0;j<c1;j++){
printf("%d ",m[it][j]);
}
system("PAUSE");
return 0;
}
Esempio emblematico: