PDA

Visualizza la versione completa : [pascal] trovatemi l'errore


multififa
20-12-2004, 13:32
Perche quando mando in esecuzione questo programma la finestra si chiude subito. Dove ho sbagliato.
Il programma dovrebbe leggere da un file di testo (magazzino.txt) le informazioni scritte in questo modo
lava detersivo
8332 10,23 88
sapone liquido
2343 3,12 20
poi devo effetture la ricerca del codice e sottrarre dalla giacenza -1 e devoi sommare il prezzo alla variabile spesa

Program giacenza;
type
codprodotto=1..9999;
Prodotti =RECORD
prodotto:string[10];
codice:codprodotto;
prezzo:real;
Giacenza:integer;
END;

Var
prodotto:prodotti;
I:Integer;
txtmagazzino:text;
codice:codprodotto ;
trovato:boolean;
n:integer;
spesa:real;
Begin
Assign (txtmagazzino,'c:\magazzino.txt');
Reset (txtmagazzino);
I:=1;
while not eof(txtmagazzino) do
begin
readln(txtmagazzino, prodotto.prodotto, prodotto.codice, prodotto.prezzo, prodotto.giacenza);
I:=I+1;
end;
close(txtmagazzino);

N:=I;
writeln ('Inserisci il numero del prodotto acquistato?');
Readln (codice);
i:=1;
trovato:=FALSE;
While Not (trovato=false) and (i<=N) do
if codice=prodotto.codice then
begin
trovato:=true;
prodotto.giacenza:=prodotto.giacenza+1;
spesa:=spesa+ prodotto.prezzo;
if (codice<>prodotto.codice) then
i:=i+1;
end;
Writeln ('La spesa totale è di euro' ,spesa);
readln;
end.

multififa
20-12-2004, 20:00
:) :) :) :) :) :)

cso
20-12-2004, 20:58
metti il codice tra [*CODE] e [*/CODE] senza asterischi senò nessuno vuole leggere il codice.

Hai confuso un po' di cose...

Intanto dopo ASSIGN ci puoi mettere due cose:

Rewrite(file_di_tipo_testo); <==Crea il file, se esiste già lo sostituisce con uno vuoto ovviamente

Reset(file_di_tipo_testo); <==Resetta la posizione del "cursore" cioà punta sul primo char dalla prima stringa!

readln(txtmagazzino, prodotto.prodotto, prodotto.codice, prodotto.prezzo, prodotto.giacenza);

è sbagliato!

se vuoi prendere una riga intera dal file e metterlo in una stringa che puoi manipolare all'interno del programma devi scrivere:


TYPE generico = RECORD
appoggio : string[30];
END;
classe=ARRAY[1..N] OF GENERICO;
VAR conf : TEXT;
c : CLASSE;
...
ASSIGN(file_di_tipo_testo,'c:\nome_file.ext');
RESET (file_di_tipo_testo);
ReadLn(file_di_tipo_testo,c[1].appoggio);
CLOSE (file_di_tipo_testo);
...
{ora se vuoi manipolare la prima riga devi fare così}
stringa:=c[1].appoggio;
{ora che la prima riga è salvata in una stringa puoi fare quello che vuoi!!!}
....
{se vuoi rimettere la stringa modificata nella prima riga del file c:\nome_file.ext ==>}
WriteLn(file_di_tipo_testo,stringa);

Se vuoi te lo scrivo anche in arabo antico :nonlodire

Loading