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 - Caccia all'errore!
Forum - Pascal - Caccia all'errore!

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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

PM Quote
Avatar
sange_90 (Ex-Member)
Pro


Messaggi: 185
Iscritto: 23/01/2007

Segnala al moderatore
Postato alle 18:25
Lunedì, 05/02/2007
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:

PM Quote
Avatar
sange_90 (Ex-Member)
Pro


Messaggi: 185
Iscritto: 23/01/2007

Segnala al moderatore
Postato alle 18:25
Lunedì, 05/02/2007
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.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:37
Lunedì, 05/02/2007
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 il 05/02/2007 alle 19:21
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:12
Lunedì, 05/02/2007
Il programma è giusto, ho provato io stesso. :k:

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:07
Lunedì, 05/02/2007
Testo quotato

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 :-?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:16
Lunedì, 05/02/2007
Raga ho risolto inserendo un else dopo ogni end!!!!! Che soddisfazione! :asd::k:

PM Quote