Pascal i prosty program do napisania


(Groldominika) #1

Witam, mam do napisania program który policzy pole i obwód trójkąta. Problem w tym że za raz na początku mam wybrać co chce policzyć. A więc czy pole czy trójkąt. W zadaniu jest uwaga by nie korzystać z polecenia case które de facto ułatwiło by mi sytuacje a tak to teraz nie wiem jak to zrobić. Dziś miałam pierwsze zajęcia z Pascala i takie zadanko dostałam :frowning: To co udało mi się napisać zamieszczam poniżej:

var

  a,b,c,h,pole,obwod:real;

begin

  writeln('Podaj dlugosc podstawy trojkata: '); read(a);

  writeln('Podaj wysokosc trojkata: '); read(h);

  pole:=(a*h)/2;

  writeln('Pole wynosi: ',pole:1:0);

  writeln;


  writeln('Podaj kolejno wymiary bokow trojkata aby policzyc obwod'); read(a,b,c);

  obwod:=a+b+c;

  write('Obwod trojkata wynosi: ');

  write(obwod:1:0);

  readln;

  end.

Jak to teraz przerobić by mieć wybór czy policzyć pole czy obwód?


(Mirekgw) #2

napiszą ci że w odrabianiu lekcji nie pomagamy .


(Sebek Barca) #3

Łap

var

  a,b,c,h,pole,obwod:real;


procedure pole_trojkata;

begin

  writeln('Podaj dlugosc podstawy trojkata: '); read(a);

  writeln('Podaj wysokosc trojkata: '); read(h);

  pole:=(a*h)/2;

  writeln('Pole wynosi: ',pole:1:0);

  writeln;

end;


procedure obwod_trojkata;

begin

  writeln('Podaj kolejno wymiary bokow trojkata aby policzyc obwod');

  read(a,b,c);

  obwod:=a+b+c;

  write('Obwod trojkata wynosi: ');

  write(obwod:1:0);

  readln;

end;



procedure wybierz;

var

  rownanie:integer;

begin

  writeln('Wpisz co chcesz obliczyc pole (1) czy odwod (2) ?');

  readln(rownanie);

  if rownanie=1 then

    begin

      pole_trojkata;

    end;

  if rownanie=2 then

    begin

      obwod_trojkata;

    end;

end;


begin

  wybierz;

  readln;

end.

Nie ma za co :slight_smile:


(Groldominika) #4

Ślicznie Panu dziękuję.


(Dark Smark) #5

Dużo lepiej jest użyć instrukcję CASE co radzę zrobić. Po co w tak małych programach używać procedur? Wydłużałeś kod maksymalnie. Pozdrawiam.


(Sebek Barca) #6

Czytaj ze zrozumieniem.


(Kr2y5i3k) #7

w procedure pole_trojkata zapomniales

readln;

:slight_smile: mozna tez i krocej (10 linijek mniej):

var

  a,b,c,h:real;

  rownanie:integer;

procedure pole_trojkata;

begin

  writeln('Podaj dlugosc podstawy trojkata: '); read(a);

  writeln('Podaj wysokosc trojkata: '); read(h);

  writeln('Pole wynosi: ',(a*h)/2:1:0);

  writeln;

  readln;

end;


procedure obwod_trojkata;

begin

  writeln('Podaj kolejno wymiary bokow trojkata aby policzyc obwod');

  read(a,b,c);

  write('Obwod trojkata wynosi: ',a+b+c:1:0);

  readln;

end;


begin

  writeln('Wpisz co chcesz obliczyc pole (1) czy obwod (2) ?');

  readln(rownanie);

  if rownanie=1 then

    begin

      pole_trojkata;

    end;

  if rownanie=2 then

    begin

      obwod_trojkata;

    end;

  readln;

end.

(Dark Smark) #8

To niech powie nauczycielowi niech pomyśli lepiej czego od uczy. Podstawową zasadą tworzenia algorytmu jest uzyskanie jak największej czytelności i zrealizowania w jak najmniejszej liczbie kroków zadania. Nauczyciel swoim zastrzeżeniem mija się z celem.

Jeżeli kolega nie radzi sobie z Pascalem to polecam zakup książki z helionu, mają dość tanie i dobre booki. Jeżeli nie wiesz jak rozwiązać problem to rozpisz sobie algorytm schematem blokowym, listą kroków lub choćby pseudokodem. Początkujący mają często problemy z rozwiązaniem problemu od razu w języku programowania.

A co do case to przepraszam, po prostu od razu przeczytałem Twój post z gotowym kodem i dlatego miałem zastrzeżenia. Przepraszam.

Pozdrawiam.