Vettori, calcolo max. Se ce ne sono molti, definire le posiz

di il
1 risposte

Vettori, calcolo max. Se ce ne sono molti, definire le posiz

Salve,

ho costruito un programma che legge un vettore da tastiera, lo stampa, calcola il massimo e calcola la media.
Ho un problema però. Ho inserito la variabile "pos" che mi indica a che posizione si trova il max e stampandola gli ho dato valore "pos+1" per non farla partire da 0. Voglio però stampare anche le altre posizioni dei max. Se ad esempio inserisco un vettore (3, 5, 7, 3, 7), voglio far stampare che il max si trova in posizione 3 e 5. Come faccio?
Grazie.
#include <stdio.h>
#include <stdlib.h>
#define N 5

int main()
{
    int v[N], i, somma, max, pos;
    float media;
    for(i=0; i<N; i++) /*Leggo il vettore*/
    {
        printf("Inserire valore: ");
        scanf("%d", &v[i]);
    }
    max=v[0];
    printf("Il vettore e': "); /*Stampo il vettore e calcolo il max*/
    for(i=0; i<N; i++)
    {
        printf("%d, ", v[i]);
        if(v[i]>=max)
        {
            max=v[i];
            pos=i;
        }
    }
    printf("\n");
    somma=0;
    for(i=0; i<N; i++) /*Faccio la media*/
    {
        somma=somma+v[i];
    }
    media= (float)(somma/N);
    printf("Media: %f\n", media);
    printf("Il massimo e' %d.\n", max);
    return 0;
}

1 Risposte

  • Re: Vettori, calcolo max. Se ce ne sono molti, definire le posiz

    Guarda quà
    
    if(v[i]>max)
    {
                max=v[i];
                pos=i;
    }
    
    Se invece di usare >= usi solo > tu sai che il massimo trovato è il primo. A sto punto rifai la stessa procedura partendo dalla posizione pos+1 fino alla fine. Una cosa del tipo:
    
     #include <stdio.h>
     #include <stdlib.h>
    
     int trovaMax(int *max,int v[], int *pos, int size)
     {
    	 int i = *pos;
    	 int trovato = 0;
    	 for(; i < size; i++)
    	 {
    		 if(*max < v[i])
    		 {
    			 *max = v[i];
    			 *pos = i;
    			 trovato = 1;
    		 }
    	 }
    	 if(trovato == 0)
    		return -1;
    	 (*pos)++;
    	 return *pos;
     }
    
    
     int main()
     {
    	 int v[] = {3, 5, 7, 3, 7,7,3,1,7,4,5,7};
    	 int pos = 0;
    	 int max = 0;
    	 while(trovaMax(&max,v,&pos,12) != -1)
    	 {
    		 printf("il max si trova nella posizione %d del valore %d\n", pos, max);
    		 max = 0;
    	 }
    	 return 0;
     }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte