W2 Sześć języków, jeden algorytm.

Zaczynamy od rzucenia Cię na głęboką wodę. Poniżej zaprezentowane są funkcje obliczające największy wspólny dzielnik (NWD) dwóch liczb naturalnych. Każda funkcja napisana jest w innym języku. Jeśli nie rozumiesz poniższych przykładów kodu, to bardzo dobrze – ten rozdział ma cię jedynie oswoić z różnymi językami programowania. Nie musisz rozumieć poszczególnych instrukcji, ważne abyś zauważył ogólne różnice i podobieństwa pomiędzy Lispem, Pythonem, Javą, C, PHP i Rubim.

C

   int nwd(int a, int b) {
      int temp;
      while(b != 0) {
         temp = a % b;
         a = b;
         b = temp;
      }
      return a;
   }

LISP

(defun nwd (a b)
(loop
  (if (= b 0) (return a)
    (prog1
      (setq a (mod a b))
      (setq temp a)
      (setq a b)
      (setq b temp)
    )
    )
)

Java

class Arytmetyka {
   static int nwd(int a, int b) {
      int temp;
      while (b!=0) {
         temp = a % b;
         a = b;
         b = temp;
      }
      return a;
   }
}

PHP

   function nwd($a, $b) {
      while ($b) {
         $temp = $a % $b;
         $a = $b;
         $b = $temp;
      }
      return $a;
   }

Python

def nwd(a,b):
   while b != 0:
      a = a % b
      a, b = b, a
   return a

Ruby

def nwd(a, b)
  while b != 0
     a = a.modulo(b)
     a, b = b, a
  end
  return a
end

Odpowiedzi: 4 do “W2 Sześć języków, jeden algorytm.”

  1. npb Says:

    Fajna strona, fajny pomysł… myślisz jednak, że zaczynanie od “Macie tu sześć kodów źródłowych – radźcie sobie sami w zrozumieniu go jest dobrym pomysłem na start ? ;)

    Pozjadało Ci znaczki przy includach w C.

    Pozdrawiam! Będę tu jeszcze zaglądał.

  2. indioteq Says:

    Natrafiłeś na stronę jak była jeszcze w budowie ;)

    Ten kurs programowania jest pionierski jeżeli chodzi o sbosób przedstawiania wiedzy. Jestem zwolennikiem teori, że im wcześniej coś zaczniesz ćwiczyć tym szybciej się tego nauczysz. Dlatego od razu przedstawiam próbki kodu, bez teoryzowania i rozpisywania się gdzie to nie jest konieczne.

  3. npb Says:

    Nie znam się na wszystkich językach programowania, ale przy C popełniłeś imho dwa błędy. Zmienna temp nie została zadeklarowana i brakuje średnika przy returnie. :)
    Może warto pomyśleć o kompilacji wszystkich tych programów? Będziesz miał wtedy pewność, że wszystkie są napisane poprawnie.

    Pozdrawiam! :)

  4. indioteq Says:

    Dzięki za czujność. Zainstalowałem już wszystkie kompilatory i każdy kod będzie sprawdzany przed publikacją, więc nie powinno być więcej błędów składniowych ;)


Dodaj komentarz