Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Chi mi corregge il programma?

3 views
Skip to first unread message

Sakurambo

unread,
Oct 9, 2009, 10:56:04 AM10/9/09
to
Ciao! Sono un “programmatore” alle prime armi, sto imparando il
linguaggio C sul Deitel&Deitel e sono arrivato al capitolo 4. Mi trovo
davanti ad un esercizio apparentemente semplice ma che non riesco a
far funzionare a dovere. Ecco la traccia:


Un'azienda di vendita per corrispondenza vende 5 prodotti differenti i
cui prezzi al dettaglio sono i seguenti:

1 = € 2.29
2 = € 4.50
3 = € 9.98
4 = € 4.49
5 = € 6.87

Scrivete un programma che legga una serie di coppie di numeri come
segue:

1- numero prodotto;
2 – quantità venduta in un giorno;

Il vostro programma dovrà utilizzare una istruzione switc per aiutare
a determinare il prezzo al dettaglio di ogni prodotto. Il programma
dovrà calcolare e visualizzare il totale al dettaglio di tutti i
prodotti venduti nell'ultima settimana.


/*Esercizio che calcola il valore totale di 5 prodotti venduti in una
settimana */

#include <stdio.h>

/*Dichiaro ed inizializzio le variabili*/
float prodA = 0, prodB = 0, prodC = 0, prodD = 0, prodE = 0, totale;
int count, quantita, nr = 1;

int main()
{
for(count = 1; count <= 7; count ++) /*Qui ho cercato
di far ciclare l'intero programma per sette volte, in modo da simulare
i giorni della
settimana. Senza risultato.*/
{
while(nr <= 5) /*Qui ho personalizzato il prog.:
anzicchè far inserire all'utente il numero del prodotto, ho fatto i
modo che fosse il programma a
richiederlo. Questo funziona.*/
{
printf("Iserire la quantità venduta del prodotto %d:
\t",nr); /*Qui il programma richide la quantità del
prodotto specifico*/
scanf("%d", &quantita); /*Assegno il valore
ottenuto a "quantita"*/

switch(nr) /*A seconda del valore di nr, assegno
la quantità al prodotto relativo*/
{
case '1': /*Se nr è uguale a 1*/
prodA += quantita; /*Somma quantità a prodA*/
break; /*Esci da switch*/

case '2': /*Idem*/
prodB += quantita;
break;

case '3': /*Idem*/
prodC += quantita;
break;

case '4': /*Idem*/
prodD += quantita;
break;

case '5': /*Idem*/
prodE += quantita;
break;

case '\n':
case '\t':
case ' ':
break;

/*default:
printf("Dati errati");
break;*/
} /*Fine di switch*/

nr++; /*Incremento nr per perfezionare
il ciclo*/

} /*Fine di while*/

} /*Fine di for*/

prodA *= 2.98; /*Moltiplico i totali per il
valore di ogni prodotto*/
prodB *= 4.50;
prodC *= 9.98;
prodD *= 4.49;
prodE *= 6.87;

totale = prodA + prodB + prodC + prodD + prodE ;
/*Visualizzo tutti i risultati*/
printf("L'incasso totale della settimana è stato di:
%.2f\n", totale);
printf("Così suddiviso:\nprodotto A:%.2f\nprodotto B:
%.2f\nprodotto C:%.2f\nprodotto D:%.2f\nprodotto E:%.2f\n", prodA ,
prodB , prodC , prodD , prodE);

return 0;

} /*Fine di main()*/

I problemi sono 2:

a – il ciclo for non funziona, il programma esegue una sola volta le
istruzioni del while;
b – il programma restituisce tutti risultati uguali a 0.

Non usate istruzioni diverse dalle mie, tenete presente che sono al
capitolo 4 ed ho fatto solo quelle più semplici.
Grazie!!!
--
file:///media/Documenti/Documenti/Immagini/Icone%20e%20Simboli/sakurambo.bmp


Federico Tomasetig

unread,
Nov 3, 2009, 6:06:38 PM11/3/09
to
Nel tentativo di capire cosa non funzionasse ho tolto qualche commento
(che non influisce sul codice) e la parte

case '\n':
case '\t':
case ' ':

perche' sono anch'io alle prime armi e non sapevo che si potesse
"accorpare" diverse istruzioni "case" (comunque penso che si possano
aggiungere di nuovo). Me ne scuso.
Cosi', comunque, dovrebbe funzionare (almeno sul mio pc funziona):

#include <stdio.h>

float prodA = 0, prodB = 0, prodC = 0, prodD = 0, prodE = 0, totale;
int count, quantita, nr = 1;

main()


{
for(count = 1; count <= 7; count++)

{
printf("Settimana numero %d\n", count);
/* Aggiunto da me per debug :-) */
nr = 1; /* Occorre inizializzare il contatore ogni volta,
altrimenti il ciclo viene effettuato una volta sola */
while(nr <= 5)
{
printf("Iserire la quantit� venduta del prodotto %d: \t", nr);
scanf("%d", &quantita);
switch(nr)
{
/* i "case" dovrebbero essere senza apici, almeno con "gcc" cosi'
funziona (penso che cio' dipenda dal fatto che nr e' dichiarato come int) */
case 1:
prodA += quantita;
break;
case 2:
prodB += quantita;
break;
case 3:
prodC += quantita;
break;
case 4:
prodD += quantita;
break;
case 5:
prodE += quantita;
break;
}
nr++;
}
}
prodA *= 2.98;


prodB *= 4.50;
prodC *= 9.98;
prodD *= 4.49;
prodE *= 6.87;
totale = prodA + prodB + prodC + prodD + prodE;

printf("L'incasso totale della settimana e' stato di: %2f\n", totale);
printf("Cosi' suddiviso:\nprodottoA: %2f\nprodottoB: %2f\nprodottoC:
%2f\nprodottoE: %2f\n", prodA, prodB, prodC, prodD, prodE);
return 0;
}

Cordiali saluti,
Federico.

Sakurambo wrote:
> Ciao! Sono un �programmatore� alle prime armi, sto imparando il

> linguaggio C sul Deitel&Deitel e sono arrivato al capitolo 4. Mi trovo
> davanti ad un esercizio apparentemente semplice ma che non riesco a
> far funzionare a dovere. Ecco la traccia:
>
>
> Un'azienda di vendita per corrispondenza vende 5 prodotti differenti i
> cui prezzi al dettaglio sono i seguenti:
>

> 1 = � 2.29
> 2 = � 4.50
> 3 = � 9.98
> 4 = � 4.49
> 5 = � 6.87


>
> Scrivete un programma che legga una serie di coppie di numeri come
> segue:
>
> 1- numero prodotto;

> 2 � quantit� venduta in un giorno;
>
> Il vostro programma dovr� utilizzare una istruzione switc per aiutare

> a determinare il prezzo al dettaglio di ogni prodotto. Il programma

> dovr� calcolare e visualizzare il totale al dettaglio di tutti i

> prodotti venduti nell'ultima settimana.
>
>
> /*Esercizio che calcola il valore totale di 5 prodotti venduti in una
> settimana */
>
> #include <stdio.h>
>
> /*Dichiaro ed inizializzio le variabili*/
> float prodA = 0, prodB = 0, prodC = 0, prodD = 0, prodE = 0, totale;
> int count, quantita, nr = 1;
>
> int main()
> {
> for(count = 1; count <= 7; count ++) /*Qui ho cercato
> di far ciclare l'intero programma per sette volte, in modo da simulare
> i giorni della
> settimana. Senza risultato.*/
> {
> while(nr <= 5) /*Qui ho personalizzato il prog.:

> anzicch� far inserire all'utente il numero del prodotto, ho fatto i

> modo che fosse il programma a
> richiederlo. Questo funziona.*/
> {

> printf("Iserire la quantit� venduta del prodotto %d:
> \t",nr); /*Qui il programma richide la quantit� del

> prodotto specifico*/
> scanf("%d", &quantita); /*Assegno il valore
> ottenuto a "quantita"*/
>
> switch(nr) /*A seconda del valore di nr, assegno

> la quantit� al prodotto relativo*/
> {
> case '1': /*Se nr � uguale a 1*/
> prodA += quantita; /*Somma quantit� a prodA*/

> printf("L'incasso totale della settimana � stato di:
> %.2f\n", totale);
> printf("Cos� suddiviso:\nprodotto A:%.2f\nprodotto B:


> %.2f\nprodotto C:%.2f\nprodotto D:%.2f\nprodotto E:%.2f\n", prodA ,
> prodB , prodC , prodD , prodE);
>
> return 0;
>
> } /*Fine di main()*/
>
> I problemi sono 2:
>

> a � il ciclo for non funziona, il programma esegue una sola volta le
> istruzioni del while;
> b � il programma restituisce tutti risultati uguali a 0.


>
> Non usate istruzioni diverse dalle mie, tenete presente che sono al

> capitolo 4 ed ho fatto solo quelle pi� semplici.
> Grazie!!!

0 new messages