PDA

Visualizza la versione completa : [C] Minimo e massimo con un ciclo while


nicuccia
05-01-2007, 13:27
Devo realizzare questo esercizio:
/* Nelle gare di tuffi, ognuno dei giudici di gara attribuisce al concorrente
un punteggio; il punteggio finale viene ottenuto calcolando la media, dopo
avere scartato il valore pi alto e il pi basso fra i punteggi ottenuti.
Scrivere un programma che, per un certo numero di concorrenti, riceva in input
il nome e i relativi 10 punteggi e produca in output il punteggio finale di
ciascun concorrente. */

E mettendomi a smanettare ho trovato un problema nel calcolo del valore minimo e massimo dei punteggi di ciascun concorrente, mi calcola il massimo ma non il minimo. Tempo fa ho fatto un esercizio simile e funzionava tutto, ho provato ad applicare le stesse regole a questo ma non va.. Dove sbaglio? :confused: :cry: :dh:

#include <stdio.h>
#include <stdlib.h>
main()
{
int nc;
float contPTG=0, PTG, sommaPTG=0, mPTG, min, max, fPTG;
char nome[20];
printf("Inserisci il numero dei concorrenti: ");
scanf("%d", &nc);
while (nc>0)
{
printf("Inserisci nome: ");
scanf("%s", &nome);
printf("Inserisci il numero dei punteggi: ");
scanf("%f", &contPTG);
while (contPTG > 0)
{
printf("Inserisci punteggi: ");
scanf("%f", &PTG);
if (PTG>max) max=PTG;
if (PTG<min) min=PTG;
sommaPTG += PTG;
contPTG--;
}
printf("La somma dei punteggi e': %f \n", sommaPTG);
printf(" Il punteggio massimo e' = %f\n", max);
printf(" Il punteggio minimo e' = %f\n", min);
sommaPTG = 0;
nc--;
}
system("pause");
}

Dr. Fiemost
05-01-2007, 16:01
Devi inizializzare min con un numero alto.
Ad esempio se i punteggi vanno da uno a dieci poni min=11, altrimenti la condizione PTG<min non mai verificata.

andbin
05-01-2007, 16:02
Originariamente inviato da nicuccia
E mettendomi a smanettare ho trovato un problema nel calcolo del valore minimo e massimo dei punteggi di ciascun concorrente, mi calcola il massimo ma non il minimo. Tempo fa ho fatto un esercizio simile e funzionava tutto, ho provato ad applicare le stesse regole a questo ma non va.. Dove sbaglio? :confused: :cry: :dh: min e max non vengono inizializzati all'inizio, il loro valore del tutto arbitrario.

Quindi: o metti un flag o contatore e al primo valore fai in modo che max=PTG e min=PTG, oppure inizializzi min e max rispettivamente a un valore molto grande e molto piccolo.

donato.sciarra
06-01-2007, 17:56
I valori min e max non vanno inizializzati solo all'inizio ma anche dopo la stampa del minimo e massimo del cocorrente per resettare e quindi essere pronti a ricevere nuovi valori per il concorrente successivo...



#include <stdio.h>
int main(void)
{
int nc;
float contPTG=0, PTG, sommaPTG=0, mPTG, min=11.0, max=-1.0, fPTG;
char nome[20];
printf("Inserisci il numero dei concorrenti: ");
scanf("%d", &nc);
while (nc>0){
printf("Inserisci nome: ");
scanf("%s", &nome);
printf("Inserisci il numero dei punteggi: ");
scanf("%f", &contPTG);
while (contPTG > 0){
printf("Inserisci punteggi: ");
scanf("%f", &PTG);
if (PTG>max) max=PTG;
if (PTG<min) min=PTG;
sommaPTG += PTG;
contPTG--;
}
printf("La somma dei punteggi e': %f \n", sommaPTG);
printf(" Il punteggio massimo e' = %f\n", max);
printf(" Il punteggio minimo e' = %f\n", min);
/*assegno nuovamente un valore a min e a max per essere pronto a ricevere nuovi valori del concorrente successivo...*/
min=11.0;
max=-1.0;
sommaPTG = 0;
nc--;
}
//pulisce il buffer...
getchar();
getchar();
//chiude ritornando un valore intero
return 0;
}

nicuccia
06-01-2007, 23:38
Grazie mille ragazzi^^

Loading