Да се създаде модул с функции, улесняващи решаването на геометрични задачи, който съдържа следните функции:
- Функция за проверка дали една един правоъгълник е квадрат
- Функция за проверка дали 3 числа са валидни страни на триъгълник
- * Функция за проверка вида на триъгълник – равнобедрен, равностранен, правоъгълен, друг
- Функции за пресмятане на лице и обиколка на квадрат, правоъгълник, кръг, триъгълник
- Процедура, която получава параметрите на правоъгълник и извежда пълната информация за него: дали е квадрат и лицето и обиколката му
- Процедура, която получава три числа и извежда пълната информация: дали са страни на триъгълник, видът му и и лицето и обиколката му
Напишете програма, която демонстрира този модул.


Правена е и с Вики
program Project1; uses Unit1; var A, B: integer; begin Write('Vavedete strana na pravoagalnik: '); Readln(A); Write('Vavedete strana na pravoagalnik: '); Readln(B); if Kvadrat(A, B) then Writeln('Kvadrat e') else Writeln('Ne e kvadrat') ; readln; end.Модул:
Браво! Добро начало! :-)
модула:
unit formuli; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function DaliEKvadrat(a, b: integer): boolean; function ValidniStrani(a, b, c: integer): boolean; function PnaPravoagalnik(a, b: integer): integer; function SnaPravoagalnik(a, b: integer): integer; implementation function DaliEKvadrat(a, b: integer): boolean; begin Result:=(a=b) end; function ValidniStrani(a, b, c: integer): boolean; begin Result:=False; if ((((a+b)>c) or ((a+c)>b)) or ((b+c)>a)) then Result:=True; end; function PnaPravoagalnik(a, b: integer): integer; begin Result:=2*(a+b); end; function SnaPravoagalnik(a, b: integer): integer; begin Result:=a*b; end; end.и програмата:
program Figuri; uses formuli; var a, b, c: integer; begin //проверка за квадрат WriteLn('Vavedete stranite na pravoagalnika (razdeleni s pauzi): '); ReadLn(a, b); WriteLn('Kvadrat li e? ', DaliEKvadrat(a, b)); WriteLn; //проверка за валидни страни на триъгълник WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); WriteLn('Validni li sa? ', ValidniStrani(a, b, c)); WriteLn; //лица и обиколки WriteLn('Vavedete strani na pravoagalnika.'); Write('a='); ReadLn(a); Write('b='); ReadLn(b); WriteLn('P=', PnaPravoagalnik(a, b), '; S=', SnaPravoagalnik(a, b)); ReadLn; end.Браво Бори! Всичко е вярно и много добре направено, само в проверката за триъгълник не е ОК – пробвай с 100 1 1.
program project1; uses Unit1; var a, b, g:integer; begin Writeln('Vavedete Uglite na triugulnika'); readln(a,b,g); uglinatriugulnik(a,b,g); writeln('Vida triugulnika e'); VidTriugulnik(a,b,g); readln; end.unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils; Procedure uglinatriugulnik( A,b,g:integer); Procedure VidTriugulnik( a,b,g:integer); implementation Procedure uglinatriugulnik( a,b,g:integer); begin If a+b+g=180 then writeln ('Vavedenata figura e Triugulnik') else writeln('Vavedenata figura ne e triugulnik'); end; Procedure VidTriugulnik( a,b,g:integer); begin If (a=90) or (b=90) or (g=90) then Write('Pravougulen') else If (a=60) and (b=60) and (g=60) then Write('ravnostranen') else If (a=b) or (b=g) or (a=g) then Write('ravnobedren') else Write('raznostranen'); end; end.File: project1.lpr
File: unit1.pas
Браво, Любо! Добро начало!
Подобрена :D
Програма:
program project1; uses Unit1; var A, B, C: integer; Vid: TVidTr; begin Write('Vavedete strana na pravoagalnik: '); Readln(A); Write('Vavedete strana na pravoagalnik: '); Readln(B); if Kvadrat(A, B) then Writeln('Kvadrat e') else Writeln('Ne e kvadrat'); Writeln; Write('Vavedete strana na triagalnik: '); ReadLn(A); Write('Vavedete strana na triagalnik: '); ReadLn(B); Write('Vavedete strana na triagalnik: '); ReadLn(C); Vid:= VidTr(A,B,C); if Vid=Raznostranen then Writeln('Triagalnikat e raznostranen.'); if Vid=Ravnobedren then Writeln('Triagalnikat e ravnobedren.'); if Vid=Ravnostranen then Writeln('Triagalnikat e ravnostranen.'); readln; end.Модул:
unit Unit1; interface type TVidTr=(Raznostranen=1, Ravnobedren, Ravnostranen); function Kvadrat(A, B: integer): boolean; function VidTr(A, B, C: integer): TVidTr; implementation function Kvadrat(A, B: integer): boolean; begin if A=B then Result:= true else Result:=false; end; function VidTr(A, B, C: integer): TVidTr; begin if (A<>B) and (B<>C) and (A<>C) then Result:= Raznostranen; if (A=B) or (B=C) or (A=C) then Result:= Ravnobedren; if (A=B) and (B=C) and (A=C) then Result:= Ravnostranen; end; end.Ехааа, ползвате и изброим тип данни! PRO сте направо! :-)
Programata : program project1; uses figuri; var a, b, ha, r:real; begin WriteLn('Vuvedete stranite na kwadrata:'); ReadLn(a); WriteLn('Luceto e :',LiceKvadrat(a):0:2 ); ReadLn; WriteLn('Vuvedete stranite na pravougulnika:'); ReadLn(a); ReadLn(b); WriteLn('Luceto e :',LicePravougulnik(a,b):0:2 ); ReadLn; WriteLn('Vuvedete radiusa na kruga:'); ReadLn(r); WriteLn('Luceto e :',Licekrug(r):0:2); ReadLn; WriteLn('Vuvedete stranata i wisochinata na triugulnika:'); ReadLn(a); ReadLn(ha); WriteLn('Luceto e :',Licetriugulnik(a,ha):0:2 ); ReadLn; end. Modula: unit figuri; interface const pi=3.14; function LiceKvadrat(a:real):real; function LicePravougulnik(a,b:real):real; function Licekrug(r:real):real; function LiceTriugulnik (a,ha:real):real; implementation function LiceKvadrat(a:real):real; begin result:=a*a; end; function LicePravougulnik(a,b:real):real; begin result:=a*b; end; function Licekrug(r:real):real; begin result:=2*pi*r; end; function LiceTriugulnik (a,ha:real):real; begin result:= (a*ha)/2 end; end.Браво, Бубе, много добре!
програмата
program Figuri; uses formuli; var a, b, c, h: integer; begin //проверка за квадрат WriteLn('Vavedete stranite na pravoagalnika (razdeleni s pauzi): '); ReadLn(a, b); WriteLn('Kvadrat li e? ', DaliEKvadrat(a, b)); WriteLn; //проверка за валидни страни на триъгълник WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); WriteLn('Validni li sa? ', ValidniStrani(a, b, c)); WriteLn; //проверка за вида на триъгълника WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); case Proverka(a, b, c) of 1: WriteLn('Triagalnikat e ravnostranen.'); 2: WriteLn('Triagalnikat e ravnobedren.'); 0: WriteLn('Triagalnikat e drug.'); end; if (Proverka2(a, b, c)=3) then WriteLn('Triagalnikat e pravoagalen.'); //лица и обиколки WriteLn('Vavedete strani na pravoagalnika.'); Write('a='); ReadLn(a); Write('b='); ReadLn(b); WriteLn('P=', PnaPravoagalnik(a, b), '; S=', SnaPravoagalnik(a, b)); WriteLn; WriteLn('Vavedete strana na kvadrata.'); Write('a='); ReadLn(a); WriteLn('P=', PnaKvadrat(a), '; S=', SnaKvadrat(a)); WriteLn('Vavedete radius na okrajnostta.'); Write('r='); ReadLn(a); WriteLn('C=', CnaKrag(a):0:2, '; S=', SnaKrag(a):0:2); WriteLn; WriteLn('Vavedete strani na triagalnika i visochinata kam strana a.'); Write('a='); ReadLn(a); Write('b='); ReadLn(b); Write('c='); ReadLn(c); Write('h='); ReadLn(h); WriteLn('P=', PnaTriagalnik(a, b, c), '; S=', SnaTriagalnik(a, h):0:1); WriteLn; ReadLn; end.и модула
unit formuli; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function DaliEKvadrat(a, b: integer): boolean; function ValidniStrani(a, b, c: integer): boolean; function Proverka (a, b, c: integer): integer; function Proverka2 (a, b, c: integer): integer; function PnaPravoagalnik(a, b: integer): integer; function SnaPravoagalnik(a, b: integer): integer; function PnaKvadrat(a: integer): integer; function SnaKvadrat(a: integer): integer; function CnaKrag (r: integer): real; function SnaKrag (r: integer): real; function PnaTriagalnik (a, b, c: integer): integer; function SnaTriagalnik (a, h: integer): real; implementation function DaliEKvadrat(a, b: integer): boolean; begin Result:=(a=b) end; function ValidniStrani(a, b, c: integer): boolean; begin Result:=False; if ((((a+b)>c) and ((a+c)>b)) and ((b+c)>a)) then Result:=True; end; function Proverka(a, b, c: integer): integer; begin if ((a=b) and (a=c)) then Result:=1 else if (((a=b) or (a=c)) or (b=c)) then Result:=2 else if (((a<>b) and (a<>c)) and (b<>c)) then Result:=0; end; function Proverka2(a, b, c: integer): integer; begin if (((a*a+b*b=c*c) or (a*a+c*c=b*b)) or (b*b+c*c=a*a)) then Result:=3; end; function PnaPravoagalnik(a, b: integer): integer; begin Result:=2*(a+b); end; function SnaPravoagalnik(a, b: integer): integer; begin Result:=a*b; end; function PnaKvadrat(a: integer): integer; begin Result:=4*a; end; function SnaKvadrat(a: integer): integer; begin Result:=a*a; end; function CnaKrag(r: integer): real; begin Result:=2*r*3.14; end; function SnaKrag(r: integer): real; begin Result:=r*r*3.14; end; function PnaTriagalnik(a, b, c: integer): integer; begin Result:=a+b+c; end; function SnaTriagalnik(a, h: integer): real; begin Result:=(a*h)/2; end; end.Браво, Боряна, перфектно направена задача! Имам само едно питане и едно предложение:
1) какъв резултат ще ти върне функцията Proverka() ако триъгълникът е най-обикновен?
2) страните се въвеждат повече от веднъж. Може да използваш горните стойности и да спестиш на потребителя още едно въвеждане.
програмата
program Figuri; uses formuli; var a, b, c, h: integer; begin //проверка за квадрат WriteLn('Vavedete stranite na pravoagalnika (razdeleni s pauzi): '); ReadLn(a, b); WriteLn('Kvadrat li e? ', DaliEKvadrat(a, b)); WriteLn; //проверка за валидни страни на триъгълник WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); WriteLn('Validni li sa? ', ValidniStrani(a, b, c)); WriteLn; //проверка за вида на триъгълника if ValidniStrani(a, b, c) then begin case Proverka(a, b, c) of 1: WriteLn('Triagalnikat e ravnostranen.'); 2: WriteLn('Triagalnikat e ravnobedren.'); 0: WriteLn('Triagalnikat e drug.'); end; if (Proverka2(a, b, c)=3) then WriteLn('Triagalnikat e pravoagalen.'); end else begin WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); case Proverka(a, b, c) of 1: WriteLn('Triagalnikat e ravnostranen.'); 2: WriteLn('Triagalnikat e ravnobedren.'); 0: WriteLn('Triagalnikat e drug.'); end; if (Proverka2(a, b, c)=3) then WriteLn('Triagalnikat e pravoagalen.'); end; //лица и обиколки WriteLn('Vavedete visochinata kam strana a.'); //бих направила и конкретен случай за правоъгълник но не се сещам как Write('h='); ReadLn(h); WriteLn('P=', PnaTriagalnik(a, b, c), '; S=', SnaTriagalnik(a, h):0:1); WriteLn; WriteLn('Vavedete strani na pravoagalnika.'); Write('a='); ReadLn(a); Write('b='); ReadLn(b); WriteLn('P=', PnaPravoagalnik(a, b), '; S=', SnaPravoagalnik(a, b)); WriteLn; WriteLn('Vavedete strana na kvadrata.'); Write('a='); ReadLn(a); WriteLn('P=', PnaKvadrat(a), '; S=', SnaKvadrat(a)); WriteLn('Vavedete radius na okrajnostta.'); Write('r='); ReadLn(a); WriteLn('C=', CnaKrag(a):0:2, '; S=', SnaKrag(a):0:2); WriteLn; // двете процедури Parametri(a, b); TriChisla(a, b, c); ReadLn; end.и модула
unit formuli; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function DaliEKvadrat(a, b: integer): boolean; function ValidniStrani(a, b, c: integer): boolean; function Proverka (a, b, c: integer): integer; function Proverka2 (a, b, c: integer): integer; function PnaPravoagalnik(a, b: integer): integer; function SnaPravoagalnik(a, b: integer): integer; function PnaKvadrat(a: integer): integer; function SnaKvadrat(a: integer): integer; function CnaKrag (r: integer): real; function SnaKrag (r: integer): real; function PnaTriagalnik (a, b, c: integer): integer; function SnaTriagalnik (a, h: integer): real; procedure Parametri (a, b: integer); procedure TriChisla (a, b, c: integer); implementation function DaliEKvadrat(a, b: integer): boolean; begin Result:=(a=b) end; function ValidniStrani(a, b, c: integer): boolean; begin Result:=False; if ((((a+b)>c) and ((a+c)>b)) and ((b+c)>a)) then Result:=True; end; function Proverka(a, b, c: integer): integer; begin if ((a=b) and (a=c)) then Result:=1 else if (((a=b) or (a=c)) or (b=c)) then Result:=2 else if (((a<>b) and (a<>c)) and (b<>c)) then Result:=0; end; function Proverka2(a, b, c: integer): integer; begin if (((a*a+b*b=c*c) or (a*a+c*c=b*b)) or (b*b+c*c=a*a)) then Result:=3; end; function PnaPravoagalnik(a, b: integer): integer; begin Result:=2*(a+b); end; function SnaPravoagalnik(a, b: integer): integer; begin Result:=a*b; end; function PnaKvadrat(a: integer): integer; begin Result:=4*a; end; function SnaKvadrat(a: integer): integer; begin Result:=a*a; end; function CnaKrag(r: integer): real; begin Result:=2*r*3.14; end; function SnaKrag(r: integer): real; begin Result:=r*r*3.14; end; function PnaTriagalnik(a, b, c: integer): integer; begin Result:=a+b+c; end; function SnaTriagalnik(a, h: integer): real; begin Result:=(a*h)/2; end; procedure Parametri(a, b: integer); begin WriteLn('Vavedete dtranite na pravoagalnik, razdeleni s pauza.'); ReadLn(a, b); WriteLn('Kvadrat li e? ', DaliEKvadrat(a, b)); WriteLn('P=', PnaPravoagalnik(a, b), '; S=', SnaPravoagalnik(a, b)); WriteLn; end; procedure TriChisla(a, b, c: integer); var h: integer; begin WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); WriteLn('Validni li sa? ', ValidniStrani(a, b, c)); if ValidniStrani(a, b, c) then begin case Proverka(a, b, c) of 1: WriteLn('Triagalnikat e ravnostranen.'); 2: WriteLn('Triagalnikat e ravnobedren.'); 0: WriteLn('Triagalnikat e drug.'); end; if (Proverka2(a, b, c)=3) then WriteLn('Triagalnikat e pravoagalen.'); end else begin WriteLn('Vavede stranite na triagalnika (razdeleni s pauzi): '); ReadLn(a, b, c); case Proverka(a, b, c) of 1: WriteLn('Triagalnikat e ravnostranen.'); 2: WriteLn('Triagalnikat e ravnobedren.'); 0: WriteLn('Triagalnikat e drug.'); end; if (Proverka2(a, b, c)=3) then WriteLn('Triagalnikat e pravoagalen.'); end; WriteLn('Vavedete visochinata kam strana a.'); //бих направила и конкретен случай за правоъгълник но не се сещам как Write('h='); ReadLn(h); WriteLn('P=', PnaTriagalnik(a, b, c), '; S=', SnaTriagalnik(a, h):0:1); WriteLn; end; end.Почти перфектно решение! За да е съвсем, помисли за какво са ти параметрите на процедурите, какъв е резултата на Proverka2() за всеки вид триъгълник и се опитай да избегнеш повторенията. Сега си на 95%, направи ги 100%. :-)
program project1; uses Unit1; var a,b,c,d,e,SK,OK,SP,OP,Str,Otr,hc,r,SOkr,COkr:integer; begin Writeln('Vavedete a i b'); Readln(a,b); ProverkazaKvadrat(a,b,SK,OK,SP,OP); Writeln; Writeln('Vavedi chisla za strani na triugulnik'); Readln(c,d,e); ProverkaTriugulnik(c,d,e); Writeln; Writeln('Vavedi visochinata na triugulnika: '); Readln(hc); VidLiceiObikolkanatriugulnik(c,d,e,Str,Otr,hc); Writeln; Writeln('Vavedi radiusa na okrujnostta'); Readln(r); LiceObikolkanaokrujnost(r,SOkr,COkr); Writeln; Writeln('Vavedete otnovo strani na pravougulnik: '); Readln(a,b); ParametriPravougulnik(a,b,SP,OP); Writeln; Writeln('Vavedete otnovo strani i visochina na triugulnik'); Readln(c,d,e,hc); ParametriTriugulnik(c,d,e,STr,OTr,hc); Readln; end.и модула
unit Unit1; interface function ProverkazaKvadrat(a,b,SK,OK,SP,OP:integer):boolean; function ProverkaTriugulnik(c,d,e:integer):boolean; function VidLiceiObikolkanatriugulnik(c,d,e,Str,Otr,hc:real):real; function LiceObikolkanaokrujnost(r,SOkr,COkr:real):real; procedure ParametriPravougulnik(a,b,SP,OP:integer); procedure ParametriTriugulnik(c,d,e,STr,OTr,hc:integer); implementation function ProverkazaKvadrat(a,b,SK,OK,SP,OP:integer):boolean; begin if a = b then begin SK:=a*a; OK:=4*a; Writeln('Pravougulnika e kvadrat'); Writeln('Liceto na kvadrata e: ',SK); Writeln('Obikolkata na kvadrata e: ',OK); end else begin SP:=a*b; OP:=2*a+2*b; Writeln('Tova ne e kvadrat, a pravougulnik'); Writeln('Liceto na pravougulnika e: ',SP); Writeln('Obikolkata na pravougulnika e: ',OP); end; end; function ProverkaTriugulnik(c,d,e:integer):boolean; begin if (c+d>e) or (c+e>d) or (d+e>c) then Result:=True; if Result = True then Writeln('Chislata ',c,' ',d,' ',e,' sa validni strani na triugulnik') else Writeln('Chislata ',c,' ',d,' ',e,' ne sa validni strani na triugulnik'); end; function VidLiceiObikolkanatriugulnik(c,d,e,Str,Otr,hc:real):real; begin if (c=d) and (c=e) then begin Writeln('Triugulnika e ravnostranen'); Result:=1; OTr:=3*c; STr:=(c*hc) / 2; end; if (c=d) or (c=e) or (d=e) then begin Writeln('Triugulnika e ravnobedren'); Result:=2; OTr:=c+d+e; STr:=(c*hc) / 2; end; if (c*c + d*d = e*e) or (d*d + e*e = c*c) or (c*c + e*e = d*d) then begin Writeln('Triugulnika e pravougulen'); Result:=3; OTr:=c+d+e; STr:=(c*d) / 2; end; if (Result<>1) and (Result<>2) and (Result<>3) then begin Writeln('Triugulnika e raznostranen'); OTr:=c+d+e; STr:=(c*hc) / 2; end; Writeln('Liceto na triugulnika e: ',STr:5:2); Writeln('Obikolkata na triugulnika e: ',OTr:5:2); end; function LiceObikolkanaokrujnost(r,SOkr,COkr:real):real; begin SOKr:=3.14*r*r; COkr:=3.14*2*r; Writeln('Liceto na okrujnostta e: ',SOkr:5:2); Writeln('Obikolkata na okrujnostta e: ',COkr:5:2); end; procedure ParametriPravougulnik(a,b,SP,OP:integer); begin SP:=a*b; OP:=2*a + 2*b; if a = b then Writeln('Pravougulnika e kvadrat'); Writeln('Liceto na pravougulnika e: ',SP); Writeln('Obikolkata na pravougulnika e: ',OP); end; procedure ParametriTriugulnik(c,d,e,STr,OTr,hc:integer); begin VidLiceiObikolkanatriugulnik(c,d,e,Str,Otr,hc); end; end.Ехааа, колко добре форматирани и подробно разгледани случаи! Но функциите не са съвсем оптимални, според мен – твърде много параметри имат и са твърде сложни. Обади ми се да ти обясня какво може да се подобри.