NWD w C błąd

2011-10-20 23:50
0

Witam napisałem program obliczający nwd 2 liczb tylko że za każdym razem wynik wynosi 0.
Co robie źle?

#include <stdio.h>
#include <stdlib.h>

int nwd(int a, int b)
{
    int nwd=0;
    do
    {
        if (a>b) a=a-b;
        else b=b-a;
    }
    while (a!=b);
    return a;
}

int main()
{
    int a=0,b=0;
    scanf("%d%d",&a,&b);
    printf("%d",nwd(a,b));
    return 0;
}
edytowany 1x, ostatnio: madmike, 2011-10-20 23:50

Pozostało 580 znaków

2011-10-21 00:42
0

http://pl.wikipedia.org/wiki/Algorytm_Euklidesa
tutaj masz gotowca. skopiuj sobie.


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-10-21 00:53
0

Skopiowałem i nadal to samo ;/

#include <stdio.h>
#include <stdlib.h>

int nwd(int a, int b)
{
    int c=0;
    while (b != 0)
    {
          c = a % b;
          a = b;
          b = c;

    }
    return a;
}

int main()
{
    int a=0,b=0;
    scanf("%d",&a);
    scanf("%d",&b);
    printf("%d",nwd(a,b));
    return 0;
}
mi ten kod działa, podaję 9 i 6, zwraca mi 3. - Spine 2011-10-21 01:28
kod działa źle, jeśli liczba z większą wartością bezwzględną jest ujemna, nwd(-12,8)=-4 - bogdans 2011-10-21 07:16
Z założenia ten algorytm jest przeznaczony dla liczb naturalnych^^ - ujemny 2011-10-21 07:44
Zgoda, ale to programista powinien zdecydować co zrobić gdy pojawią się na wejściu liczby ujemne: podrasować program printf("%d",nwd(fabs(a),fabs(b))); lub poinformować, że wejście jest niepoprawne. Wypisanie błędnych wyników jest nie do przyjęcia. - bogdans 2011-10-21 07:59
Skoro autor zawsze dostaje 0, to powinien zmienić kompilator, albo ma wirusa :D - Spine 2011-10-21 09:37

Pozostało 580 znaków

2011-10-22 12:03
0
#include <stdio.h>

int nwd(int a, int b);

int main(int argc, char **argv)
{
    int a=0,b=0;
    printf("Podaj a: ");
    scanf("%d",&a);
    printf("Podaj b: ");
    scanf("%d",&b);
    printf("NWD liczb a i b to %d",nwd(a,b));

    return 0;
}

int nwd(int a, int b)
{
    int c=0;
    while (b != 0)
    {
        c = a % b;
        a = b;
        b = c;
    }
    if(a<0)
    {
        a = -a;
    }

    return a;
}

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0