PDA

Visualizza la versione completa : [pascal]PROCEDURE


multififa
22-12-2004, 20:45
Non so come devo scrivere le procedure nel corpo del programma
mi potete aiutare. Risolvetemi questo programma


Program risuelettorali;
Type
tabella= ARRAY [1..80, 1..90] OF integer;
Var
sezione:tabella;
i:integer;
y:integer;
totale1:integer;
n:integer;
m:integer;

PROCEDURE inizia (m:integer; n:integer; sezione:tabella; y:integer; i:integer);
BEGIN
Writeln ('Inserisci il numero delle candidati');
Readln (n);
Writeln ('Inserisci il numero dei sezioni');
Readln (m);
For Y:=1 to n do
begin
for i:=1 to m do
begin
sezione[i,y]:=0;
end;
end;
END;

PROCEDURE Leggi (y:integer; i:integer; n:integer; m:integer; sezione:tabella; totale1:integer);
BEGIN
For Y:=1 to n do
Begin
for i:=1 to m do
begin
Writeln ('Inserisci i voti della sezione n. ', i, 'del candidato n. ', y);
readln (sezione[i,y]);
totale1:=(totale1+sezione[i,y]);
end;
end;
END;

PROCEDURE Scrivi (y:integer; i:integer; n:integer; m:integer; sezione:tabella);
BEGIN
write ('Sez');
for Y:=1 to n do
begin
write (' Cand':7, y);
end;
writeln;
For i:=1 to m do
begin
write (i);
for y:=1 to n do
begin
Write (sezione [i,y]:8);
end;
writeln;
end;
END;

PROCEDURE tot (y:integer;I:integer; m:integer; n:integer; totale1:integer; sezione:tabella);
Var
percentuale:real;
totale:integer;
BEGIN
For Y:=1 to n do
begin
totale:=0;
for i:=1 to m do
begin
totale:=totale+sezione[i,y];
end;
percentuale:= ((totale*100)/totale1);
writeln;
writeln ('Il totale del candidato n.',y,' e di ',totale, ' percentale ', percentuale:2:2);
end;
END;
Begin
Nel corpo del programma come posso richiamare le procedure

end.

cso
22-12-2004, 20:55
Scusa, ma, prima non mettevi i tag CODE e quindi quello che indentavi veniva riallineato adesso che li usi scrivi tutto nella stessa colonna :cry: :cry: :cry: ...

Sorvolando questo...

Da che mondo è mondo una procedura NON legge e NON scrive...
se lo fai non ti da errore ma è una regola non scritta che rispettano tutti i programmatori (come usare I e J per i cicli...)

Le uniche eccezioni in cui puoi fare una procedura per scrivere è un menù ma in questo caso scrive e basta...la stessa cosa si potrebbe dire per la lettura...ma non un misto...

Non potresti scrivere cosa richiede l'esercizio perchè può anche darsi che il tuo algoritmo non c'entri con la risoluzione del problema e quindi potrei rischiare di darti un consiglio sbagliato :madai!?:

oddio, l'ho stracciata un po' ma meglio non correre rischi anche perchè sei autodidatta e se impari qualcosa di sbagliato te lo porti dietro per l'eternità :(

cmq per richiamare le procedure si scrive il nome e si passano le variabili.

In questo caso se vuoi richiamare la procedura inizia gli devi passare 2 interi, un array e altri due interi proprio nell'ordine in cui gli hai dichiarati all'interno della procedura.

anx721
23-12-2004, 00:02
Originariamente inviato da cso
Da che mondo è mondo una procedura NON legge e NON scrive...
se lo fai non ti da errore ma è una regola non scritta che rispettano tutti i programmatori

E da quand'è che vale sta regola? :dottò:

per invocare una procedura devi scriverne il nome, seguito dalla lista dei paramentri attuali racchiusi tra parentesi tonde; comqunue mi pare che nelle tue procedure hai messo dei parametri inutili, come le variabili y ed i di Leggi, che potevano essere dichiarate semplicemente come variabili locali alla procedura: gli argomenti della procedura devono essere quelli che effetivamente servono per trasferire informazioni dal corpo del programma alla procedura stessa.

multififa
23-12-2004, 14:20
Si. ma il compilatore mi da degli errori. Se nel corpo del programma gli metto il nome delle procedure + i parametri attuali e faccio lo stsso per gli altri mi da errore per questo ho chiesto di risolverlo perche voglio capire come funzionano queste cavole di procedure

multififa
23-12-2004, 14:35
In questo modo non mi da nessun errore ma quando mando in esecuzione il programmala finestra si chiude subito. Voglio sapre dove ho sbagliato



Program risuelettorali;
Type
tabella= ARRAY [1..80, 1..90] OF integer;
Var
sezione:tabella;
totale:integer;
totale1:integer;
percentuale:real;
n:integer;
m:integer;

PROCEDURE inizia (m:integer; n:integer; sezione:tabella);
Var
y:integer;
i:integer;
BEGIN
Writeln ('Inserisci il numero delle candidati');
Readln (n);
Writeln ('Inserisci il numero dei sezioni');
Readln (m);
For Y:=1 to n do
begin
for i:=1 to m do
begin
sezione[i,y]:=0;
end;
end;
END;

PROCEDURE Leggi (n:integer; m:integer; sezione:tabella; totale1:integer);
Var
y:integer;
i:integer;
BEGIN
For Y:=1 to n do
Begin
for i:=1 to m do
begin
Writeln ('Inserisci i voti sezione n.',i,'candidato n. ', y);
readln (sezione[i,y]);
totale1:=(totale1+sezione[i,y]);
end;
end;
END;

PROCEDURE Scrivi (n:integer; m:integer; sezione:tabella);
Var
y:integer;
i:integer;
BEGIN
write ('Sez');
for Y:=1 to n do
begin
write (' Cand':7, y);
end;
writeln;
For i:=1 to m do
begin
write (i);
for y:=1 to n do
begin
Write (sezione [i,y]:8);
end;
writeln;
end;
END;

PROCEDURE tot (m:integer; n:integer; totale1:integer; sezione:tabella);
Var
percentuale:real;
totale:integer;
y:integer;
i:integer;
BEGIN
For Y:=1 to n do
begin
totale:=0;
for i:=1 to m do
begin
totale:=totale+sezione[i,y];
end;
percentuale:= ((totale*100)/totale1);
writeln;
writeln ('Il totale del candidato n.',y,' e di ',totale, ' percentale ', percentuale:2:2);
end;
END;
Begin
inizia (m,n,sezione);
Leggi (n,m,sezione,totale1);
Scrivi (n,m,sezione);
tot (m,n,totale1,sezione);

readln;

end.

anx721
23-12-2004, 14:39
Io sono anni che non programmo in pascal...quindi non poso dirti molto...Ma non ce l'hai un manuale sul pascal? Non puoi imparare queste cose chiedendo sul forum...anche perke avuta una risposta te ne servirebero altre 100 su altre cose..quindi ticonsiglio di procurarti una guida e di imparare lì la sintassi e cheidere sul forum solo cio che non capisci.

multififa
23-12-2004, 14:49
si. ma dal libro ci sono troppi formalismi.

Loading