IPB

Witaj Gościu ( Zaloguj | Rejestruj )



[C++] GCD lub NWD - algorytm Euklidesa i implementacja
Guardian
post 07.03.2006 - 13:28
Post #1


I code in C
******

Grupa: Super Moderatorzy
Postów: 1,470
Dołączył: 18.07.2004
Skąd: Wrocław
Nr użytkownika: 15,059



NWD algorytm Euklidesa w C++

Cytat
Algorytm
dane są dwie liczby naturalne dodatnie a i b
oblicz c jako resztę z dzielenia a przez b
zastąp a przez b, zaś b przez c
jeżeli b = 0, to szukane NWD = a, w przeciwnym wypadku przejdź do 2

Tekst zaciągniety ze strony: http://"http://pl.wikipedia.org/wiki/Algorytm_Euklidesa

Odwzorowanie algorytmu w C++:
Kod
#include <stdio.h>

int LiczNWD (int pierwsza, int druga);

int main()
{
    printf("NWD algorytm Euklidesa");
    printf("Podaj pierwsza liczbe:  ");
    int a;
    scanf("%d", &a);

    printf("Podaj druga liczbe:  ");
    int b;
    scanf("%d", &b);

    printf("NWD tych liczb to %d", LiczNWD(a,b));

    return 0;
}

int LiczNWD (int pierwsza, int druga)
{
   while(druga>0) // Dopóki druga jest różna od zera ( liczby N )
   {
       int bufor;
       bufor = pierwsza % druga; // Działania opisane w algorytmie
       pierwsza = druga;             // Szczególnie ważny operator % zwraca resztęz dzielenia
       druga = bufor;
   }

   return pierwsza;
}


Istnieją również inne metody, przekształceia tego algorytmu, np. taka:
Cytat
Dopóki pierwsza liczba nie jest równa drugiej, wykonuj:
Od wartości większej liczby, odejmij mniejszą liczbę.


Oczywiście złożoność obliczeniowa jest o wiele większa, lecz efekt i działanie są zbliżone.
Kod
include <stdio.h>

int LiczNWD (int pierwsza, int druga); // Deklaracja funkcji

int main()
{
    printf("NWD algorytm Euklidesa");
    printf("Podaj pierwsza liczbe:  ");
    int a;
    scanf("%d", &a);

    printf("Podaj druga liczbe:  ");
    int b;
    scanf("%d", &b);

    printf("NWD tych liczb to %d", LiczNWD(a,b));

    return 0;
}

int LiczNWD (int pierwsza, int druga) // Ciało funkcji
{
   while(pierwsza!=druga) //Pętla kończy działanie, gdy obie strony są równe
   {
       if(pierwsza>druga) // Jeżeli pierwsza jest większa, odejmij od niej drugą
           pierwsza-=druga;
       else // Analogicznie
           druga-=pierwsza;
   }

   return pierwsza; // Zwracana wartość to NWD
}


Zastrzegam sobie praw autorskich do mojego tekstu, i oświadczam, że napisałem go sam, nie kopiując żadnych tekstów ( oprócz cytatów ) i sam wykonałem schematy rysunkowe. Jeżeli ktoś chciałby ten tekst opublikować, proszę wspomnieć o autorze i o kontakt guardian_mcleavy@o2.pl Dziękuję.
Go to the top of the page
 
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



Wersja Lo-Fi Aktualny czas: 08.09.2010 - 22:51