|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Oct 2012
Messaggi: 7
|
Pascal, dubbio.
Salve a tutti. Da pochi giorni ho iniziato a seguire alcune video-lezioni (integrando con alcuni manuali) per entrare nel mondo della programmazione.
Le lezioni sono molto esaustive, fatte da un prof d'informatica e devo dire che mi sto trovando bene. Il prof ha iniziato con Pascal, perchè a detta sua è il miglior punto di partenza per poi spostarsi ad altri linguaggi (che ne pensate voi?). Ora ho un problema, sto cercando di creare un programma che calcoli l'età media dei visitatori di un museo e progressivamente mi dica il numero del visitatore del quale sto inserendo l'età. Il codice è questo : Codice:
program museo;
uses crt;
var
visitatori, somma_eta: integer;
eta_media: real;
risposta: char;
eta: integer;
etaS: string;
errore: integer;
begin
clrscr;
eta_media :=0 ;
visitatori :=0;
eta :=0;
somma_eta :=0;
repeat
visitatori := visitatori + 1;
repeat
writeln('vistitatore numero: ', visitatori, '. Inserisci la sua eta''');
readln(etaS);
val(etaS, eta, errore);
if errore<>0 then
writeln('errore, inserisci un numero in cifre')
else
if eta<0 then
writeln('eta non valida, inserisci un numero superiore o uguale a 0');
until ( eta>=0 ) and ( errore=0 );
somma_eta := somma_eta + eta;
eta_media := somma_eta / visitatori;
writeln('Eta'' media attuale: ' ,eta_media:4:2);
writeln('Ci sono altri visitatori da inserire? (S/N)');
readln(risposta);
risposta := upcase(risposta);
repeat
if (risposta<>'S') or (risposta<>'N') then
writeln('errore');
readln;
until (risposta='N') or (risposta='S');
until risposta='N';
writeln(' Oggi il museo ha ricevuto ', visitatori, ' visite');
writeln(' l''eta'' media dei visitatori di oggi e''', eta_media:4:2);
write('Premi invio per continuare');
readln
end.
altri simboli diversi da S ed N, ho creato l'ultimo IF che compara la variabile risposta (resa maiuscola in precedenza con upcase) e se essa è diversa da S o N mi restituisce un errore e richiede di nuovo la variabile. Il repeat esterno si interrompe solo se risposta è uguale a N. Nella mia testa dovrebbe funzionare tutto ma a quanto pare sbaglio qualcosa, qualcuno può illuminarmi? Non riesco proprio a venirne a capo. Ultima modifica di Hikarusama : 29-02-2016 alle 19:18. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Il problema è che nel repeat/until che hai aggiunto per controllare la risposta e forzarne il reinserimento in caso di errore, in quest'ultimo caso... non provvedi a rileggere la risposta un'altra volta.
Potresti risolvere il tutto piazzando: Codice:
writeln('Ci sono altri visitatori da inserire? (S/N)');
readln(risposta);
risposta := upcase(risposta);
P.S. Il prof dice male: guarda la mia firma.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:10.



















