Newsgroup: it.comp.lang.pascal
Titolo: Problema in prog

Qualcuno puo aiutarmi a dirmi perchè mi da errore all'inizio della procedura
rispondi?
Come si fa anche a fare in modo che dopo che ho messo le risposte ( esempio
Marco, Luca, Stefano( senza lettere davanti)) non vadono per forza in A)
Marco, B) Luca, C) Stefano
ma si posizionano in modo casuale ( cioè A) Luca, B)Stefano C)Marco)?
Vi ringrazio anticipatamente. Spike
Qui di seguito allego tutto il programma
PROGRAM test;
USES CRT;
TYPE
 domptr = ^domrec;
 domrec = record
 domanda : string;
 risp1 : string;
 risp2 : string;
 risp3 : string;
 gius : string;
 nome : string;
 prox : domptr;
 END;
VAR Primo , Precedente, Corrente: domptr;
    ch : char;
    i,n :integer;
PROCEDURE IMMISSIONE;
(*************************************************************************)
   PROCEDURE presentazione;
    BEGIN
     with corrente^ do
      BEGIN
       write('Quante domande vuoi immettere? ');
       readln(n);
       writeln;
       for i:=1 to n do BEGIN
       clrscr;
       write('Immettere la ',i,'ø domanda: ');
       readln(domanda);
       write('Immettere le possibili risposte: ');
       readln(risp1,risp2,risp3);
       write('La risposta esatta S: ');
       readln(gius);
      END;
     END;
(*************************************************************************)
Begin
 clrscr;
  If primo=Nil then
   Begin
    New(corrente);
    presentazione;
    primo:=corrente;
    precedente:=corrente;
    corrente^.prox:=nil
    end
  Else
   Begin
   precedente:=corrente;
   new(corrente);
   presentazione;
   precedente^.prox:=corrente;
   corrente^.prox:=nil;
   end;
 end;
(*************************************************************************)
PROCEDURE RISPONDI;
 BEGIN
  corrente := primo;
  WHILE corrente <> nil DO
  BEGIN
   WITH corrente^ DO
    writeln(domanda,' ,);
    REPEAT
     writeln('A) ,'risp1,' B),'risp2,' c) ,'risp3);
     writeln;
     ch := Readkey;
     IF ch := #0 THEN
     ch := Readkey;
     ch := Upcase (ch);
    UNTIL ch in ['A', 'B', 'C'];
  END;
   IF 'A':= risp1 and  risp1:=gius THEN
    BEGIN
     gius:= 'A';
     writeln('RISPOSTA ESATTA');
     END
   ELSE
    BEGIN
     writeln('RISPOSTA ERRATA');
    END;
   IF 'B':= risp2 and  risp2:=gius THEN
    BEGIN
     gius:= 'B';
     writeln('RISPOSTA ESATTA');
     END
   ELSE
    BEGIN
     writeln('RISPOSTA ERRATA');
    END;
   IF 'C':= risp3 and  risp3:=gius THEN
    BEGIN
     gius:= 'C';
     writeln('RISPOSTA ESATTA');
     END
    ELSE
     BEGIN
     writeln('RISPOSTA ERRATA');
     END;
END;
(***************************************************************************
*****)
BEGIN
 immissione;
 rispondi;
END.

 [SNIP]

 [SNAP]
Controllando meglio... sono parecchi gli End che hai mancato, ti consiglio
di verificare tutte le coppie Begin/End e di commentarle.
BlackDemon

Ok, ma trovo ancora diversi errori che non riesco a superare. Potresti
aiutarmi?
Spike


L'ho ricontrollato e aggiustato ma proprio alla fine mi da un errore.
Sapreste aiutarmi?
Vi ringrazio anticipatamente,
  Spike
Qui c'è il programma
PROGRAM test;
USES CRT;
TYPE
 domptr = ^domrec;
 domrec = record
 domanda : string;
 risp1 : string;
 risp2 : string;
 risp3 : string;
 gius : string;
 nome : string;
 prox : domptr;
 END;
VAR Primo , Precedente, Corrente: domptr;
    ch : char;
    i,n :integer;
    nome:string;
(***************************************************************************
*)
PROCEDURE presentazione;
(* Carica un file di testo di introduzione al programma *)
VAR pres: TEXT;
    car: CHAR;
BEGIN
  ASSIGN (pres, 'c:\quiz.txt');
  RESET (pres);
  WHILE (NOT EOF(pres)) DO BEGIN
                             READ (pres, car);
                             WRITE (car)
                           END;
  CLOSE (pres);
END;
(*************************************************************************)
PROCEDURE ESAMINATORE;
(*************************************************************************)
   PROCEDURE presentazione;
    BEGIN
     with corrente^ do
      BEGIN
       write('Quante domande vuoi immettere? ');
       readln(n);
       writeln;
       for i:=1 to n do BEGIN
       clrscr;
       write('Immettere la ',i,'ø domanda: ');
       readln(domanda);
       write('Immettere le possibili risposte: ');
       readln(risp1,risp2,risp3);
       write('La risposta esatta S: ');
       readln(gius);
      END;
     END;
(*************************************************************************)
Begin
 clrscr;
  If primo=Nil then
   Begin
    New(corrente);
    presentazione;
    primo:=corrente;
    precedente:=corrente;
    corrente^.prox:=nil
    end
  Else
   Begin
   precedente:=corrente;
   new(corrente);
   presentazione;
   precedente^.prox:=corrente;
   corrente^.prox:=nil;
   end;
 end;
END;
(*************************************************************************)
PROCEDURE ESAMINANDO;
 BEGIN
  corrente := primo;
  WHILE corrente <> nil DO
  BEGIN
   write('Registra il tuo nome e cognome: ');
   readln (nome);
   WITH corrente^ DO
    writeln(domanda,' ,');
    REPEAT
     writeln('A) ,',corrente^.risp1,' B),',corrente^.risp2,' c)
,',corrente^.risp3);
     writeln;
     ch := Readkey;
     IF ch = #0 THEN
     ch := Readkey;
     ch := Upcase (ch);
    UNTIL ch in ['A', 'B', 'C'];
  END;
   IF 'A'= corrente^.risp1 THEN
    BEGIN
     corrente^.gius:= 'A';
     writeln('RISPOSTA ESATTA');
     END
   ELSE
    BEGIN
     writeln('RISPOSTA ERRATA');
    END;
   IF 'B'= corrente^.risp2 THEN
    BEGIN
     corrente^.gius:= 'B';
     writeln('RISPOSTA ESATTA');
     END
   ELSE
    BEGIN
     writeln('RISPOSTA ERRATA');
    END;
   IF 'C'= corrente^.risp3  THEN
    BEGIN
     corrente^.gius:= 'C';
     writeln('RISPOSTA ESATTA');
     END
    ELSE
     BEGIN
     writeln('RISPOSTA ERRATA');
     END;
END;
(***************************************************************************
*****)
BEGIN
 clrscr;
 presentazione;
 esaminatore;
 esaminando;
END.

 Sapreste aiutarmi?
Mmm... eppure avevi sbagliato a scrivere le coppie Begin/End.
Questa versione riesce a partire ma ci sono comunque alcuni errori:
(********************* CODE *********************)
PROGRAM test;
USES CRT;
TYPE
 domptr  = ^domrec;
 domrec  = record
    domanda : string;
    risp1   : string;
    risp2   : string;
    risp3   : string;
    gius    : string;
    nome    : string;
    prox    : domptr;
 END; { Type Domrec }
VAR Primo, Precedente, Corrente : domptr;
    ch   : char;
    i,n  : integer;
    nome : string;
(************************************************************)
PROCEDURE presentazione;
(* Carica un file di testo di introduzione al programma *)
VAR pres: TEXT;
    car : string;
BEGIN
  ASSIGN (pres, 'c:\quiz.txt');
  RESET (pres);
  WHILE (NOT EOF(pres)) DO BEGIN
                             READLN (pres, car); { }
                             WRITELN (car)       { }
                           END;
  CLOSE (pres);
END;
(************************************************************)
PROCEDURE ESAMINATORE;
(************************************************************)
   PROCEDURE presentazione;
    BEGIN
     with corrente^ do
      BEGIN
       write('Quante domande vuoi immettere? ');
       readln(n);
       writeln;
       for i:=1 to n do BEGIN
       clrscr;
       write('Immettere la ',i,'ų domanda: ');
       readln(domanda);
       write('Immettere le possibili risposte: ');
       readln(risp1,risp2,risp3);
       write('La risposta esatta S: ');
       readln(gius);
      END; { For i }
     END; { with corente^ }
   end; { proc presentazione }
(************************************************************)
Begin { Proc Esaminatore }
 clrscr;
  If primo=Nil then
   Begin
    New(corrente);
    presentazione;
    primo:=corrente;
    precedente:=corrente;
    corrente^.prox:=nil
   end { if }
  Else
   Begin
    precedente:=corrente;
    new(corrente);
    presentazione;
    precedente^.prox:=corrente;
    corrente^.prox:=nil;
   end; { else }
 end; { proc Esaminatore }
(****************************************************************)
PROCEDURE ESAMINANDO;
 BEGIN
  corrente := primo;
  WHILE corrente <> nil DO
  BEGIN
   write('Registra il tuo nome e cognome: ');
   readln (nome);
   WITH corrente^ DO
    writeln(domanda,' ,');
    REPEAT
     writeln('A) ,',corrente^.risp1,' B),',corrente^.risp2,'
c),',corrente^.risp3);
     writeln;
     ch := Readkey;
     IF ch = #0 THEN
     ch := Readkey;
     ch := Upcase (ch);
    UNTIL ch in ['A', 'B', 'C'];
  END; { while }



END; { Proc esaminando }
(***************************************************************)
BEGIN
 clrscr;
 presentazione;
 esaminatore;
 esaminando;
END.
(********************* /CODE *********************)
Alcuni errori che hai fatto nella stesura del codice:
-- In presentazione non stampava il file di testo (corretto)
-- Non sono molto esperto nell'uso dei puntatori, ma credo che dovresti
crearti un array di domrec, e poi utilizzare i puntatori per
visualizzarli/modificarli (ma sarebbe anche possibile evitare l'uso dei
puntatori ed accedere all'array con il metodo classico:
readln(vettore[i].risp1) ecc ecc)
La prox volta se puoi riporta la descrizione dell'errore che ti da il
compilatore, se vuoi sapere come utilizzare l'array posso darti alcune
dritte ma non penso che mi metterņ a scrivere l'interno prog - d'estate si
riposa :P
--
BlackDemon - bdemon(at)
iol.it

 wrote in message
9ivibb$ufb$1...@lacerta.tiscalinet.it...


 Prova con questo:
Con questo mi funziona ma mi dopo che mette le domande (per esempi inserisco
3 domande), mi legge solo l'ultima domanda inserita e le relative risposte
ma poi non mi dice se la risposta è giusta o sbagliata.
Come faccio a far leggere anche le altre domande e risposte?
Poi, come faccio anche a memorizzare le risposte giuste date?
Spike

 wrote in message
9j156b$afe$1...@lacerta.tiscalinet.it...
