БлогNot. Бред пьяного ёжика :)

Бред пьяного ёжика :)

Нечасто получаешь сообщения бредовей. Человека интересовало, почему "-3,4 даёт -3,1, а -4,3 остаётся без изменений, 4,-3 при этом преобразуется в 1,-3, а 3,-4 тоже без изменений."

На самом деле нетрудно описать словами, что делает этот алгоритм. Но надо ли? :)

procedure f(var x,y:integer);
begin
 repeat
  if (y<x) and (y<>0) then x := x mod y
  else if (x<y) and (x<>0) then y := y mod x
  else break;
  if (y<>0) and (x=x mod y) or (x<>0) and (y=y mod x) then break;
 until (x=0) or (y=0) or (y=x);
end;

var x,y,x1,y1,n:integer;
begin
 n:=0;
 for y:=-10 to 10 do begin
  for x:=-10 to 10 do begin
    x1:=x; y1:=y; f(x1,y1);
    write (x,',',y,': ',x1,',',y1,#9);
     inc(n);
    if n>3 then begin n:=0; writeln; end;
  end;
 end;
end.

Речь-то шла о реализации алгоритмов НОД и НОК для пары целых чисел, найти человеческие реализации на Си можно вот здесь, а на Паскале, при сохранении имеющегося теста, они будут выглядеть следующим образом:

function nod (x:integer; y:integer):integer;
var n:integer;
begin
 if y=0 then n:=x
 else n:=nod(y, x  mod y);
 nod:=n;
end;

function nok (x:integer; y:integer):integer;
begin
 nok:= x div nod(x,y)*y;
end;

var x,y,x1,y1,n:integer;
begin
 n:=0;
 for x:=-10 to 10 do 
  for y:=-10 to 10 do 
   if x<>y then begin
    write (x,',',y,': ',nod(x,y),',',nok(x,y),#9);
    inc(n);
    if n>3 then begin n:=0; writeln; end;
 end;
end.

Кстати, выполнить онлайн несложный паскаль-код по-прежнему можно вот тут - уже нельзя, но есть другие онлайн-IDE.


теги: алгоритм маразм pascal

18.01.2016, 11:24; рейтинг: 4193