Удалить все повторяющиеся результаты массива - PascalABC.NET
Формулировка задачи:
Промаялся уже очень долго, решил написать на форум. Необходимо, чтобы все повторяющиеся результаты массива (ac) удалялись. Вроде задача проста, а решить не могу.
Листинг программы
- uses crt;
- begin
- //Исходные условия
- var ab,bc,d,m,g,h,k:integer;
- var z,f,ac:real;
- k:=0;
- //Пробуем составить цикл подбора задач
- write('Сколько нужно задач? ');
- readln(g);
- write('Введите максимальную длинну AB ');
- readln(d);
- write('Введите максимальную длинну BC ');
- readln(m);
- h:=g*100;
- while k<>g do
- begin
- for var i:=1 to h do
- for var j:=1 to h do
- begin
- ab:=i;
- bc:=j;
- f:=ab*ab+bc*bc;
- ac:=SQRT(f);
- z:=frac(ac);
- if ab<d then
- if bc<m then
- if z=0 then
- begin
- write('При таком ab ',ab,' и bc ',bc,' ');
- write('Гипотенуза равна ');
- writeln(ac);
- k:=k+1;
- if k=g then exit
- end;
- end;
- end;
- end.
Решение задачи: «Удалить все повторяющиеся результаты массива»
textual
Листинг программы
- function SquareRoot(N : Integer) : Integer;
- begin
- var R := 1;
- var Q := 1;
- var D := 1;
- while Q < N do
- begin
- R += 1;
- D += 2;
- Q += D;
- end;
- Result := N = Q ? R : 0;
- end;
- var
- U : array [1..1000, 0..2] of Integer;
- Usize : Integer := 0;
- function Unical(a, b, c : Integer) : Boolean;
- begin
- Result := False;
- for var i := 1 to Usize do
- if (U[i, 0] = a) and (U[i, 1] = b) and (U[i, 2] = c) then
- Exit;
- Usize += 1; U[Usize, 0] := a; U[Usize, 1] := b; U[Usize, 2] := c;
- Result := True;
- end;
- begin
- var aMax := ReadLnInteger('Максимальная длина первого катета a=');
- var bMax := ReadLnInteger('Максимальная длина второго катета b=');
- for var a := 1 to aMax do
- for var b := 1 to bMax do
- begin
- var c := SquareRoot(a*a + b*b);
- if c > 0 then
- if Unical(a, b, c) and Unical(b, a, c) then
- WriteLnFormat('{0}ВІ + {1}ВІ = {2}ВІ', a, b, c);
- end;
- end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д