PDA

Visualizza la versione completa : [pascal] aiuto alla risoluzione di un problema


multififa
21-12-2004, 20:57
Ho suddiviso il programma in procedure ma al momento di leggerle mi da l seguente errore 'too few arguments to function 'leggidati' e 'aggiorna'. come mai.


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

Var
prodotto:prodotti;
I:Integer; (*contatore*)

PROCEDURE leggidati (var prodotto:prodotti; i:integer); (*procedura per leggere i dati*)
VAR
txtmagazzino:text;
BEGIN
Assign (txtmagazzino,'c:\magazzino.txt'); (*file di testo da cui legge i dati*)
Reset (txtmagazzino); (*posizionamento al prima riga*)
I:=1;
while not eof(txtmagazzino) do (*lettura dei dati e posizionamento nel record*)
begin
readln(txtmagazzino, prodotto.prodotto, prodotto.codice, prodotto.prezzo, prodotto.giacenza);
I:=I+1;
end;
close(txtmagazzino); (*chiusura del file di testo*)
end; (*fine procedure leggi*)

PROCEDURE aggiorna (var i:integer; prodotto:prodotti);
VAR
trovato:boolean;
n:integer;
spesa:real;
codice:codprodotto;
Begin
N:=I; (*poniamo n uguale a i*)
writeln ('Inserisci il numero del prodotto acquistato?o digita 0 per uscire');
Readln (codice);
repeat
If Not(codice=0) then begin (*se il codice=0 allora esce dal programma*)
i:=1; (*assegnamo i=1 e trovato =false*)
trovato:=FALSE;
(*se troviamo il codice allora sottraiamo -1 alla giacenza e sommiamo il prezzo alla spesa*)
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;
end
else begin
i:=i+1;
end;
(*se il codice non è esatto visualizziamo sullo schermo un messaggio d'errore*)
if trovato=false then writeln
('Codice non trovato');
writeln;
end
else until codice=0;
end; (*procedure*)
BEGIN
leggidati;
aggiorna;
end.

[/COdE]

Esos
22-12-2004, 08:51
Ecco trovato l'errore...

Quando hai cretato le procedure, gli hai inserito, vado a spiegarmi meglio:
PROCEDURE leggidati (var prodotto:prodotti; i:integer) <---
PROCEDURE aggiorna (var i:integer; prodotto:prodotti) <---

quelli in rosso.
Quando hai fatto la chiamata nel main di queste due procedure, tu non gli hai inserito nessun argomento:
leggidati;
aggiorna;
e qui ti da l'errore, perchè praticamente ti dice che sulle procedure hai passato degli argomenti, e mentre sul main non gli passi nessun argomento e quindi ti dice che ci sono troppi argomenti per queste due procedure... non so se mi hai capito....

Cmq un altro consigli che ti darei è quello di fare un controllo se il file del testo sia pieno o no se al limite devi inserire dei nuovi nuovi record.

Se hai problemi contattami pure, ti saprò dare aiuti quando ho tempo libero e spero al più presto

gokan
22-12-2004, 09:20
usate stò benedetto
quando postate il codice :rollo:

multififa
22-12-2004, 11:58
Scusami ma non ho capito potresti farmi un esempio pratico

multififa
22-12-2004, 12:02
Dovrei scrivere in questo modo



leggidati(var prodotto:prodotti; i:integer);

Loading