Esercizio programmazione linguaggio C prime armi.

di il
9 risposte

Esercizio programmazione linguaggio C prime armi.

Ho bisogno di aiuto nello svolgere questo esercizio:

Scrivere un programma in grado di:
? leggere un numero imprecisato di numeri dallo standard input (scanf) e calcolare il prodotto dei
numeri letti fino a che viene letto il numero 36. A questo punto il programma termina e stampa
il risultato;
? se pero' l'utente ha inserito il numero 11, tutti i numeri dati successivamente sono ignorati fino
a che è inserito il numero 36 e quindi il programma termina oppure è inserito il numero 22 e
quindi il programma riprende ad effettuare il prodotto dei numeri in input.

Allora l'esercizio va svolto prima senza costrutto funzionale e poi anche con il costrutto funzionale, sono inesperto e dovrei consegnare questo esercizio per un progetto dell'università.
Il programma senza il costrutto funzionale l'ho risolto così:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
int contatore,numero,prodotto;
printf("INSERISCI UN NUMERO \n");

for(contatore=0;numero!=36;contatore++){
scanf("%d",&numero);
prodotto=prodotto*numero;
printf("il loro prodotto e': %d \n",prodotto);
while(numero==11){
for(contatore=0;numero!=11;contatore){
scanf("%d",&numero);}
for(contatore=0;numero!=22;contatore){
printf("INSERISCI 36 PER CHIUDERE IL PROGRAMMA OPPURE 22 PER CONTINUARE AD OPERARE (DOPO IL 22 INSERIRE UN ALTRO NUMERO) \n");
scanf("%d",&numero);
for(contatore=0;numero==36;contatore){
return 0;
}
}
}
}
return 0;
}

Questo è quello senza costrutto funzionale e funziona ma per quello con il costrutto funzionale non riesco a trovare soluzione, spero che qualcuno possa aiutarmi.
Grazie in anticipo

9 Risposte

  • Re: Esercizio programmazione linguaggio C prime armi.

    Innanzitutto utilizza i tag CODE per postare del codice qui sul forum.

    Premesso che non l'ho letto in modo approfondito, ma ti posso assicurare che quel codice, oltre ad essere inutilmente contorto e ridondante, è sicuramente sbagliato.
    Quindi prima di passare al programma "con il costrutto funzionale" (che poi scusa l'ignoranza, cosa significa?), aggiusta questo!
  • Re: Esercizio programmazione linguaggio C prime armi.

    Eh ma guarda sulla traccia dell'esercizio il professore ha scritto costrutto funzionale quindi non so nemmeno io bene che fare. Comunque il programma funziona così perciò cioè non mi vengono altri modi per risolverlo.
  • Re: Esercizio programmazione linguaggio C prime armi.

    lucagallo128 ha scritto:


    Comunque il programma funziona così perciò cioè non mi vengono altri modi per risolverlo.
    - non hai opportunamente inizializzato le variabili numero e prodotto con tutte le conseguenze che ne possono derivare;
    - il frammento di codice:
    for(contatore=0;numero!=11;contatore)
    {
        scanf("%d",&numero);
    }
    è perfettamente inutile, in quanto la condizione sarà sempre falsa vista la posizione in cui si trova quel for;
    - la variabile contatore risulta inutilizzata e più in generale utilizzi il costrutto for a sproposito. Per esempio nel seguente frangente:
    for(contatore=0;numero==36;contatore)
    {
        return 0;
    }
    basterebbe un if.

    Io semplicemente farei qualcosa del genere:
    #include <stdio.h>
    
    int main()
    {
        int n;
        int prodotto = 1;
        int flag = 1;
        do
        {
            printf("n --> ");
            scanf("%d", &n);
            if(flag)
            {
                prodotto *= n;
                if(n == 11)
                {
                    flag = 0;
                }
            }
            else if(n == 22)
            {
                flag = 1;
            }
        }
        while(n != 36);
        printf("PRODOTTO: %d", prodotto);
        return 0;
    }

    lucagallo128 ha scritto:


    Eh ma guarda sulla traccia dell'esercizio il professore ha scritto costrutto funzionale quindi non so nemmeno io bene che fare.
    Forse intende iterativo e ricorsivo?! Se ci sono novità fammi sapere.
  • Re: Esercizio programmazione linguaggio C prime armi.

    Forse intende tutto nel main oppure organizzato in funzioni richiamate dal main.

    In ogni caso concordo sull'uso spropositato delle for.
    Probabilmente non è chiaro il funzionamento e l'utilità della for.
  • Re: Esercizio programmazione linguaggio C prime armi.

    Comunque ho contattato il professore e ha specificato che con costrutto funzionale intende l'uso di funzioni richiamate dal main.
    Per il programma invece, almeno interpretando il testo a mio parere ho capito che bisognava fare un programma in grado di calcolare il prodotto di tutti i numeri inseriti e inserendo 36 il programma si arrestava, inoltre se si aggiungeva 11 tra i numeri, il programma non contava più il prodotto finchè non si inseriva 22 per farlo ripartire o 36 per chiuderlo, perciò non ho trovato nessun altro modo per costruirlo e farlo funzionare. Il contatore invece l'ho utilizzato per i for e doveva portare il conto dei numeri inseriti però nella precedente versione del programma il contatore non coincideva con i numeri inseriti (esempio, si inserivano 8 numeri ne contava 6). Comunque non ho riesco a trovare altre soluzioni per il programma se qualcuno riesce potrebbe aiutarmi grazie.
  • Re: Esercizio programmazione linguaggio C prime armi.

    lucagallo128 ha scritto:


    Comunque ho contattato il professore e ha specificato che con costrutto funzionale intende l'uso di funzioni richiamate dal main.
    Bell'esercizio del piffero allora!

    lucagallo128 ha scritto:


    Comunque non ho riesco a trovare altre soluzioni per il programma se qualcuno riesce potrebbe aiutarmi grazie.
    Se ti riferisci a quello "senza il costrutto funzionale" ti faccio notare che ti ho postato la soluzione intera, se invece ti riferisci a quello "con il costrutto funzionale", l'unico consiglio che posso darti è di dire al tuo professore ti sfruttare meglio la propria fantasia!
  • Re: Esercizio programmazione linguaggio C prime armi.

    Ah scusami non avevo visto però,ho seguito il tuo programma e mi sembra che risolva solo la prima parte dell'esercizio. Comunque ti ringrazio per il tuo aiuto, ma se potessi non lo farei nemmeno questo esercizio è una settimana che sbareo mattina e pomeriggio ma niente e la cosa più bella e che questo esercizio va portato all'esame e quindi sono obbligato a trovare una soluzione in qualche modo
  • Re: Esercizio programmazione linguaggio C prime armi.

    Ho trovato una soluzione forse ho sostituito i for e eliminato il contatore adesso va meglio?
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    int main(int argc, char *argv[]) {
    int contatore,numero,prodotto;
    printf("INSERISCI UN NUMERO \n");
    prodotto=1;
    do{
    scanf("%d",&numero);
    prodotto=prodotto*numero;
    printf("il loro prodotto e': %d \n",prodotto);        
    while(numero==11){
    while(numero!=11){
    scanf("%d",&numero);}	               
    while(numero!=22){
    printf("INSERISCI 36 PER CHIUDERE IL PROGRAMMA OPPURE 22 PER CONTINUARE AD OPERARE (DOPO IL 22 INSERIRE UN ALTRO NUMERO) \n");
    scanf("%d",&numero);
    if(numero==36){
    return 0;	
    }
    }
    }
    }
    while(numero!=36);
    return 0;
    }
    
  • Re: Esercizio programmazione linguaggio C prime armi.

    lucagallo128 ha scritto:


    Ah scusami non avevo visto però,ho seguito il tuo programma e mi sembra che risolva solo la prima parte dell'esercizio.
    Lo risolve tutto!

    lucagallo128 ha scritto:


    Ho trovato una soluzione forse ho sostituito i for e eliminato il contatore adesso va meglio?
    Sembra corretto, ma il seguente frammento di codice
    		while(numero!=11)
                {
                    scanf("%d",&numero);
                }
    è inutile in quanto la condizione di quel while sarà sempre falsa.
    Inoltre quel
    while(numero==11)
    può essere sostituito da un if.
    In ogni caso continuo a pensare che il tutto possa essere fatto in modo meno contorto e ridondante.

    P.S.
    Indenta il codice, altrimenti non si capisce nulla!

    P.P.S.
    Rilancio col seguente codice
    #include <stdio.h>
    
    int main()
    {
        int n;
        int prodotto = 1;
        int flag = 1;
        do
        {
            printf("n --> ");
            scanf("%d", &n);
            prodotto *= n * flag + !flag;
            if(flag && n == 11 || !flag && n == 22)
            {
                flag = !flag;
            }
        }
        while(n != 36);
        printf("PRODOTTO: %d", prodotto);
        return 0;
    }
Devi accedere o registrarti per scrivere nel forum
9 risposte