PDA

Visualizza la versione completa : [PASCAL] Problem


DragoNascente
09-02-2005, 17:03
Ciao.. chi mi può aiutare col problema sotto??
il problema credo di averlo risolto tuttavia non so come collegare tra loro le procedure nel modo corretto nel MAIN e dunque chiedo un aiuto dimostrativo e se possibile anche una spegazione illuminante.. grazie anticipatamente

Non riesco a far funzionare la funzione MEAN e dunque il prog non funziona come dovrebbe, c'è sicuramente un problema per quanto riguarda il passaggio dei parametri..

(************************************************* *******************
ESAME 3:
Hai in input un file di testo che contiene un elenco di voti.
Ogni linea del file di testo contiene un solo voto. Devi calcolare la media di questi voti e assegnare un grado a ciascun studente (se il voto e' inferiore di dieci punti alla media allora il grado e' insoddisfacente, altrimenti il grado e' soddisfacente) L'output deve essere mostrato sul monitor e deve essere organizzato su due colonne contenenti rispettivamente il voto e il grado.
************************************************** ******************)
program Esame3(input,output);
uses crt;
Const
MaxNumStudenti=20;
type
vettore=array[1..MaxNumStudenti]of integer;
VAR
voti:vettore;
cont:integer;
rigavoti:text;
media:real;
troppi:boolean;

(*legge i voti dal file di testo RigaVoti nel vettore Voti. Cont indica il numero
degli studenti letti e quindi indica la dimensione reale del vettore. Troppi è
vero se RigaVoti contiene più voti della dimensione massima del vettore Voti*)
PROCEDURE LeggiStud(VAR RigaVoti:text;
VAR Voti:vettore;
VAR Cont:integer;
VAR troppi:boolean);
begin
while ((not(eof(rigavoti))) and (not(Troppi))) do
begin
readln(rigavoti,voti[Cont]);
Cont:=Cont+1;
if (Cont > MaxNumStudenti) then
Troppi:=True;
end;
end(*procedura LeggiStud*);

(*Mostra il grado dopo aver confontato Unvoto con Media*)
PROCEDURE ScriviGrado(unvoto:integer; media:real);
begin
if ((unvoto - media)<9) and ((unvoto - media)>-9) then
writeln('SODDISFACENTE')
else
if (unvoto - media)>10 then
writeln('NOTEVOLE')
else
if (unvoto - media)<-10 then
writeln('INSODDISFACENTE');
end(*procedura ScriviGrado*);

(*Calcola la media del vettore Voti di Cont studenti*)
FUNCTION Mean(Voti:Vettore; cont:integer):real;
begin
media:=voti[cont];
for cont:=2 to MaxNumStudenti do
media:=media+voti[cont];
media:=media/MaxNumStudenti;
end(*function Mean*);

(*Scrive la tabella di output. La procedura ScriviTabella chiama la procedura
ScriviGrado*)
PROCEDURE ScriviTabella(voti:vettore; cont:integer);
var
voto:integer;
begin
writeln('VOTO GRADO');
writeln;
for cont:=1 to MaxNumStudenti do
begin
write(voti[cont],' ');
voto:=voti[cont];
scrivigrado(voto, media);
end(*for*);
end(*procedura ScriviTabella*);


(*--programma principale--*)
BEGIN
assign(rigavoti,'C:\dev-pas\prog\Ex\3\voti.txt');
reset(rigavoti);
cont:=1;
troppi:=false;
leggistud (rigavoti, voti, cont, troppi);
close(rigavoti);

media:=mean(voti, cont);

scrivitabella(voti, cont);
readln;
END.
(******************************END**************** ******************)

AlbertoPicca
09-02-2005, 21:45
Hai passato il vettore "voti" come parametro variabile alle procedure che effettuano la lettura dei dati? :ciauz:

DragoNascente
10-02-2005, 12:29
ma nessuno può aiutarmi??

SiNaPsE
10-02-2005, 19:09
Quando scrivi utilizza il code prima cosa se no esco pazzo poi sicuramente potrò aiutarti...

DragoNascente
11-02-2005, 11:36
ma così non è interpretabile?? come faccio a scrivere in code??
non capisco perchè nessuno riesci a darmi una mano eppure il problema dovrebbe essere semplice.. tra qualche giorno non avrò più tempo e sarò constretto a consegnarlo così.. ringrazio tutti ugualmente..

DragoNascente
11-02-2005, 14:11
aiuto???

Loading