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 - Cicli nidificati multipli
Forum - Pascal - Cicli nidificati multipli

Avatar
Victor (Normal User)
Newbie


Messaggi: 4
Iscritto: 30/01/2012

Segnala al moderatore
Postato alle 14:28
Lunedì, 30/01/2012
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à!!


Victor ha allegato un file: esempio.jpg (179622 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Victor il 30/01/2012 alle 14:35
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:19
Lunedì, 30/01/2012
Ciao!
Cosa devi fare esattamente?
Che cosa non va nei tuoi tentativi? (Posta in sorgente).

PM Quote
Avatar
Victor (Normal User)
Newbie


Messaggi: 4
Iscritto: 30/01/2012

Segnala al moderatore
Postato alle 21:39
Lunedì, 30/01/2012
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 il 30/01/2012 alle 21:48
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:22
Lunedì, 30/01/2012
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.

PM Quote
Avatar
Victor (Normal User)
Newbie


Messaggi: 4
Iscritto: 30/01/2012

Segnala al moderatore
Postato alle 22:26
Lunedì, 30/01/2012
Testo quotato

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 il 30/01/2012 alle 22:35
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:08
Lunedì, 30/01/2012
Per chiamare una procedura, basta indicare il nome con gli eventuali parametri.

Nel tuo esempio:
Codice sorgente - presumibilmente Delphi

  1. PROGRAM text_adventure;
  2.  
  3. PROCEDURE II;
  4. forward;
  5.  
  6. PROCEDURE III;
  7. forward;
  8.  
  9. {le procedure II e III, sono richiamate da I, ma la loro definizione avviene
  10. dopo quest' ultima. Di conseguenza, vanno dichiarate prima della funzione I,
  11. seguite dal comando forward}
  12.  
  13. PROCEDURE I;
  14. var a:integer; { a è una variabile locale }
  15. begin
  16.   writeln ('blablabla');
  17.   writeln ('se fai questo vai a II digitando 2');
  18.   writeln ('se fai quest'' altro vai a III digitando 3');
  19.   readln(a);
  20.   if a=2 then II;  { chiamata di una procedura }
  21.   if a=3 then III;
  22. END;
  23.  
  24. PROCEDURE II;
  25. var a:integer;
  26. begin  
  27.   writeln ('blablabla');
  28.   writeln ('se fai questo vai a III digitando 4');
  29.   writeln ('se fai quest'' altro vai a iV digitando 5');
  30.   readln(a);
  31.   if a=4 then III;
  32.   { ... }
  33. END;
  34.  
  35. PROCEDURE III;
  36. var a:integer;
  37. begin
  38.   writeln ('blablabla');
  39.   writeln ('se fai questo vai a VI....');
  40.   writeln ('se fai quest'' altro vai a VII....');
  41.   readln(a);
  42.   { ... }
  43. END;
  44.  
  45. BEGIN
  46.  I;
  47.  write('Fine ');
  48.  readln;
  49. end.


PM Quote
Avatar
Victor (Normal User)
Newbie


Messaggi: 4
Iscritto: 30/01/2012

Segnala al moderatore
Postato alle 23:25
Lunedì, 30/01/2012
Santo subito.

PM Quote