Witam,
Dostałem dość prosty program do sprawdzenia pod względem ilości błędów. Nigdy wcześniej z Delphi nie miałem do czynienia. Ale z tego co przeanalizowałem to program nie jest jakiś skomplikowany. Sprawdza po wprowadzonych długościach boków czy trójkąt jest równoramienny, równoboczny albo różnoboczny. Korzysta ze znanego warunku trójkąta:
http://www.womkat.edu.pl/files/standaryzacja/grupa18/kmiljon/warunek_trjkta.html
I z tego co widzę na etapie "matematycznym" nie ma żadnego błędu. Funkcja do sprawdzania boków (checksides) działa ok, ale nie jestem pewny czy czegoś nie pominąłem.
Gorzej z etapem pobierania danych z comboboxa. Jest tam sporo przycinania stringów po indexach i może tam być jakiś wyjątek nie obsłużony. Na razie dopatrzyłem się tylko jednego błędu. Program nie wywala błędu, kiedy podamy mu w comboboxie więcej parametrów niż 3, przedzielonych przecinkami. Czyli na przykład jak podamy mu 3,4,8,9,1 to weźmie sobie tylko 3 pierwsze parametry i na nich będzie sprawdzać trójkąta.
Będę wdzięczny za udzielenie pomocy.
unit Unit3;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm3 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Sides: TComboBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
function checksides (a, b, c : shortint) : string ;
begin
begin
if (c > a+b) or (a > b+c) or (b > a+c) then
begin
checksides := 'Not a Triangle';
form3.edit1.font.color := clRed;
exit;
end;
if (c = 0) or (a = 0) or (b = 0) then
begin
checksides := 'Not a Triangle';
exit;
end;
if (a<>b) and (a<>c) and (c<>b) then
checksides := 'scalene'
else if (a=b) and (a=c) and (c=b) then
checksides := 'equilateral'
else
checksides := 'isoscolese';
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
thesides : array [0..2] of shortint;
s1, s2, t : shortint;
aside : string;
begin
if sides.text = '' then
begin
edit1.text := 'invalid!';
edit1.font.color := clRed;
exit;
end;
s1 := 1; s2 := 1;
for t := 0 to 2 do
begin
while (CompareText(Copy(sides.text,s2,1),',') <> 0) and
(s2 <> Length(sides.text)+1) do
s2 := s2 + 1;
thesides[t] := StrtoInt(Copy(sides.text,s1,s2-s1));
s2 := s2 + 1; s1 := s2;
end;
edit1.text := checksides(thesides[0],thesides[1],thesides[2]);
end;
end.