Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - programma pascal non funzionante
Forum - Pascal - programma pascal non funzionante

Avatar
babacaio (Normal User)
Newbie


Messaggi: 1
Iscritto: 29/03/2014

Segnala al moderatore
Postato alle 15:22
Sabato, 29/03/2014
i:d n pratica mi è stato assegnato un esercizio dove ci devono essere due RECORD di array, uno dove inserisco in input con codice, descrizione, scorta minima, rimanenze, totale entrate e totale uscite. Con queste poi devo creare un altro record dove c è il codice, la descrizione e la giacenza attuale (che la traccia mi dice che si calcola sommando le rimanenze iniziali e le entrate totali e sottraendo le uscite totali); le giacenze attuali vanno stampate a video solo se sono minori della scorta minima. Il problema parte e "funziona" ma la PROCEDURE CONTROLLO non funziona come dovrebbe...sapete dirmi l errore?

Program giacenze_e_scorte;


USES crt;
const
max=1500;
type
rec1=record
codice:string[30];
descrizione:string[100];
scortaminima:real;
rimanenzeiniziali:real;
totaleentrate:real;
totaleuscite:real;
end;
rec2=record
codice1:string[30];
descrizione1:string[100];
giacenzaattuale:real;
end;

vet1=array[1..max]of rec1;
vet2=array[1..max]of rec2;

var
tabella1:vet1;
tabella2:vet2;
I,N,I1,scelta,J:integer;


PROCEDURE CARICA;
var
tmptabella1:rec1;
begin
textcolor(black);
clrscr;
writeln('*** Dimensionamento e caricamento dati ***');
writeln;
write('Inserisci il numero totale di prodotti ---> ');
readln(N);
writeln;
while (N<1) or (N>max) do
begin
writeln;
writeln('Valore non valido, inserisci nuovo valore');
readln(N);
end;
begin
For I:=1 to N do
begin
writeln;
writeln;
writeln('Inserisci il codice del ',I,'^ prodotto');
readln(tabella1.codice);
writeln('Inserisci il nome del ',I,'^ prodotto');
readln(tabella1.descrizione);
writeln('Inserisci la scorta minima del ',I,'^ prodotto');
readln(tabella1.scortaminima);
writeln('Inserisci le rimanenze iniziali del ',I,'^ prodotto');
readln(tabella1.rimanenzeiniziali);
writeln('Inserisci le entrate totali del ',I,'^ prodotto');
readln(tabella1.totaleentrate);
writeln('Inserisci le uscite totali del ',I,'^ prodotto');
readln(tabella1.totaleuscite);
end;
end;
begin
//ordinamento per codice
For I:=1 to N-1 do
For J:=I+1 to N do
begin
If (tabella1.codice>tabella1[j].codice) then
begin
tmptabella1:=tabella1;
tabella1:=tabella1[j];
tabella1[j]:=tmptabella1;
end;
end;
end;
end;

Procedure visualizza1;
begin
textcolor(black);
clrscr;
writeln(' *** Visualizzazione dei dati ***');
writeln;
writeln;
writeln('Codice Descrizione S. Minima R.Iniziali Tot.Entrate Tot.Uscite');
For I:=1 to N do
begin
gotoxy(1, I+5);
write(tabella1.codice);
gotoxy(10, I+5);
write(tabella1.descrizione);
gotoxy(24, I+5);
write(tabella1.scortaminima:0:2);
gotoxy(36, I+5);
write(tabella1.rimanenzeiniziali:0:2);
gotoxy(49, I+5);
write(tabella1.totaleentrate:0:2);
gotoxy(62, I+5);
write(tabella1.totaleuscite:0:2);
writeln;
end;
writeln;
writeln;
writeln;
writeln('Premi invio per continuare');
writeln;
readln;
end;

Procedure controllo;
begin
clrscr;
For I:=1 to N do
tabella2.giacenzaattuale:=tabella1.rimanenzeiniziali+tabella1.totaleentrate-tabella1.totaleuscite;
if (tabella2.giacenzaattuale<tabella1.scortaminima) then
begin
tabella2.codice1:=tabella1.codice;
tabella2.descrizione1:=tabella1.descrizione;
tabella2.giacenzaattuale:=tabella2.giacenzaattuale;
end;
end;

Procedure visualizza2;
begin
textcolor(black);
clrscr;
writeln(' *** Visualizzazione delle giacenze attuali ***');
writeln;
writeln;
writeln('Codice Descrizione Giacenza Attuale');
For I:=1 to N do
begin
gotoxy(1, I+5);
write(tabella2.codice1);
gotoxy(13, I+5);
write(tabella2.descrizione1);
gotoxy(30, I+5);
write(tabella2.giacenzaattuale:0:2);
end;
writeln;
writeln;
readln;
end;




BEGIN //PROGRAMMA PRINCIPALE
begin
textbackground(11);
clrscr;
repeat;
TextColor(Red);
writeln;
writeln;
writeln('***** BENVENUTI *****');
writeln;
writeln;
writeln;
writeln;
TextColor(Black+blink);
writeln('*** 1 ---> Dimensionamento e Caricamento Dei Dati ***');
writeln;
writeln;
writeln('*** 2 ---> Visualizzazione dati acquisiti ***');
writeln;
writeln;
writeln('*** 3 ---> Ordinamento Giacenze Attuali ***');
writeln;
writeln;
writeln('*** 4 ---> Visualizzazione Giacenze attuali ***');
writeln;
writeln;
writeln('*** 5 ---> Fine ***');
writeln;
writeln;
writeln;
begin
TextColor(Black);
write('Inserite il codice dell'' operazione che volete svolgere ----> ');
readln(scelta);
sound(440);
delay(1000);
nosound;
end;
Case scelta of
1:carica;
2:visualizza1;
3:controllo;
4:visualizza2;
5:;
end;
clrscr;
until scelta>4;
end;
end.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:32
Domenica, 30/03/2014
Ciao!

Nella procedura controllo, le istruzioni del ciclo for non sono delimitate da begin e end. Quindi esegue solo la prima istruzione.
In futuro racchiudi il codice tra i tag Code.

PM Quote