View Full Version : [PASCAL]Problema programma per scuola...
>>The Red<<
11-11-2009, 15:52
Questo è il programma:
Program Votazione;
var conta,TV1,TV2,TV3,TV4,X,MAXVOTI :integer;
NOME1,NOME2,NOME3,NOME4 :string;
Begin;
conta:=0;
TV1:=0;
TV2:=0;
TV3:=0;
TV4:=0;
Write('Scrivi il numero massimo dei voti da effettuare');
Readln(MAXVOTI);
Write('Scrivi il nome del primo candidato: ',NOME1);
Readln(NOME1);
Write('Scrivi il nome del secondo candidato: ',NOME2);
Readln(NOME2);
Write('Scrivi il nome del terzo candidato: ',NOME3);
Readln(NOME3);
Write('Scrivi il nome del quarto candidato: ',NOME4);
Readln(NOME4);
repeat
Writeln('Seleziona quale candidato votare:');
Writeln( '1.'NOME1);
Writeln( '2.'NOME2);
Writeln( '3.'NOME3);
Writeln( '4.'NOME4);
Read(X);
if X:=1 then
TV1:=TV1+1
else
if X:=2 then
TV2:=TV2+1
else
if X:=3 then
TV3:=TV3+1
else
if X:=4 then
TV4:=TV4+1
else
Write('Operazione non riuscita')
conta:=conta+1
until MAXVOTI:=conta
Writeln('Risultato delle operazioni: ')
Writeln( NOME1,'ha ricevuto' ,TV1, 'voti')
Writeln( NOME2,'ha ricevuto' ,TV2, 'voti')
Writeln( NOME3,'ha ricevuto' ,TV3, 'voti')
Writeln( NOME4,'ha ricevuto' ,TV4, 'voti')
readln
END.
Non riesco a trovare l'errore!:muro:
Aiutaremi please;)
non è
until MAXVOTI:=conta
ma è
until MAXVOTI=conta
un consiglio, invece di usare mille if else usa un case
mancano anche i punto e virgola nelle ultime istruzioni
P.S.: la prossima volta posta anche l'errore che ricevi
------EDIT------
questo è il codice corretto per intero:
Program Votazione;
var conta,TV1,TV2,TV3,TV4,X,MAXVOTI :integer;
NOME1,NOME2,NOME3,NOME4 :string;
Begin;
conta:=0;
TV1:=0;
TV2:=0;
TV3:=0;
TV4:=0;
Write('Scrivi il numero massimo dei voti da effettuare');
Readln(MAXVOTI);
Write('Scrivi il nome del primo candidato: ',NOME1);
Readln(NOME1);
Write('Scrivi il nome del secondo candidato: ',NOME2);
Readln(NOME2);
Write('Scrivi il nome del terzo candidato: ',NOME3);
Readln(NOME3);
Write('Scrivi il nome del quarto candidato: ',NOME4);
Readln(NOME4);
repeat
Writeln('Seleziona quale candidato votare:');
Writeln( '1.',NOME1);
Writeln( '2.',NOME2);
Writeln( '3.',NOME3);
Writeln( '4.',NOME4);
Read(X);
if (X=1) then
TV1:=TV1+1
else
if (X=2) then
TV2:=TV2+1
else
if (X=3) then
TV3:=TV3+1
else
if (X=4) then
TV4:=TV4+1
else
Write('Operazione non riuscita');
conta:=conta+1
until (MAXVOTI=conta);
Writeln('Risultato delle operazioni: ');
Writeln( NOME1,'ha ricevuto ',TV1,' voti');
Writeln( NOME2,'ha ricevuto ',TV2,' voti');
Writeln( NOME3,'ha ricevuto ',TV3,' voti');
Writeln( NOME4,'ha ricevuto ',TV4,' voti');
read();
END.
-non lo avevo notato ma in pratica hai "confuso" tutti i confronti con le assegnazioni: = non è :=
-avevi dimenticato le virgole per la concatenazione delle variabili nelle istruzioni appena dentro al repeat
per quanto riguarda gli if io ti consiglio di mettere le condizioni dentro alle tonde.
insoltre non prevedi il caso che io inserisca un numero non previsto, se per esempio io scrivo 5 non siccede niente, potresti visualizzare un warning e chiedere di riprovare.
per ora non mi viene in mente altro.
>>The Red<<
11-11-2009, 20:14
non è
until MAXVOTI:=conta
ma è
until MAXVOTI=conta
un consiglio, invece di usare mille if else usa un case
mancano anche i punto e virgola nelle ultime istruzioni
P.S.: la prossima volta posta anche l'errore che ricevi
------EDIT------
questo è il codice corretto per intero:
Program Votazione;
var conta,TV1,TV2,TV3,TV4,X,MAXVOTI :integer;
NOME1,NOME2,NOME3,NOME4 :string;
Begin;
conta:=0;
TV1:=0;
TV2:=0;
TV3:=0;
TV4:=0;
Write('Scrivi il numero massimo dei voti da effettuare');
Readln(MAXVOTI);
Write('Scrivi il nome del primo candidato: ',NOME1);
Readln(NOME1);
Write('Scrivi il nome del secondo candidato: ',NOME2);
Readln(NOME2);
Write('Scrivi il nome del terzo candidato: ',NOME3);
Readln(NOME3);
Write('Scrivi il nome del quarto candidato: ',NOME4);
Readln(NOME4);
repeat
Writeln('Seleziona quale candidato votare:');
Writeln( '1.',NOME1);
Writeln( '2.',NOME2);
Writeln( '3.',NOME3);
Writeln( '4.',NOME4);
Read(X);
if (X=1) then
TV1:=TV1+1
else
if (X=2) then
TV2:=TV2+1
else
if (X=3) then
TV3:=TV3+1
else
if (X=4) then
TV4:=TV4+1
else
Write('Operazione non riuscita');
conta:=conta+1
until (MAXVOTI=conta);
Writeln('Risultato delle operazioni: ');
Writeln( NOME1,'ha ricevuto ',TV1,' voti');
Writeln( NOME2,'ha ricevuto ',TV2,' voti');
Writeln( NOME3,'ha ricevuto ',TV3,' voti');
Writeln( NOME4,'ha ricevuto ',TV4,' voti');
read();
END.
-non lo avevo notato ma in pratica hai "confuso" tutti i confronti con le assegnazioni: = non è :=
-avevi dimenticato le virgole per la concatenazione delle variabili nelle istruzioni appena dentro al repeat
per quanto riguarda gli if io ti consiglio di mettere le condizioni dentro alle tonde.
insoltre non prevedi il caso che io inserisca un numero non previsto, se per esempio io scrivo 5 non siccede niente, potresti visualizzare un warning e chiedere di riprovare.
per ora non mi viene in mente altro.
Ma così corretto l'hai provato?
Perche devo usare le parentesi tonde?
Cosa è un case?
Ora lo provo e ti faccio sapere;)
Grazie^^:D
-si, l'ho provato, certo!
-le parentesi tonde le "devi" usare perchè ti danno una mano con le espressioni complesse ovvero quando hai molti AND/OR/NOT, senza contare il fattore chiarezza
-questo è un case (http://www.pierotofy.it/pages/guide/Guida_Pascal/La_struttura_CasedotdotdotofdotdotdotElse/), ti serve per evitare millemila if/else annidati uno dentro l'altro, anche in questo caso ne guadagni anche in termini di chiarezza del codice
resto in attesa di tue notizie
prego
>>The Red<<
11-11-2009, 20:42
-si, l'ho provato, certo!
-le parentesi tonde le "devi" usare perchè ti danno una mano con le espressioni complesse ovvero quando hai molti AND/OR/NOT, senza contare il fattore chiarezza
-questo è un case (http://www.pierotofy.it/pages/guide/Guida_Pascal/La_struttura_CasedotdotdotofdotdotdotElse/), ti serve per evitare millemila if/else annidati uno dentro l'altro, anche in questo caso ne guadagni anche in termini di chiarezza del codice
resto in attesa di tue notizie
prego
Ma QUESTA (http://www.pierotofy.it/pages/guide/Guida_Pascal/?PHPSESSID=fdd2f244a608940eefe859211786736b) guida la posso scaricare?
Qui mi da questo errore
http://img80.imageshack.us/i/immaginehe.png/
Con un altro compilatore mi dava solo l'errore dele parentesi all'ultimo read.
Poi,quando lo eseguo,tutto va bene ma quando mi sta per stampare i risultati del sondaggio si chiude il programma...sai perchè?
Ma QUESTA (http://www.pierotofy.it/pages/guide/Guida_Pascal/?PHPSESSID=fdd2f244a608940eefe859211786736b) guida la posso scaricare?
boh... credo di no, a meno che non hai intenzione di salvarti tutte le pagine una per una
Qui mi da questo errore
http://img80.imageshack.us/i/immaginehe.png/
Con un altro compilatore mi dava solo l'errore dele parentesi all'ultimo read.
Poi,quando lo eseguo,tutto va bene ma quando mi sta per stampare i risultati del sondaggio si chiude il programma...sai perchè?
il secondo è un warning quindi niente di che ma il primo?? allarga la colonna così si vede tutta la scritta
ai tempi (parlo di 4 o 5 anni fa) avevo notato anche io che il dev-pascal dava qualche provlema con read/readln vuote e anche con varie funzioni di librerie esterne, ti consiglio di usare freepascal oppure quello ufficiale della borland.
il programma si chiude perchè non ha niente da fare, se lo riapri vedrai i risultati scritti sopra.
prova ad usare una readkey (forse keypsess) al posto del read() finale, in questo modo il programma resterà in attesa che l'utente prema un tasto, dovrai importare una libreria ma purtroppo non mi sicordo il nome...
>>The Red<<
11-11-2009, 21:17
boh... credo di no, a meno che non hai intenzione di salvarti tutte le pagine una per una
il secondo è un warning quindi niente di che ma il primo?? allarga la colonna così si vede tutta la scritta
ai tempi (parlo di 4 o 5 anni fa) avevo notato anche io che il dev-pascal dava qualche provlema con read/readln vuote e anche con varie funzioni di librerie esterne, ti consiglio di usare freepascal oppure quello ufficiale della borland.
il programma si chiude perchè non ha niente da fare, se lo riapri vedrai i risultati scritti sopra.
prova ad usare una readkey (forse keypsess) al posto del read() finale, in questo modo il programma resterà in attesa che l'utente prema un tasto, dovrai importare una libreria ma purtroppo non mi sicordo il nome...
Grazie 1000 per le informazioni:D
Ho scaricato il pascal che sta sul link,funziona tutto...
Credo che domani farò una bella figura con la prof.:D
;) ;)
che pascal?
che link?
che prof?
>>The Red<<
11-11-2009, 21:23
che pascal?
che link?
che prof?
il secondo link,il primo non funzona http://www.pierotofy.it/pages/guide/Guida_Pascal/Introduzione_alla_programmazione/
Credo sia DEVPASCAL
La mia professoressa di informatica:D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.