Oppure

Loading
30/01/12 13:28
Victor
Ciao a tutti, sono nuovo del forum ed un neofita della programmazione.
Sono giovane, 14 anni, ed ho appena iniziato a programmare in Pascal...diciamo da 3 settimane circa...
Facendo pratica mi sono imbattuto in un problema che non riesco a risolvere data la mia inesperienza. Devo creare dei cicli nidificati multipli (con if then else) secondo uno schemino simile all'esempio allegato

non riesco a capire la sintassi che devo usare :
faccio partire il programma con 1 che mi porta a 2 scelte (2 o 3), poi per ciascuno di 2 e 3 devo aggiungere altre due scelte a testa. Ok lo schema, ma dove devo iniziare ad usare sottocicli? aiutoooo:)
grazie a chi mi risponderà!!
Ultima modifica effettuata da Victor 30/01/12 13:35
aaa
30/01/12 18:19
Poggi Marco
Ciao!
Cosa devi fare esattamente?
Che cosa non va nei tuoi tentativi? (Posta in sorgente).
aaa
30/01/12 20:39
Victor
Ciao! per il sorgente è dura, sto già a 300 righe e passa...la mia idea era di creare una versione digitale di un librogame (Lupo Solitario nella fattispecie, non so se conosci), suddiviso in paragrafi. Si va avanti leggendo un paragrafo che ti mette di fronte a 2-3 scelte da intraprendere corrispondenti ad un numero, passi al paragrafo corrispondente al numero che hai scelto e così via fino ad arrivare alla fine dell'avventura.


cerco di postarti qualche rigo fondamentale :

PROGRAM text_adventure :

var a: integer

PROCEDURE I;
writeln ('blablabla');
writeln ('se fai questo vai a II digitando 2');
writeln ('se fai quest'altro vai a III digitando 3')
END;

PROCEDURE II;
writeln ('blablabla');
writeln ('se fai questo vai a IV digitando 4');
writeln ('se fai quest'altro vai a V digitando 5');
END;

PROCEDURE III;
writeln ('blablabla');
writeln ('se fai questo vai a VI....');
writeln ('se fai quest'altro vai a VII....')
END;

BEGIN
I;
writeln;
read (a);
if a=2
then II;
if a=3
then III;

eccetera eccetera

END;


Praticamente arrivato dopo la prima procedura, come faccio a nidificare ad oltranza tutte le sottoscelte di tutte le procedure?
oddio...mi sono spiegato malissimo, spero tu abbia capito :_doubt:
Ultima modifica effettuata da Victor 30/01/12 20:48
aaa
30/01/12 21:22
Poggi Marco
All' interno di ogni procedura, puoi richiamare altre procedure o funzioni, al limite, una procedura o funzione, può richiamare sé stessa.
Ovviamente, devi controllare le condizioni di chiamata affinché non si verifichi un ciclo infinito.
aaa
30/01/12 21:26
Victor
Postato originariamente da Poggi Marco:

All' interno di ogni procedura, puoi richiamare altre procedure o funzioni, al limite, una procedura o funzione, può richiamare sé stessa.
Ovviamente, devi controllare le condizioni di chiamata affinché non si verifichi un ciclo infinito.


eeeehh...magari a capire in concreto quello che mi scrivi :_doubt:
è troppo poco che studio Pascal e non ho chiaro come richiamare procedure sotto altre, se ti faccio un esempio breve me lo puoi mettere per iscritto con la sintassi giusta per le condizioni di chiamata?

PROGRAM breve_avv;

var
a : integer

PROCEDURE I;
BEGIN
writeln ('Sei in un bosco sperduto, ci sono due sentieri');
writeln ('se segui quello di destra digita 2');
writeln ('se segui quello di sinistra digita 3);
END;

PROCEDURE II;
BEGIN
writeln ('nel sentiero di destra c'è una Panda');
writeln ('se vuoi trafugare lo stereo della Panda, digita 4');
writeln ('se vuoi tornare al bivio digita 1);
END;

PROCEDURE III;
BEGIN
writeln ('sei arrivato in edicola');
writeln ('se compri la gazzetta, digita 5');
writeln ('se vuoi tornare al bivio, digita 1);
END;

BEGIN
I;
read (a);
if a=2
then II;
if a=3
then III;
readln;
readln;
END.

se voglio continuare così per 150 paragrafi (quindi 150 procedure), dove e soprattutto come devo usare la sintassi if then else?




Ultima modifica effettuata da Victor 30/01/12 21:35
aaa
30/01/12 22:08
Poggi Marco
Per chiamare una procedura, basta indicare il nome con gli eventuali parametri.

Nel tuo esempio:
PROGRAM text_adventure;

PROCEDURE II;
forward;

PROCEDURE III;
forward;

{le procedure II e III, sono richiamate da I, ma la loro definizione avviene
dopo quest' ultima. Di conseguenza, vanno dichiarate prima della funzione I,
seguite dal comando forward}

PROCEDURE I;
var a:integer; { a è una variabile locale }
begin
  writeln ('blablabla'); 
  writeln ('se fai questo vai a II digitando 2'); 
  writeln ('se fai quest'' altro vai a III digitando 3');
  readln(a);
  if a=2 then II;  { chiamata di una procedura }
  if a=3 then III;
END; 

PROCEDURE II;
var a:integer;
begin  
  writeln ('blablabla'); 
  writeln ('se fai questo vai a III digitando 4'); 
  writeln ('se fai quest'' altro vai a iV digitando 5');
  readln(a);
  if a=4 then III;
  { ... }
END; 

PROCEDURE III;
var a:integer;
begin
  writeln ('blablabla'); 
  writeln ('se fai questo vai a VI....'); 
  writeln ('se fai quest'' altro vai a VII....');
  readln(a);
  { ... } 
END; 

BEGIN 
 I;
 write('Fine ');
 readln;
end.
aaa
30/01/12 22:25
Victor
Santo subito.
aaa