Program do obliczania Obwodu i pola figUr

0

Witajcie . Mozecie mi pomóc z jednym programem napisanym troche chaotycznie i odrobine długim sposobem ale to nie to jest wazne chodzi o funkcjonalność .

 Program Obwody_i_Pola;
Uses CRT;
var
a,b,c,d,h,Ob,P,g,f,r:real;
x:integer;
k:char;

Begin
 TEXTCOLOR(White);
 WriteLn('Czego obwód i pole chcesz obliczyc ?');
 WriteLn('*********************************');
 WriteLn('*  Kwadratu  *  Prostokatu      *');
 WriteLn('*  Wcisnij   *  Wcisnij         *');
 WriteLn('*  1         *  2               *');
 WriteLn('*********************************');
 WriteLn('*  Trojkatu  *  Rownolegloboku  *');
 WriteLn('*  Wcisnij   *  Wcisnij         *');
 WriteLn('*  3         *  4               *');
 WriteLn('*********************************');
 WriteLn('*  Trapezu   *  Deltoidu        *');
 WriteLn('*  Wcisnij   *  Wcisnij         *');
 WriteLn('*  5         *  6               *');
 WriteLn('*********************************');
 WriteLN('*  Rombu     *  Kola            *');
 WriteLn('*  Wcisnij   *  Wcisnij         *');
 WriteLn('*  7         ^  8               *');
 WriteLn('*********************************');
 Read(x);
 1:='!';
 2:='@';
 3:='#';
 4:='$';
 5:='%';
 6:='^';
 7:='&';
 8:='*';

 Case x of
 '!' : WriteLn('Podaj długosc boku a');
       ReadLn(a);
	   Ob:=a*4;
	   P:=a*a;
 '@' : WriteLn('Podaj dlugosc boku a,b');
       ReadLn(a,b);
	   Ob:=(2*a)+(2*b);
	   P:=a*b;
 '#' : WriteLn('Podaj długosc podstawy a, dlugosc boku b,c i wysokosc h');
       ReadLn(a,b,c,h);
	   Ob:=a+b+c;
	   P:=(a*h):2;
 '$' : WriteLn('Podaj dlugosc boku a,b i wysokosc h');
       ReadLn(a,b,h);
	   Ob:=(2*a)+(2*b);
	   P:=a*h;
 '%' : WriteLn('Podaj dlugosc podstawy a,b');
       WriteLn('Podaj dlugosc boku c,d');
	   WriteLn('Podaj długosc wysokosci h');
       WriteLn('      a       ');
       WriteLn('     ---      ');
       WriteLn('  c/     \d   ');
       WriteLn('   -------    ');
       WriteLn('      b       ');
       ReadLn(a,b,c,d,h);
       Ob:=a+b+c+d;
       P:=[(a+b)* h] : 2;	
 '^' : WriteLn('Podaj długosc boku a,b');
       ReadLn(a,b);
	   clrscr;
	   WriteLn('Podaj dlugosc przekatnych g,f');
	   WriteLn('g to krotsza przekatna');
	   WriteLn('f to dluzsza przekatna');
	   ReadLn(g,f);
	   Ob:=(2*a)+(2*b);
	   P:=(g*f) : 2;
 '&' : WriteLn('Podaj dlugosc boku a i wysokosc h');
       ReadLn(a,h);
	   Ob:=4*a;
	   P:=a*a
 '*' : WriteLn('Podaj promien kola r');
       ReadLn(r);
	   Ob:=2*Pi*r;
	   P:=Pi*r*r;
	   Readln;
	   end;
	
	   WriteLn('Obwod wynosi: ',Ob:0:2);
	   WriteLn('Pole wynosi: ',P:0:2);
	   k:=readkey;
	
 end.

Co musze tu poprawic aby wyniki wychodziły poprawnie i kompilacja sie udała .
jak zawsze mam problem z wartosciami case , wiem ze ma byc integer ale wyskakuje bład ;/

1

Pascal to nie Python ;)

 '!' : Begin
WriteLn('Podaj długosc boku a');
       ReadLn(a);
           Ob:=a*4;
           P:=a*a;
End;
 '@' :Begin
WriteLn('Podaj dlugosc boku a,b');
       ReadLn(a,b);
           Ob:=(2*a)+(2*b);
           P:=a*b;
End;

Reszta analogicznie.

P:=[(a+b)* h] : 2;

Może mi ktoś wytłumaczyć, co to miało z założenia robić?
Przecież nawiasy można zagnieżdżać.

P:=((a+b)* h):2

--

1:='!';
 2:='@';
 3:='#';
 4:='$';
 5:='%';
 6:='^';
 7:='&';
 8:='*';

To już w ogóle nie wiem co jest...

 Case x of
 '!' : WriteLn('Podaj długosc boku a');
       ReadLn(a);
           Ob:=a*4;
           P:=a*a;

Jeżeli 'X' jest integrem, to można bezproblemowo zrobić tak:

Case X Of
 1: Begin
(...)
End;
 2: Begin
(...)
End;

Bez jakiejś dziwnej zamiany na niewiadomoco.

0
 1:='!';
 2:='@';
 3:='#';
 4:='$';
 5:='%';
 6:='^';
 7:='&';
 8:='*';

To miałem usunac przed wklejeniem na forum , niestety spiacy juz bylem zapomnialem.
przechodzac do case to musi to tak wygladac ?

Case x of
1: Begin
(...);
end;
2: Begin
(...);
end;

inaczej nie bedzie dzialac z wprowadzonymi liczbami czy jak ?


z nawiasami kwadratowymi to wiem pomyliło mi sie juz z czysta matma :),

natomiast mam tu jeszcze pewien mały problem natomiast

3: Begin
       WriteLn('Podaj długosc podstawy a, dlugosc boku b,c i wysokosc h');
       ReadLn(a,b,c,h);
	   Ob:=a+b+c;
	   P:=(a*h):2;
	   End; 

Error: Syntax error, ";" expected but ";" found
i nie mam pojecia jak to naprawic

2

Hmmmm, a : to w Pascalu jest dzielenie? o.o czego nowego można się na tym forum dowiedzieć.

0

O własnie dzieki :) nie zauważylem tego
Działa nareszcie

1 użytkowników online, w tym zalogowanych: 0, gości: 1