Problema esercizio valore massimo, minimo, media

di Anonimizzato14379 il
8 risposte
Riporto qui il testo dell'esercizio (non sapevo come sintetizzarlo meglio nel titolo della discussione):
- Creare un programma che legga i dati (int) dall’input tramite la funzione scanf e calcoli il
minimo, il massimo e la media per i valori pari immessi e il minimo, il massimo e la media
per i valori dispari.

Bene ho provato in mille modi cercando di cambiare più volte pezzi del codice ma non riesco ad ottenere quello che le specifiche mi richiedono...
Ecco qui il mio tentativo:
#include <stdio.h>
#include <limits.h>
int main ()
{
int min, max;
int counter=1;
int total=0;
int num;
min=INT_MAX;
max=INT_MIN;
float Media;
 printf("Inserire N numeri, -1 per terminare:");
 scanf("%d", &num);
while (num!=-1) {
if (num%2==1 || num==1) {
  total+=num;
  Media= (float) total/counter;
  counter++;
  if (num<min)
	min=num;
  if (num>max)
	max=num;
  printf("Per tutti i numeri dispari si ha...\nMinimo: %d\nMassimo: %d\nMedia: %.2f\n", min, max, Media);
  }
  else if (num%2==0 && num!=1) {
  total+=num;
  Media= (float) total/counter;
  counter++;
  if (num<min)
	min=num;
  if (num>max)
	max=num;
  printf("Per tutti i numeri pari si ha...\nMinimo: %d\nMassimo: %d\nMedia: %.2f\n", min, max, Media);
 }
  printf("Inserire N numeri, -1 per terminare:");
  scanf("%d", &num);
}
}
Perdonatemi gli errori concettuali (e non) che considerate banali, ho iniziato da poco più di 3 settimane il corso di programmazione all'università con un'esperienza pari a 0 alle spalle
Grazie in anticipo

8 Risposte

  • Per cominciare, imposta tutte le variabili che ti servono.

    Il testo ti parla di 2 minimi, 2 massimi e 2 medie diverse (un gruppo per i pari e uno per i dispari).
  • Ho dichiarato separatamente le variabili e sono riuscito a far uscire almeno la media corretta per ogni volta che inserisco un numero pari o dispari. Il problema è che adesso i vari Massimi e Minimi stampano continuamente questi valori:
    Inserire N numeri, -1 per terminare:1
    Per tutti i numeri dispari si ha...
    Minimo: -2147483648
    Massimo: 2147483647
    Media: 1.00
    Inserire N numeri, -1 per terminare:2
    Per tutti i numeri pari si ha...
    Minimo: -2147483648
    Massimo: 2147483647
    Media: 2.00
    Inserire N numeri, -1 per terminare:3
    Per tutti i numeri dispari si ha...
    Minimo: -2147483648
    Massimo: 2147483647
    Media: 2.00
    Inserire N numeri, -1 per terminare:-1
    
    Ho cambiato il codice così:
    #include <stdio.h>
    #include <limits.h>
    int main ()
    {
    int minD=INT_MIN;
    int minP=INT_MIN;
    int maxD=INT_MAX;
    int maxP=INT_MAX;
    int counterD=1;
    int counterP=1;
    int totalD=0;
    int totalP=0;
    int num;
    float MediaD, MediaP;
     printf("Inserire N numeri, -1 per terminare:");
     scanf("%d", &num);
    while (num!=-1) {
    if (num%2==1 || num==1) {
      totalD+=num;
      MediaD= (float) totalD/counterD;
      counterD++;
      if (num<minD)
    	minD=num;
      if (num>maxD)
    	maxD=num;
      printf("Per tutti i numeri dispari si ha...\nMinimo: %d\nMassimo: %d\nMedia: %.2f\n", minD, maxD, MediaD);
      }
      else if (num%2==0 && num!=1) {
      totalP+=num;
      MediaP= (float) totalP/counterP;
      counterP++;
      if (num<minP)
    	minP=num;
      if (num>maxP)
    	maxP=num;
      printf("Per tutti i numeri pari si ha...\nMinimo: %d\nMassimo: %d\nMedia: %.2f\n", minP, maxP, MediaP);
     }
      printf("Inserire N numeri, -1 per terminare:");
      scanf("%d", &num);
    }
    }
  • Queste impostazioni devono essere invertite così
    
    int minD=INT_MAX;
    int minP=INT_MAX;
    int maxD=INT_MIN;
    int maxP=INT_MIN;
    
  • Perfetto grazie mille!! Non vorrei risultare inopportuno, soprattutto dopo averti rubato del tempo, ma come mai per il "min" devo considerare "INT_MAX" e per il "max", "INT_MIN"? Grazie ancora
  • Non ci hai pensato un po' su?

    Se cerchi un minimo, il valore di partenza deve essere un minimo o un massimo?
  • Un massimo altrimenti la stringa "if (num<minD)" con quello che ne segue non avrebbe senso logico, dato che non potrebbe mai esistere un valore minore del minimo tra tutti i valori immessi... almeno credo
  • Quindi non era difficile ... no?
  • Dopo essere stato guidato, il tutto è sicuramente risultato più immediato, grazie dell'aiuto!
Devi accedere o registrarti per scrivere nel forum
8 risposte