algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Rozszerzony algorytm Euklidesa - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 12
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 25 kwietnia 2006 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Euklides_rozsz - Delphi/Euklides_rozsz_d.dpr:
program Euklides_rozsz_d;
{$APPTYPE CONSOLE}
uses
  SysUtils;

//
// Rozszerzony algorytm Euklidesa
//
// www.algortym.org
// (c)2006 Tomasz Lubinski
//

var
   r, a, q, b : Integer;
   x, x1, x2 : Integer;
   y, y1, y2 : Integer;
   nwd_a, nwd_b, nwd : Integer;

begin
   //get all data
   writeln('Podaj pierwsza liczbe');
   readln(nwd_a);

   writeln('Podaj druga liczbe');
   readln(nwd_b);

   // a must be greater than b
   if (nwd_b > nwd_a) then
   begin
      nwd := nwd_b;
      nwd_b := nwd_a;
      nwd_a := nwd;
   end;

   
   //initialize a and b
   a := nwd_a;
   b := nwd_b;

   //initialize r and nwd
   q := Trunc(a/b);
   r := a - q*b;
   nwd := b;
   
   //initialize x and y
   x2 := 1;
   x1 := 0;
   y2 := 0;
   y1 := 1;
   x := 1;
   y := y2 - (q-1)*y1;
   
   while (r <> 0) do
   begin
      a := b;
      b := r;
      
      x := x2 - q*x1;
      x2 := x1;
      x1 := x;

      y := y2 - q*y1;
      y2 := y1;
      y1 := y;      

      nwd := r;
      q := Trunc(a/b);
      r := a - q*b; 
   end;

   
   //present results
   writeln('NWD(' + IntToStr(nwd_a) + ', ' + IntToStr(nwd_b) + ') = ' + IntToStr(nwd) + ' = ' + IntToStr(x) +
           ' * ' + IntToStr(nwd_a) + ' + ' + IntToStr(y) + ' * ' + IntToStr(nwd_b));

   if (nwd = 1) then
     writeln(IntToStr(nwd_b) + ' * ' + IntToStr(y) + ' mod ' + IntToStr(nwd_a) + ' = 1');

   readln;
   
end.

Dodaj komentarz