Domanda Non riesco a capire questi esercizi

Gianni2345678

Utente Iron
1 Gennaio 2022
4
1
0
3
Ultima modifica da un moderatore:
Non riesco a capire in seguenti esercizi:
-Scrivi un programma in grado di stabilire e stampare la somma, il prodotto e la media di una
sequenza di valori inseriti in input dall’utente.
Conta e stampa la quantità di valori pari e dispari inseriti.
(come l' ho fatto io):
C:
#include <stdio.h>
#include <stdlib.h>

int main(){
    float media;
    int num1, somma, contatore, q, prodotto, contapari, contadispari;
    printf("Benvenuto!");
    printf("\nQuanti numeri vorresti inserire?");
    scanf("%d", &q);
  
    contatore=0;
    somma=0;
    prodotto=0;
    media=0;
    contapari=0;
    contadispari=0;
  
    while(contatore<q){
        printf("Inserisci il numero:");
        scanf("%d", &num1);
            somma=somma+num1;
                prodotto=num1*num1;
                    media=(num1+num1)/q;
                  
        if(num1%2==0){
            contapari=contapari+1;
        }
        else{
            contadispari=contadispari+1;
        }
            contatore=contatore+1;
    }

    printf("\nPari:%d", contapari);
    printf("\nDispari:%d", contadispari);
    printf("\nSomma:%d", somma);
    printf("\nProdotto:%d", prodotto);
    printf("\nMedia:%f", media);
  
    return 0;
}
 
La somma è corretta, parti da 0 e calcoli la somma parziale sommando ogni volta il numero inserito dall'utente. Per il prodotto devi fare la stessa cosa, prodotto = prodotto * num1;, ma devi partire da 1 invece che da 0. La media la puoi calcolare fuori (i.e., quando termina) dal ciclo while: sai che la somma di tutti gli elementi è memorizzata nella variabile somma e sai che sono stati inseriti q elementi, devi solo fare una divisione. Conta pari e conta dispari mi sembra corretto.
 
  • Mi piace
Reazioni: Gianni2345678
ehi, grazie della risposta ma la media non me la conta come %f ma come %d e non so proprio il perchè.
Ho provato a mettere num1 come float ma poi non riesci più a fare num1%2==0
 
ehi, grazie della risposta ma la media non me la conta come %f ma come %d e non so proprio il perchè.
Ho provato a mettere num1 come float ma poi non riesci più a fare num1%2==0
Questo succede perché con un codice del tipo
C:
double x = a / b;
dove a e b sono interi, viene fatta la divisione tra interi e poi convertita in double. Tu vuoi prima convertire in double e poi fare la divisione
C:
double x = (double)a / b;
 
  • Mi piace
Reazioni: Gianni2345678
Questo è l'ultimo che non sono riuscito a fare, te ne sarei grato se provassi a farlo; ho provato a fare giorno=giorno+1 e poi applicare le condizioni a tutti i mesi (tipo per febbrario se il giorno superava il 28 scriveva 'marzo') ma alla fine mi da un errore per le stringhe e non si compila più nulla .
La traccia è:
Scrivi un programma in grado di stabilire e stampare la somma, il prodotto e la media di una sequenza di valori inseriti in input dall’utente. Conta e stampa la quantità di valori pari e dispari inseriti.
(il contapari e dispari è l'unica cosa che mi esce)
Grazie mille.
 
ho provato a fare giorno=giorno+1 e poi applicare le condizioni a tutti i mesi (tipo per febbrario se il giorno superava il 28 scriveva 'marzo') ma alla fine mi da un errore per le stringhe e non si compila più nulla
Non ho idea del perché ti serve contare i giorni e i mesi. Non li hai mai menzionati prima di questa frase e non sono presenti né nel codice e né nella traccia dell'esercizio. Avrei preferito vedere il tuo tentativo di risolvere gli errori che ti ho segnalato tenendo buono il tuo codice; però vabbé, ne approfitto per farti vedere il for. Si può risolvere così:
C:
#include <stdio.h>

int main() {
  int n;
  printf("Quanti numeri vorresti inserire? ");
  scanf("%d", &n);

  int sum = 0, prod = 1, odds = 0;
  for (int i = 0; i < n; i++) {
    int val;
    printf("Inserisci numero: ");
    scanf("%d", &val);

    sum += val;
    prod *= val;
    odds += val % 2;
  }

  printf("\nPari: %d\n", n - odds);
  printf("Dispari: %d\n", odds);
  printf("Somma: %d\n", sum);
  printf("Prodotto: %d\n", prod);
  printf("Media: %f\n", (double)sum / n);

  return 0;
}
 
ok grazie, credo di aver sbagliato proprio pagina dell'es perchè for non ce l'hanno neancora spiegato.
No, non hai sbagliato. Si può tranquillamente risolvere usando il ciclo while come stavi facendo tu. Ti ho postato una soluzione alternativa usando il for perché mi viene difficile credere che tu non sei riuscito ad applicare le tre modifiche che ti ho segnalato nella prima risposta. Ripeto in modo più esplicito:
  1. prodotto=0; deve diventare prodotto=1;
  2. prodotto=num1*num1; deve diventare prodotto=prodotto*num1;
  3. media=(num1+num1)/q; deve diventare media=(float)somma/q; e va scritto fuori dal while.
Fai i dovuti test per accertartene, ma fatto questo la tua soluzione dovrebbe essere corretta.