Oppure

Loading
18/11/12 14:18
tantocibo
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 :)

program supermercato;
uses crt;
const
  p1=0.80;  // prezzo unitario di ciascun prodotto
  p2=3.60;
  p3=1.80;
  p4=4.20;
  p5=0.46;
  p6=1.20;
  p7=3.50;
  p8=3.80;
  p9=1.25;
  p10=1.80;
  p11=1.20;
  p12=1.15;
  p13=1.25;
  p14=8.50;
  p15=0.80;
var
  sprod:string[4];
  nprod:array[1..4] of integer;
  i,k,nprod2,m:integer;
  scelta:char;
  nprod3,qntprod:array[1..1000] of integer;
  par,tot:real;

begin
  textcolor(white);
  repeat
    begin
      m:=m+1;
      write('Inserisci codice prodotto: ');
      readln(sprod);
      clrscr;
      write('Inserisci quantita'' prodotto inserito: ');
      readln(qntprod[m]);
      clrscr;
      write('Inserire altri prodotti? S/N: ');
      readln(scelta);
      clrscr;
      for i:=1 to 4 do        //trasforma la stringa del prodotto (es '0101')
        begin                 //in vettore per distinguere le singole cifre binarie e trasformare
          case sprod[i] of    //il numero prodotto in da binario a decimale (1-15)
            '1': nprod[i]:=1;
            '0': nprod[i]:=0;
        end;
      k:=4;
      for i:=1 to 4 do
        begin
          nprod2:=nprod2+nprod[i]*2^k;
          k:=k-1;
        end;
    nprod3[m]:=nprod2;
    end;
  until scelta='n' or scelta='N';
  gotoxy(3,1);
  write('Prodotto');
  gotoxy(30,1);
  write('Quantita''');
  gotoxy(45,1);
  write('Prezzo');
  for i:=1 to m do
    begin
      case nprod3[i] of
        1 : begin
              par:=qntprod[i]*p1;
              gotoxy(3,i+1);
              write('Latte');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        2 : begin
              par:=qntprod[i]*p2;
              gotoxy(3,i+1);
              write('Nutella');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        3 : begin
              par:=qntprod[i]*p3;
              gotoxy(3,i+1);
              write('Gelato');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        4 : begin
              par:=qntprod[i]*p4;
              gotoxy(3,i+1);
              write('Carne');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        5 : begin
              par:=qntprod[i]*p5;
              gotoxy(3,i+1);
              write('Farina');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        6 : begin
              par:=qntprod[i]*p6;
              gotoxy(3,i+1);
              write('Biscotti');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        7 : begin
              par:=qntprod[i]*p7;
              gotoxy(3,i+1);
              write('Torta');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        8 : begin
              par:=qntprod[i]*p8;
              gotoxy(3,i+1);
              write('Pane');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        9 : begin
              par:=qntprod[i]*p9;
              gotoxy(3,i+1);
              write('Panna');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        10 : begin
              par:=qntprod[i]*p10;
              gotoxy(3,i+1);
              write('Fragole');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        11 : begin
              par:=qntprod[i]*p11;
              gotoxy(3,i+1);
              write('Pasta');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        12 : begin
              par:=qntprod[i]*p12;
              gotoxy(3,i+1);
              write('Caramelle');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        13 : begin
              par:=qntprod[i]*p13;
              gotoxy(3,i+1);
              write('Succo');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        14 : begin
              par:=qntprod[i]*p14;
              gotoxy(3,i+1);
              write('Vino');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        15 : begin
              par:=qntprod[i]*p15;
              gotoxy(3,i+1);
              write('The');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
    tot:=tot+par;
    end;
  write('Totale spesa:  ',tot:10:2,' euro');
  readkey;
end.
aaa
18/11/12 17:17
ale.gatti96
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.
aaa
18/11/12 19:26
Quale compilatore e versione usi ?
18/11/12 21:07
Poggi Marco
Il compilatore ti segnala che non comprende il significato di un' operatore:
Alla riga
 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.
aaa
18/11/12 21:10
Infatti ... non ci avevo fatto subito caso ... devi usare

exp(ln(x)*y)

per elevare x ad y
18/11/12 22:01
tantocibo
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

program supermercato;
uses crt;
const
  p1=0.80;  // prezzo unitario di ciascun prodotto
  p2=3.60;
  p3=1.80;
  p4=4.20;
  p5=0.46;
  p6=1.20;
  p7=3.50;
  p8=3.80;
  p9=1.25;
  p10=1.80;
  p11=1.20;
  p12=1.15;
  p13=1.25;
  p14=8.50;
  p15=0.80;
var
  sprod:string[4];
  nprod:array[1..4] of integer;
  i,k,nprod2,m,temp:integer;
  scelta:char;
  nprod3,qntprod:array[1..1000] of integer;
  par,tot:real;

begin
  textcolor(white);
  repeat
    begin
      m:=m+1;
      write('Inserisci codice prodotto: ');
      readln(sprod);
      clrscr;
      write('Inserisci quantita'' prodotto inserito: ');
      readln(qntprod[m]);
      clrscr;
      write('Inserire altri prodotti? S/N: ');
      readln(scelta);
      clrscr;
      for i:=1 to 4 do        //trasforma la stringa del prodotto (es '0101')
        begin                 //in vettore per distinguere le singole cifre binarie e trasformare
          case sprod[i] of    //il numero prodotto in da binario a decimale (1-15)
            '1': nprod[i]:=1;
            '0': nprod[i]:=0;
        end;
      k:=4;
      for i:=1 to 4 do
        begin
          temp:=exp(ln(2)*k)*nprod[i];
          nprod2:=nprod2+temp;
          k:=k-1;
        end;
    nprod3[m]:=nprod2;
    end;
  until (scelta='n') or (scelta='N');
  gotoxy(3,1);
  write('Prodotto');
  gotoxy(30,1);
  write('Quantita''');
  gotoxy(45,1);
  write('Prezzo');
  for i:=1 to m do
    begin
      case nprod3[i] of
        1 : begin
              par:=qntprod[i]*p1;
              gotoxy(3,i+1);
              write('Latte');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        2 : begin
              par:=qntprod[i]*p2;
              gotoxy(3,i+1);
              write('Nutella');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        3 : begin
              par:=qntprod[i]*p3;
              gotoxy(3,i+1);
              write('Gelato');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        4 : begin
              par:=qntprod[i]*p4;
              gotoxy(3,i+1);
              write('Carne');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        5 : begin
              par:=qntprod[i]*p5;
              gotoxy(3,i+1);
              write('Farina');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        6 : begin
              par:=qntprod[i]*p6;
              gotoxy(3,i+1);
              write('Biscotti');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        7 : begin
              par:=qntprod[i]*p7;
              gotoxy(3,i+1);
              write('Torta');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        8 : begin
              par:=qntprod[i]*p8;
              gotoxy(3,i+1);
              write('Pane');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        9 : begin
              par:=qntprod[i]*p9;
              gotoxy(3,i+1);
              write('Panna');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        10 : begin
              par:=qntprod[i]*p10;
              gotoxy(3,i+1);
              write('Fragole');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        11 : begin
              par:=qntprod[i]*p11;
              gotoxy(3,i+1);
              write('Pasta');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        12 : begin
              par:=qntprod[i]*p12;
              gotoxy(3,i+1);
              write('Caramelle');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        13 : begin
              par:=qntprod[i]*p13;
              gotoxy(3,i+1);
              write('Succo');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        14 : begin
              par:=qntprod[i]*p14;
              gotoxy(3,i+1);
              write('Vino');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
        15 : begin
              par:=qntprod[i]*p15;
              gotoxy(3,i+1);
              write('The');
              gotoxy(30,i+1);
              write(qntprod[i]);
              gotoxy(45,i+1);
              write(par);
            end;
    tot:=tot+par;
    end;
  write('Totale spesa:  ',tot:10:2,' euro');
  readkey;
end.
Ultima modifica effettuata da tantocibo 18/11/12 22:03
aaa
18/11/12 23:47
Poggi Marco
La formula va adattata, perché le finzioni ln( ) e exp( ) restituiscono valori reali.
Dovrai inserire:
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.
aaa
20/11/12 20:20
tantocibo
Perdona l'ignoranza, non ho ben capito come potrei formalizzare la tua soluzione, se puoi mi correggeresti il programma secondo il tuo suggerimento? Scusa :)
aaa