Problema massimo colonne

di Anonimizzato23508 il
10 risposte
Ciao ragazzi, sto riscontrando problemi sul calcolo del massimo di ogni colonna, non capisco dove sbaglio, vi mando il codice:

int i;
 int j;

  for (int j=0; j<c; j++){
    max[j]=0;
    for (int i=0; i<r; i++){
        if (mat[i][j]>max[j])
            max[j]=mat[i][j];


    }
  }
 
printf("Il massimo della colonna %d e': %d\n",i+1,max[j]);


   }
vi ringrazio in anticipo.

10 Risposte

  • Scusa ma stai facendo un sacco di confusione, vediamo se riesco ad aiutarti:
    1. se cerchi un massimo in una colonna è come cercare un massimo in un vettore (array) e ti basta quindi un solo ciclo for; se fai due cicli for innestati c'è qualcosa che non quadra;
    2. se cerchi un massimo perchè usi un vettore (max[])? Ti basta una variabile ...
    3. se cerchi un massimo lo puoi inizializzare con il primo valore della colonna
    Ci sono altri errori, ma ti suggerisco di riscrivere la funzione con queste note.
    EDIT: ho riletto meglio, stai cercando il massimo per ciascuna colonna, quindi ignora i punti 1. e 2. e allora aggiungo:
    4. inserisci l'ultima printf alla fine del for esterno
  • Sono giunto a scrivere una cosa del genere, non va, ma spero di aver quadrato almeno la parte logica.

    int j=0;
    for (int i=0; i<r; i++){
         max=0;
    
    
        if (mat[i][j]=max){
            max=mat[i][j];
            j=j+1;
        }
    
     printf("%d",max);
    
    }
    
    
    }
  • Ma sai cosa fa questa linea

    if (mat[j]=max){

    ?
  • Errore di battitura, intendevo scrivere >
  • Guarda, ho scritto una semplice funzione che determina il massimo in un array:
    #include <stdio.h>
    
    int TrovaMax(int *v, int n)
    {
    	int i;
    	int m;
    
    	m = v[0];
    	for (i = 1; i < n; i++)
    	{
    		if (v[i] > m)
    			m = v[i];
    	}
    
    	return m;
    }
    
    void main(void)
    {
    	int vett[] = { 1,5,-10,23,74,1,20 };
    	int max;
    
    	max = TrovaMax(vett, sizeof(vett) / sizeof(int));
    	printf("Il massimo e' %d\n", max);
    }
    Prova a capirne la logica e quindi implementare la ricerca del massimo sulle colonne di una matrice.
  • Ok, fatto così ma non va..
    int i;
    int j;
    int max;
    
    max=mat[0][0];
    
     for (i=0; i<r; i++){
        for (j=0; j<c; j++){
            if (mat[i][j]>max){
                max=mat[i][j];
            }
        }
        return max;
     }
    
      printf("%d",max);
    
    
    
    
    }
  • Così stai esaminandi tutto l'array e non una sola colonna

    Il return non ha senso
  • Quindi per esaminare colonna per colonna come potrei fare? Devo fissare qualcosa?
  • Qualcuno può darmi qualche dritta?
  • Pezzi di codice decontestualizzati non ci aiutano molto ad aiutarti, la prossima volta posta il codice per intero.

    In ogni caso se devi trovare il massimo per ogni colonna della matrice, rispetto al post iniziale ti stai allontanando sempre più dalla soluzione.
    Posto il tuo codice, le righe evidenziate sono quelle che devi aggiustare:
    for(int j = 0; j < c; j++)
    {
        max[j] = 0;//***
        for(int i = 0; i < r; i++)//***
        {
            if(mat[i][j] > max[j])
            {
                max[j] = mat[i][j];
            }
        }
        printf("Il massimo della colonna %d e': %d\n", i + 1, max[j]);//***
    }
    Domanda: qual è la dimensione dell'array max?
Devi accedere o registrarti per scrivere nel forum
10 risposte