magari è brutto ma prova così
codice:
program CICLO;
uses
crt; {Richiamo la unit CRT}
var
NUMERO, R, R2: integer;
RISPOSTA: string;
procedure procedura_pari; {questo funziona bene...}
begin
while (NUMERO <> 1) do
begin
NUMERO := NUMERO div 2;
R:= NUMERO mod 2;
if(R <> 0) THEN
goto dacapo;
writeln (NUMERO);
end;
writeln ('------------------------------');
writeln ('FINITO!!');
end;
procedure procedura_dispari;
begin
while (NUMERO <> 1) do {finchè il numero è diverso da 1}
begin
R2 := NUMERO mod 2;
while (R2 <> 0) do {ficnhè il numero è dispari (resto diverso da 0)}
begin
NUMERO := ((NUMERO*3)+1) div 2;
writeln(NUMERO);
end;
procedura_pari;
end;
end;
begin
clrscr;
writeln('Questo programma Š stato orgogliosamente realizzato da Kilin');
writeln('per ovviare alla mancanza di materia grigia di KleRoi.');
writeln;
readln;
writeln('Via su, dammi ir numero... non nell''occhio, o'' duro!');
read(NUMERO);
R:= NUMERO mod 2;
dacapo:
if(R=0) then {Se il resto Š 0, il numero Š pari....}
begin
procedura_pari;
readln;
end
else
procedura_dispari;
readln;
end.
ho deciso di usare le label
anche se cmq non uso pascal da mesi
te devi fare 2 cose
o esci dalla procedura (e qui non ricordo se c'è un costrutto x farlo)
oppure fai un salto condizionato che ti porta dove vuoi che si svogla il lavoro
ciao