Oppure

Loading
05/02/07 16:44
Vi scrivo quanto riportato da un libro:

"Il responsabile di una biblioteca pubblica, Saro De Corvis, vuole effettuare un controllo sul numero di maschi e di femmine che, giorno per giorno, la frequentano. Per ottenere ciò fa collegare un personal computer con il dispositivo di ingresso alla biblioteca, in modo che l'accesso venga consentitolo solo a coloro che abbiano premuto il tasto cirrispondente al loro sesso (M/F). Costruire un programma che, simulando il controllo sulla porta di ingresso, permetta al direttore, e solo a lui, in ogni momento della giornata, il numero di maschi e di femmine che sono entrati."

Ecco il programma:

program biblioteca;
uses crt;
var cod:string;
m,f:integer;
giornatafinita:boolean;
ris:char;
begin
m:=0;
f:=0;
giornatafinita:=false;
repeat
clrscr;
writeln('Digita M se sei maschio, o digita F se sei femmina');
readln(cod);
if (cod='m') or (cod='M') then
begin
m:=m+1;
writeln('Avanti');
end;
if (cod='f') or (cod='F') then
begin
f:=f+1;
writeln('Avanti');
end;
if (cod='saro') or (cod='SARO') then
begin
writeln('Attualmente sono entrati ',m,' maschi e ',f,' femmine');
writeln('E'' finita la giornata?');
readln(ris);
if (ris='s') or (ris='S') then
begin
giornatafinita:=true;
writeln('Premi Invio per continuare');
end;
end;
if (cod<>'f') or (cod<>'F') or (cod<>'m') or (cod<>'M') then writeln('Codice errato, riprovare');
readln
until giornatafinita;
end.


Il problema è che, anche se premo m o f, mi appare sia la scritta Avanti che la scritta "Codice errato, riprovare". E' davvero molto strano, io non riesco a capire dov'è l'errore... aiutatemi please! :d
05/02/07 17:25
sange_90
Così dovrebbe essere a posto... nota le modifiche... la prossima volta prova a strutturare il programma in modo che si capisca meglio... ok?... spero di esserti stato di nuovo d' aiuto!:k:
aaa
05/02/07 17:25
sange_90
program biblioteca;
uses crt;
var cod : char; (* <<< Modifica : da string a CHAR *)
m,f : integer;
giornatafinita : boolean;
ris : char;
begin
m:=0;
f:=0;
giornatafinita:=false;
repeat
clrscr;
writeln('Digita M se sei maschio, o digita F se sei femmina');
readln(cod);
if (cod='m') or (cod='M') then
begin
m:=m+1;
writeln('Avanti');
end
else if (cod='f') or (cod='F') then
begin
f:=f+1;
writeln('Avanti');
end;
if (cod='K') or (cod='k') then (* <<< Modifica : K al posto di saro *)
begin
writeln('Attualmente sono entrati ',m,' maschi e ',f,' femmine');
writeln('E'' finita la giornata?');
readln(ris);
if (ris='s') or (ris='S')
then begin
giornatafinita:=true;
writeln('Premi Invio per continuare');
end;
end;
(* if (cod<>'f') or (cod<>'F') or (cod<>'m') or (cod<>'M') *) (* Modifica : <<< Questo pezzo nn serve *)
(* then writeln('Codice errato, riprovare'); *)
until giornatafinita;
readln;
end.
aaa
05/02/07 17:37
Non credo di aver capito bene... cod va bene come string, poichè se non erro, char legge un solo carattere giusto?

Il pezzo finale vorrei lasciarlo per indicare che il codice è errato nel caso non ci fosse una condizione adatta... il problema è che se metto m o f, oppure prima della fine del programma, questa scritta mi appare ovunque, anche se non riesco a spiegarmelo...
Ultima modifica effettuata da 05/02/07 18:21
05/02/07 19:12
Il Totem
Il programma è giusto, ho provato io stesso. :k:
aaa
05/02/07 20:07
Postato originariamente da Il Totem:

Il programma è giusto, ho provato io stesso. :k:


E' impossibile, a me da un errore... se inserisco m o f ad esempio, oltre ad uscirmi la scritta "Avanti", mi esce anche la scritta "Codice errato, riprovare", dovrebbe presentarti solo quando cod è diversa da m, f e saro :-?
05/02/07 20:16
Raga ho risolto inserendo un else dopo ogni end!!!!! Che soddisfazione! :asd::k: