Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 45
  1. #1

    [C]Somma di numeri pari o dispari

    Ciao,
    devo fare un programma che, ricevuta in ingresso una sequenza di numeri interi positivi terminata da zero visualizzi:
    1) La somma dei numeri pari
    2) La somma dei numeri dispari
    3) La somma dei numeri in posizione pari
    4) La somma dei numeri in posizione dispari

    Ho creato la funzione che soddisfa i punti 3 e 4 però per risolvere i punti 1 e 2 bisogna fare 2 sottoprogrammi o uno solo?
    codice:
    #include<stdio.h>
    int somma(int[]);
    int sommap(int[], int, int);
    int main()
    {
        int num[1000], i=0, j=1, op=0, k=0;
        printf("Inserisci una sequenza di numeri interi positivi (per terminare premi 'zero')\n");
        while(num[i]!=0)
        {
                          printf("\nInserisci il %d%c numero:", j, 167);
                          scanf("%d", &num[i]);
                          i++;
                          j++;
        }
        do
        {
                     printf("Cosa vuoi vedere?\n\n");
                     printf(" 1) La somma dei numeri pari\n");
                     printf(" 2) La somma dei numeri dispari\n");
                     printf(" 3) La somma dei numeri in posizione pari\n");
                     printf(" 4) La somma dei numeri in posizione dispari\n");
                     printf("Scelta:");
                     scanf("%d", &op);
        }
        while(op!=1 && op!=2 && op!=3 && op!=4);
        switch(op)
        {
        case 1:
        printf("La somma dei numeri pari da come risultato: %d", somma(num));
        break;
        case 2:
        printf("La somma dei numeri dispari da come risultato: %d", somma(num));     
        break;
        case 3:
        k=0;
        printf("La somma dei numeri in posizione pari da come risultato: %d", sommap(num, k, i));     
        break;       
        default:
        k=1;
        printf("La somma dei numeri in posizione dispari da come risultato: %d", sommap(num, k, i));     
        }
        system("pause");
        return 0;
    }
    //Implementazione che conta i numeri in posizione pari o dispari
    int sommap (int num1[], int pos, int tot)
    {
        int y=0; //Serve per la somma
        while(num1[pos]<=tot)
        {
                             y=y+num1[pos];
                             pos=pos+2;
        }
        return y;
    }
    //Implementazione della funzione che conta i numeri pari o dispari
    int somma (int num2[])
    {
        //Ciao
        //Qui non ho scritto niente poichè non sapevo come scrivere il codice per  vedere se il numero era pari o dispari
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ho dato un occhio prima a quello che c'è già.
    La funzione sommap non mi sembra corretta, in particolare:
    while(num1[pos]<=tot)

    confronti tot che è il numero di elementi inseriti con num1[pos] che è il valore dell'iesimo elemento.

  3. #3
    Ok,
    quindi secondo te come potrei risolvere questo problema, mi spiego meglio, quale valore dovrei inserire al posto di tot?

    Ciao e Grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Il problema non è tot, è num1[pos].
    Tu vuoi sommare tutti gli elementi partendo da pos (0 o 1), fino ad arrivare a tot (ultimo elemento). Fin qui ok.
    Il problema è a sinistra del "<" con num1[pos] che è il VALORE dell'iesima posizione, che non c'entra nulla col tuo confronto.

  5. #5
    Ciao,
    ho sistemato il codice in questo modo:
    codice:
    int sommap (int num1[], int pos, int tot)
    {
        int y=0; //Serve per la somma
        while(pos<=tot)
        {
                             y=y+num1[pos];
                             pos=pos+2;
        }
        return y;
    }
    Adesso è giusto?
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ora sì, io l'avrei solo scritto con variabili con un nome più sensato: se una variabile esprime una somma chiamala "somma" non "y".
    "y" di solito si usa insieme alla "x" proprio quando c'è di mezzo il piano cartesiano e stop.
    Un po' più leggibile potrebbe essere con un for invece che con il while, ma niente di che...
    codice:
    int sommap(int num1[], int pos, int tot)
    {
        int i, somma = 0;
    
        for (i = pos; i < tot; i += 2)
            somma += num1[i];
            
        return somma;
    }
    A parte questo non funziona invece la prima parte:
    while(num[i]!=0)
    L'array l'hai solo dichiarato, quindi può contenere qualunque cosa, sul mio pc per esempio:
    printf("%d\n", num[0]);
    stampa proprio 0, quindi non mi richiede nessun numero.

  7. #7
    Ok,
    quindi cosa mi suggeriresti per fare un controllo sul imput, potrebbe andare bene un do..while?


    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Puoi farlo in tanti modi sicuramente. Hai postato decine di esercizi, ce ne avrai 1 in cui richiedevi dei numeri con cui riempire un array?

  9. #9
    Ciao,
    ho sistemato il codice, solo che se inserisco zero il ciclo di inserimento non termina ma continua?

    Mi potreste cortesemente dire se si tratta di un errore logico o di codice.

    Ecco il pezzo di codice che deve svolgere il controllo sull'input:
    codice:
     printf("Inserisci una sequenza di numeri interi positivi (per terminare premi 'zero')\n");
        while(num[i]!=0)
        {
                          printf("\nInserisci il %d%c numero:", j, 167);
                          scanf("%d", &num[i]);
                          if(num[i]<0)
                          {
                                      do
                                      {                                 
                                      printf("Il numero inserito '%d' non e\' corretto perche\' e\' minore di zero\n", num[i]);
                                      printf("Inserisci nuovamente il %d%c numero", j, 167);
                                      scanf("%d", &num[i]);
                                      }
                                      while(num[i]<0);
                          }
                          i++;
                          j++;
        }
    Vi posto anche il codice completo per aver la visione completa di ciò che ho svolto fino ad ora:
    codice:
    #include<stdio.h>
    int somma(int[]);
    int sommap(int[], int, int);
    int main()
    {
        int num[1000], i=0, j=1, op=0, k=0;
        printf("Inserisci una sequenza di numeri interi positivi (per terminare premi 'zero')\n");
        while(num[i]!=0)
        {
                          printf("\nInserisci il %d%c numero:", j, 167);
                          scanf("%d", &num[i]);
                          if(num[i]<0)
                          {
                                      do
                                      {                                 
                                      printf("Il numero inserito '%d' non e\' corretto perche\' e\' minore di zero\n", num[i]);
                                      printf("Inserisci nuovamente il %d%c numero", j, 167);
                                      scanf("%d", &num[i]);
                                      }
                                      while(num[i]<0);
                          }
                          i++;
                          j++;
        }
        do
        {
                     printf("Cosa vuoi vedere?\n\n");
                     printf(" 1) La somma dei numeri pari\n");
                     printf(" 2) La somma dei numeri dispari\n");
                     printf(" 3) La somma dei numeri in posizione pari\n");
                     printf(" 4) La somma dei numeri in posizione dispari\n");
                     printf("Scelta:");
                     scanf("%d", &op);
        }
        while(op!=1 && op!=2 && op!=3 && op!=4);
        switch(op)
        {
        case 1:
        printf("La somma dei numeri pari da come risultato: %d", somma(num));
        break;
        case 2:
        printf("La somma dei numeri dispari da come risultato: %d", somma(num));     
        break;
        case 3:
        k=0;
        printf("La somma dei numeri in posizione pari da come risultato: %d", sommap(num, k, i));     
        break;       
        default:
        k=1;
        printf("La somma dei numeri in posizione dispari da come risultato: %d", sommap(num, k, i));     
        }
        system("pause");
        return 0;
    }
    //Implementazione che conta i numeri in posizione pari o dispari
    int sommap(int num1[], int pos, int tot)
    {
        int i, somma = 0;
    
        for (i = pos; i < tot; i += 2)
            somma += num1[i];
            
        return somma;
    }
    //Implementazione della funzione che conta i numeri pari o dispari
    int somma (int num2[])
    {
        //Ciao
        //Qui non ho scritto niente poichè non sapevo come scrivere il codice per  vedere se il numero era pari o dispari
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Hai notato che tu inserisci

    num[i]

    e poi la while controlla il valore di

    num[i+1]

    dato che nel frattempo hai aumentato i con

    i++

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.