Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Programma scontrino della spesa...Errore del compilatore!
Forum - Pascal - Programma scontrino della spesa...Errore del compilatore!

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
tantocibo (Normal User)
Newbie


Messaggi: 14
Iscritto: 05/04/2012

Segnala al moderatore
Postato alle 15:18
Domenica, 18/11/2012
Sto cercando di realizzare un programma la cui consegna è:

"Simuli uno scanner di codici a barre del supermercato; analizzati dei codici il programma
deve essere in grado di trovare i prodotti corrispondenti (da una lista di 15 prodotti
precedentemente inseriti) e emettere a schermo uno scontrino con nome dei prodotti, prezzo
corrispondente e totale della spesa".
Aldilà degli errori logici che posso aver fatto (vorrei individuarli da solo) sapreste correggere il programma in modo che il compilatore non segnali questo errore: "50 / 36 superm~1.pas
Fatal: Syntax error, ; expected but const char found"? Grazie :)

Codice sorgente - presumibilmente Delphi

  1. program supermercato;
  2. uses crt;
  3. const
  4.   p1=0.80;  // prezzo unitario di ciascun prodotto
  5.   p2=3.60;
  6.   p3=1.80;
  7.   p4=4.20;
  8.   p5=0.46;
  9.   p6=1.20;
  10.   p7=3.50;
  11.   p8=3.80;
  12.   p9=1.25;
  13.   p10=1.80;
  14.   p11=1.20;
  15.   p12=1.15;
  16.   p13=1.25;
  17.   p14=8.50;
  18.   p15=0.80;
  19. var
  20.   sprod:string[4];
  21.   nprod:array[1..4] of integer;
  22.   i,k,nprod2,m:integer;
  23.   scelta:char;
  24.   nprod3,qntprod:array[1..1000] of integer;
  25.   par,tot:real;
  26.  
  27. begin
  28.   textcolor(white);
  29.   repeat
  30.     begin
  31.       m:=m+1;
  32.       write('Inserisci codice prodotto: ');
  33.       readln(sprod);
  34.       clrscr;
  35.       write('Inserisci quantita'' prodotto inserito: ');
  36.       readln(qntprod[m]);
  37.       clrscr;
  38.       write('Inserire altri prodotti? S/N: ');
  39.       readln(scelta);
  40.       clrscr;
  41.       for i:=1 to 4 do        //trasforma la stringa del prodotto (es '0101')
  42.         begin                 //in vettore per distinguere le singole cifre binarie e trasformare
  43.           case sprod[i] of    //il numero prodotto in da binario a decimale (1-15)
  44.             '1': nprod[i]:=1;
  45.             '0': nprod[i]:=0;
  46.         end;
  47.       k:=4;
  48.       for i:=1 to 4 do
  49.         begin
  50.           nprod2:=nprod2+nprod[i]*2^k;
  51.           k:=k-1;
  52.         end;
  53.     nprod3[m]:=nprod2;
  54.     end;
  55.   until scelta='n' or scelta='N';
  56.   gotoxy(3,1);
  57.   write('Prodotto');
  58.   gotoxy(30,1);
  59.   write('Quantita''');
  60.   gotoxy(45,1);
  61.   write('Prezzo');
  62.   for i:=1 to m do
  63.     begin
  64.       case nprod3[i] of
  65.         1 : begin
  66.               par:=qntprod[i]*p1;
  67.               gotoxy(3,i+1);
  68.               write('Latte');
  69.               gotoxy(30,i+1);
  70.               write(qntprod[i]);
  71.               gotoxy(45,i+1);
  72.               write(par);
  73.             end;
  74.         2 : begin
  75.               par:=qntprod[i]*p2;
  76.               gotoxy(3,i+1);
  77.               write('Nutella');
  78.               gotoxy(30,i+1);
  79.               write(qntprod[i]);
  80.               gotoxy(45,i+1);
  81.               write(par);
  82.             end;
  83.         3 : begin
  84.               par:=qntprod[i]*p3;
  85.               gotoxy(3,i+1);
  86.               write('Gelato');
  87.               gotoxy(30,i+1);
  88.               write(qntprod[i]);
  89.               gotoxy(45,i+1);
  90.               write(par);
  91.             end;
  92.         4 : begin
  93.               par:=qntprod[i]*p4;
  94.               gotoxy(3,i+1);
  95.               write('Carne');
  96.               gotoxy(30,i+1);
  97.               write(qntprod[i]);
  98.               gotoxy(45,i+1);
  99.               write(par);
  100.             end;
  101.         5 : begin
  102.               par:=qntprod[i]*p5;
  103.               gotoxy(3,i+1);
  104.               write('Farina');
  105.               gotoxy(30,i+1);
  106.               write(qntprod[i]);
  107.               gotoxy(45,i+1);
  108.               write(par);
  109.             end;
  110.         6 : begin
  111.               par:=qntprod[i]*p6;
  112.               gotoxy(3,i+1);
  113.               write('Biscotti');
  114.               gotoxy(30,i+1);
  115.               write(qntprod[i]);
  116.               gotoxy(45,i+1);
  117.               write(par);
  118.             end;
  119.         7 : begin
  120.               par:=qntprod[i]*p7;
  121.               gotoxy(3,i+1);
  122.               write('Torta');
  123.               gotoxy(30,i+1);
  124.               write(qntprod[i]);
  125.               gotoxy(45,i+1);
  126.               write(par);
  127.             end;
  128.         8 : begin
  129.               par:=qntprod[i]*p8;
  130.               gotoxy(3,i+1);
  131.               write('Pane');
  132.               gotoxy(30,i+1);
  133.               write(qntprod[i]);
  134.               gotoxy(45,i+1);
  135.               write(par);
  136.             end;
  137.         9 : begin
  138.               par:=qntprod[i]*p9;
  139.               gotoxy(3,i+1);
  140.               write('Panna');
  141.               gotoxy(30,i+1);
  142.               write(qntprod[i]);
  143.               gotoxy(45,i+1);
  144.               write(par);
  145.             end;
  146.         10 : begin
  147.               par:=qntprod[i]*p10;
  148.               gotoxy(3,i+1);
  149.               write('Fragole');
  150.               gotoxy(30,i+1);
  151.               write(qntprod[i]);
  152.               gotoxy(45,i+1);
  153.               write(par);
  154.             end;
  155.         11 : begin
  156.               par:=qntprod[i]*p11;
  157.               gotoxy(3,i+1);
  158.               write('Pasta');
  159.               gotoxy(30,i+1);
  160.               write(qntprod[i]);
  161.               gotoxy(45,i+1);
  162.               write(par);
  163.             end;
  164.         12 : begin
  165.               par:=qntprod[i]*p12;
  166.               gotoxy(3,i+1);
  167.               write('Caramelle');
  168.               gotoxy(30,i+1);
  169.               write(qntprod[i]);
  170.               gotoxy(45,i+1);
  171.               write(par);
  172.             end;
  173.         13 : begin
  174.               par:=qntprod[i]*p13;
  175.               gotoxy(3,i+1);
  176.               write('Succo');
  177.               gotoxy(30,i+1);
  178.               write(qntprod[i]);
  179.               gotoxy(45,i+1);
  180.               write(par);
  181.             end;
  182.         14 : begin
  183.               par:=qntprod[i]*p14;
  184.               gotoxy(3,i+1);
  185.               write('Vino');
  186.               gotoxy(30,i+1);
  187.               write(qntprod[i]);
  188.               gotoxy(45,i+1);
  189.               write(par);
  190.             end;
  191.         15 : begin
  192.               par:=qntprod[i]*p15;
  193.               gotoxy(3,i+1);
  194.               write('The');
  195.               gotoxy(30,i+1);
  196.               write(qntprod[i]);
  197.               gotoxy(45,i+1);
  198.               write(par);
  199.             end;
  200.     tot:=tot+par;
  201.     end;
  202.   write('Totale spesa:  ',tot:10:2,' euro');
  203.   readkey;
  204. end.


PM Quote
Avatar
ale.gatti96 (Member)
Pro


Messaggi: 71
Iscritto: 29/11/2011

Segnala al moderatore
Postato alle 18:17
Domenica, 18/11/2012
Ciao, non conosco il pascal e non so aiutarti, però guardando velocemente il codice che hai caricato mi viene da farti una domanda: Perché non hai usato gli array per i prezzi e i nomi dei prodotti? Secondo me ti conviene utilizzarli, viene un codice più corto e sopratutto se devi modificare la lista dei prodotti perdi molto meno tempo.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:26
Domenica, 18/11/2012
Quale compilatore e versione usi ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:07
Domenica, 18/11/2012
Il compilatore ti segnala che non comprende il significato di un' operatore:
Alla riga
Codice sorgente - presumibilmente Plain Text

  1. nprod2:=nprod2+nprod[i]*2^k;

con ^ intendi l' elevamento a potenza.
Purtroppo, in Pascal, non esiste un' operatore o funzione pronta per tale uso, di conseguenza devi definirne tu una.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:10
Domenica, 18/11/2012
Infatti ... non ci avevo fatto subito caso ... devi usare

exp(ln(x)*y)

per elevare x ad y


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tantocibo (Normal User)
Newbie


Messaggi: 14
Iscritto: 05/04/2012

Segnala al moderatore
Postato alle 23:01
Domenica, 18/11/2012
ho provato il metodo di 'nessuno' (XD) con la funzione exp, ma ecco che il compilatore segnala un nuovo errore:

56 / 3 superm~1.pas
Fatal: Syntax error, ; expected but UNTIL found

Codice sorgente - presumibilmente Delphi

  1. program supermercato;
  2. uses crt;
  3. const
  4.   p1=0.80;  // prezzo unitario di ciascun prodotto
  5.   p2=3.60;
  6.   p3=1.80;
  7.   p4=4.20;
  8.   p5=0.46;
  9.   p6=1.20;
  10.   p7=3.50;
  11.   p8=3.80;
  12.   p9=1.25;
  13.   p10=1.80;
  14.   p11=1.20;
  15.   p12=1.15;
  16.   p13=1.25;
  17.   p14=8.50;
  18.   p15=0.80;
  19. var
  20.   sprod:string[4];
  21.   nprod:array[1..4] of integer;
  22.   i,k,nprod2,m,temp:integer;
  23.   scelta:char;
  24.   nprod3,qntprod:array[1..1000] of integer;
  25.   par,tot:real;
  26.  
  27. begin
  28.   textcolor(white);
  29.   repeat
  30.     begin
  31.       m:=m+1;
  32.       write('Inserisci codice prodotto: ');
  33.       readln(sprod);
  34.       clrscr;
  35.       write('Inserisci quantita'' prodotto inserito: ');
  36.       readln(qntprod[m]);
  37.       clrscr;
  38.       write('Inserire altri prodotti? S/N: ');
  39.       readln(scelta);
  40.       clrscr;
  41.       for i:=1 to 4 do        //trasforma la stringa del prodotto (es '0101')
  42.         begin                 //in vettore per distinguere le singole cifre binarie e trasformare
  43.           case sprod[i] of    //il numero prodotto in da binario a decimale (1-15)
  44.             '1': nprod[i]:=1;
  45.             '0': nprod[i]:=0;
  46.         end;
  47.       k:=4;
  48.       for i:=1 to 4 do
  49.         begin
  50.           temp:=exp(ln(2)*k)*nprod[i];
  51.           nprod2:=nprod2+temp;
  52.           k:=k-1;
  53.         end;
  54.     nprod3[m]:=nprod2;
  55.     end;
  56.   until (scelta='n') or (scelta='N');
  57.   gotoxy(3,1);
  58.   write('Prodotto');
  59.   gotoxy(30,1);
  60.   write('Quantita''');
  61.   gotoxy(45,1);
  62.   write('Prezzo');
  63.   for i:=1 to m do
  64.     begin
  65.       case nprod3[i] of
  66.         1 : begin
  67.               par:=qntprod[i]*p1;
  68.               gotoxy(3,i+1);
  69.               write('Latte');
  70.               gotoxy(30,i+1);
  71.               write(qntprod[i]);
  72.               gotoxy(45,i+1);
  73.               write(par);
  74.             end;
  75.         2 : begin
  76.               par:=qntprod[i]*p2;
  77.               gotoxy(3,i+1);
  78.               write('Nutella');
  79.               gotoxy(30,i+1);
  80.               write(qntprod[i]);
  81.               gotoxy(45,i+1);
  82.               write(par);
  83.             end;
  84.         3 : begin
  85.               par:=qntprod[i]*p3;
  86.               gotoxy(3,i+1);
  87.               write('Gelato');
  88.               gotoxy(30,i+1);
  89.               write(qntprod[i]);
  90.               gotoxy(45,i+1);
  91.               write(par);
  92.             end;
  93.         4 : begin
  94.               par:=qntprod[i]*p4;
  95.               gotoxy(3,i+1);
  96.               write('Carne');
  97.               gotoxy(30,i+1);
  98.               write(qntprod[i]);
  99.               gotoxy(45,i+1);
  100.               write(par);
  101.             end;
  102.         5 : begin
  103.               par:=qntprod[i]*p5;
  104.               gotoxy(3,i+1);
  105.               write('Farina');
  106.               gotoxy(30,i+1);
  107.               write(qntprod[i]);
  108.               gotoxy(45,i+1);
  109.               write(par);
  110.             end;
  111.         6 : begin
  112.               par:=qntprod[i]*p6;
  113.               gotoxy(3,i+1);
  114.               write('Biscotti');
  115.               gotoxy(30,i+1);
  116.               write(qntprod[i]);
  117.               gotoxy(45,i+1);
  118.               write(par);
  119.             end;
  120.         7 : begin
  121.               par:=qntprod[i]*p7;
  122.               gotoxy(3,i+1);
  123.               write('Torta');
  124.               gotoxy(30,i+1);
  125.               write(qntprod[i]);
  126.               gotoxy(45,i+1);
  127.               write(par);
  128.             end;
  129.         8 : begin
  130.               par:=qntprod[i]*p8;
  131.               gotoxy(3,i+1);
  132.               write('Pane');
  133.               gotoxy(30,i+1);
  134.               write(qntprod[i]);
  135.               gotoxy(45,i+1);
  136.               write(par);
  137.             end;
  138.         9 : begin
  139.               par:=qntprod[i]*p9;
  140.               gotoxy(3,i+1);
  141.               write('Panna');
  142.               gotoxy(30,i+1);
  143.               write(qntprod[i]);
  144.               gotoxy(45,i+1);
  145.               write(par);
  146.             end;
  147.         10 : begin
  148.               par:=qntprod[i]*p10;
  149.               gotoxy(3,i+1);
  150.               write('Fragole');
  151.               gotoxy(30,i+1);
  152.               write(qntprod[i]);
  153.               gotoxy(45,i+1);
  154.               write(par);
  155.             end;
  156.         11 : begin
  157.               par:=qntprod[i]*p11;
  158.               gotoxy(3,i+1);
  159.               write('Pasta');
  160.               gotoxy(30,i+1);
  161.               write(qntprod[i]);
  162.               gotoxy(45,i+1);
  163.               write(par);
  164.             end;
  165.         12 : begin
  166.               par:=qntprod[i]*p12;
  167.               gotoxy(3,i+1);
  168.               write('Caramelle');
  169.               gotoxy(30,i+1);
  170.               write(qntprod[i]);
  171.               gotoxy(45,i+1);
  172.               write(par);
  173.             end;
  174.         13 : begin
  175.               par:=qntprod[i]*p13;
  176.               gotoxy(3,i+1);
  177.               write('Succo');
  178.               gotoxy(30,i+1);
  179.               write(qntprod[i]);
  180.               gotoxy(45,i+1);
  181.               write(par);
  182.             end;
  183.         14 : begin
  184.               par:=qntprod[i]*p14;
  185.               gotoxy(3,i+1);
  186.               write('Vino');
  187.               gotoxy(30,i+1);
  188.               write(qntprod[i]);
  189.               gotoxy(45,i+1);
  190.               write(par);
  191.             end;
  192.         15 : begin
  193.               par:=qntprod[i]*p15;
  194.               gotoxy(3,i+1);
  195.               write('The');
  196.               gotoxy(30,i+1);
  197.               write(qntprod[i]);
  198.               gotoxy(45,i+1);
  199.               write(par);
  200.             end;
  201.     tot:=tot+par;
  202.     end;
  203.   write('Totale spesa:  ',tot:10:2,' euro');
  204.   readkey;
  205. end.


Ultima modifica effettuata da tantocibo il 18/11/2012 alle 23:03
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 0:47
Lunedì, 19/11/2012
La formula va adattata, perché le finzioni ln( ) e exp( ) restituiscono valori reali.
Dovrai inserire:
Codice sorgente - presumibilmente Plain Text

  1. temp:=trunc(exp(ln(2)*k))*nprod[j];


Inoltre, per avere risultati attendibili, devi azzerare le variabili m ed nprod2.

Il compilatore non riesce a capire il codice, perché non hai messo gli end alla fine dei due case.

PM Quote
Avatar
tantocibo (Normal User)
Newbie


Messaggi: 14
Iscritto: 05/04/2012

Segnala al moderatore
Postato alle 21:20
Martedì, 20/11/2012
Perdona l'ignoranza, non ho ben capito come potrei formalizzare la tua soluzione, se puoi mi correggeresti il programma secondo il tuo suggerimento? Scusa :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:29
Martedì, 20/11/2012
Mi sembra che ti abbia scritto la linea che devi correggere (anche se ha messo j al posto di i) ...

Cosa ti deve dire di più ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo