[Pascal/ FPC] Nie uruchamia pętli


(system) #1

Witam. Uczę się samemu, w domu programowania w języku Pascal. Mam podręcznik do starego Turbo Pascala i Lazarus IDE. Usiłuję wykonać prościutki programik, obliczający długość dowolnego boku trójkąta prostokątnego. Program sie kompiluje i do pewnego momentu działa, ale nie wiem czemu, nie chce się zakonczyć po spełnieniu warunku ani uruchomić ponownie pętli :/. Poniżej wklejam kod z pytaniem o radę:

program pitagoras;


{$mode objfpc}{$H+}


uses

  {$IFDEF UNIX}{$IFDEF UseCThreads}

  cthreads,

  {$ENDIF}{$ENDIF}

  Classes

  { you can add units after this };


var

   bok :char;

   zgoda : string;

   liczba1, liczba2, liczba3: real;


begin

     write ('Witaj w programie Pitagoras2008!');

     repeat

           write (' Ktory bok chcesz obliczyc? (a, b, c)');

           readln (bok);

                  if bok = 'a' then

                  write ('Podaj dlugosc drugiego boku: ');

                   readln (liczba1);

                   write ('Podaj dlugosc przeciwprostokatnej: ');

                   readln (liczba3);

                   writeln ('Dlugosc boku wynosi: ', sqrt (liczba3*liczba3-liczba1*liczba1):16:4);

                   write ('Czy chcesz jeszcze obliczyc ktorys bok? (tak, nie)');

                   readln (zgoda);

           if bok = 'b'then

                  write ('Podaj dlugosc drugiej przyprostokatnej: ');

                   readln (liczba1);

                   write ('Podaj dlugosc przeciwprostokatnej: ');

                   readln (liczba3);

                   writeln ('Dlugosc boku wynosi: ', sqrt (liczba3*liczba3-liczba1*liczba1):16:4);

                   write ('Czy chcesz jeszcze obliczyc ktorys bok? (tak, nie)');

                   readln (zgoda);

           if bok = 'c' then

              write ('Podaj dlugosc pierwszej przyprostkokatnej: ');

              readln (liczba1);

              write ('Podaj dlugosc drugiej przyprostokatnej: ');

              readln (liczba2);

              writeln ('Dlugosc przeciwprostokatnej wynosi: ', sqrt (liczba1*liczba1+liczba2+liczba2):16:4);

              write ('Czy chcesz jeszcze obliczyc ktorys bok? (tak, nie)');

              readln (zgoda);

     until zgoda = 'nie';

end.

Za wszystkie odpowiedzi z góry dziękuję i pozdrawiam!


(Gina Gina) #2
  1. Użycie instrukcji w postaci: If … then begin … end; :roll:

  2. Błąd w obliczniu przeciwprostokątnej liczba2+liczba2 ==> liczba2*liczba2 ;/

  • kosmetyczne poprawki, w tym zmieniono wybór na pojedyńcze litery ( t-tak, n-nie)[Enter] :smiley:

    program pitagoras;

    (* w tym programie jest zbędne

    {$mode objfpc}{$H+}

    uses

    {$IFDEF UNIX}{$IFDEF UseCThreads}
    
    cthreads,
    
    {$ENDIF}{$ENDIF}
    
    Classes
    
    { you can add units after this };
    

    *)

    {uses crt; } (* dodać gdy użyte ClrScr *)

    var

     bok : char;
    
     zgoda : char; (* zmiana string na char *)
    
     liczba1, liczba2, liczba3: real;
    

    begin

    writeln ('Witaj w programie Pitagoras2008!');
    
    writeln;
    
    repeat
    

    { ClrScr; }(* ew. dodane *)

      write(' Ktory bok chcesz obliczyc? (a, b, c)[Enter]: ');
    
      readln(bok);
    
      if bok = 'a' then
    
      begin
    
        write(' Podaj dlugosc drugiego boku: ');
    
        readln(liczba1);
    
        write(' Podaj dlugosc przeciwprostokatnej: ');
    
        readln(liczba3);
    
        writeln(' Dlugosc boku wynosi: ', sqrt (liczba3*liczba3-liczba1*liczba1):16:4);
    
        writeln;
    
        write('Czy chcesz jeszcze obliczyc ktorys bok? (t-tak, n-nie)[Enter]: ');
    
        readln(zgoda);
    
      end;
    
      if bok = 'b'then
    
      begin
    
        write(' Podaj dlugosc drugiej przyprostokatnej: ');
    
        readln(liczba1);
    
        write(' Podaj dlugosc przeciwprostokatnej: ');
    
        readln(liczba3);
    
        writeln(' Dlugosc boku wynosi: ', sqrt (liczba3*liczba3-liczba1*liczba1):16:4);
    
        writeln;
    
        write('Czy chcesz jeszcze obliczyc ktorys bok? (t-tak, n-nie)Enter: ');
    
        readln(zgoda);
    
      end;
    
      if bok = 'c' then
    
      begin
    
        write(' Podaj dlugosc pierwszej przyprostkokatnej: ');
    
        readln(liczba1);
    
        write(' Podaj dlugosc drugiej przyprostokatnej: ');
    
        readln(liczba2);
    
        writeln(' Dlugosc przeciwprostokatnej wynosi: ', sqrt (liczba1*liczba1+liczba2*liczba2):16:4);    
    
        writeln;
    
        write('Czy chcesz jeszcze obliczyc ktorys bok? (t-tak, n-nie)[Enter]: ');
    
        readln(zgoda);
    
      end;
    
    until zgoda='n';
    

    end.


(system) #3

Dzięki. Na usprawiedliwienie mogę powiedzieć tylko, że trzy dni temu wywołałem po raz pierwszy w życiu “Hello world” :stuck_out_tongue: Na pewno nie przepiszę wszystkiego, ale już widzę błędy. Dzięki jeszcze raz!