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);

repeat

writeln('Ci sono altri visitatori da inserire? (S/N)');
readln(risposta);
risposta := upcase(risposta);

if (risposta<>'S') or (risposta<>'N') then
writeln('Errore');
readln(risposta);

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.

Volendo creare un controllo che permettesse al programma di non accettare
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.