allora, ecco a cosa sn arrivato: con i pari funziona, ma coi dispari sn nei problemi:

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;
        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;

    if(R=0) then                 {Se il resto Š 0, il numero Š pari....}
      begin
        procedura_pari;
        readln;
      end
    else
      procedura_dispari;
      readln;
end.
parte a ruota con un dispari, spara numeri che nn capisco... c'è qualcosa che nn va... ma cosa?