Snark13 » 24 май 2005, 14:30
Что касается первой задачи, то решение может быть следующим:
Код: Выделить всё
procedure Piphagor(N:Integer);
var a,b,c,c2:Integer;
begin
if N<=0 then
begin
WriteLn('N<=0');
Exit;
end
for a:=1 to N do
for b:=a to N do
begin
c2:=sqr(a)+sqr(b);
c:=Round(sqrt(c2));
if (sqr(c)=c2) then
writeln('a=',a,', b=',b,', c=',c);
end;
end;
Для второй задачи, решение "в лоб" может быть следующим:
Код: Выделить всё
procedure Delitel(N:Integer);
var M,i,X:Integer;
S:string;
begin
if N<=0 then
begin
WriteLn('N<=0');
Exit;
end;
M:=0; //Сюда будет записана сумма цифр
S:=IntToStr(N); //строковое представление числа
for i:=1 to Length(S) do
M:=M+StrToInt(S[i]);
X:=1; //Делитель, который мы ищем
for i:=1 to Round(M/2) do
if (M mod i)=0 then
X:=i;
if X=1 then
WriteLn('НЕТ') //Получили простое число, делителей нет
else
WriteLn('Делитель=',X);
end;
Вопрос об оптимальности данных решений не поднимался
Совместимость с чистым Pascal не гарантируется, теститровалось консольное приложение в Delphi
Что касается первой задачи, то решение может быть следующим:
[code]
procedure Piphagor(N:Integer);
var a,b,c,c2:Integer;
begin
if N<=0 then
begin
WriteLn('N<=0');
Exit;
end
for a:=1 to N do
for b:=a to N do
begin
c2:=sqr(a)+sqr(b);
c:=Round(sqrt(c2));
if (sqr(c)=c2) then
writeln('a=',a,', b=',b,', c=',c);
end;
end;
[/code]
Для второй задачи, решение "в лоб" может быть следующим:
[code]
procedure Delitel(N:Integer);
var M,i,X:Integer;
S:string;
begin
if N<=0 then
begin
WriteLn('N<=0');
Exit;
end;
M:=0; //Сюда будет записана сумма цифр
S:=IntToStr(N); //строковое представление числа
for i:=1 to Length(S) do
M:=M+StrToInt(S[i]);
X:=1; //Делитель, который мы ищем
for i:=1 to Round(M/2) do
if (M mod i)=0 then
X:=i;
if X=1 then
WriteLn('НЕТ') //Получили простое число, делителей нет
else
WriteLn('Делитель=',X);
end;
[/code]
Вопрос об оптимальности данных решений не поднимался :D
Совместимость с чистым Pascal не гарантируется, теститровалось консольное приложение в Delphi