• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

NWD z modulo

+1 głos
1,698 wizyt
pytanie zadane 15 kwietnia 2018 w C i C++ przez Hikori Nowicjusz (180 p.)

Witam,
Na wstępie chciałbym powiedzieć tylko, że dopiero zacząłem swoją przygodę z programowaniem i prosiłbym o wyrozumiałość.
Jeśli chodzi o mój problem, to mianowicie dostałem zadanie aby napisać prosty algorytm, który policzy NWD z modulo dla liczb całkowitych i liczyć ilość kroków wykonanych przez algorytm (pętli). Udało mi się to zrobić, jednak algorytm ma też liczyć NWD dla liczb ujemncych, co niestety mi nie wyszło. Pomimo zastosowania wartości bezwzględnej nadal NWD pokazuje mi ujemny wynik. Czy moglibyście mi pomóc bądź coś podpowiedzieć? Załączam swój algorytm, treść zadania i z góry dziękuję za pomoc.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int abs_liczba1, abs_liczba2,t, kroki=0;// t - zapamietuje dzielnik
        cout <<"Podaj pierwsza liczbe: ";

while (not(cin >> abs_liczba1))
        {
        cout <<"Podaj pierwsza liczbe: ";
        cin.clear();
        cin.sync();
        }
        cin.clear();
        cin.sync();
        cout <<"Podaj druga liczbe: ";

while (not(cin >> abs_liczba2))
        {
        cout <<"Podaj druga liczbe: ";
        cin.clear();
        cin.sync();
        }
        cin.clear();
        cin.sync();

if (abs_liczba1==0 || abs_liczba2==0)
       {
        cout<<"NWD nieokreslone" <<endl;
        return 0;
        }
do
{
    t=abs_liczba2;
    abs_liczba2=abs_liczba1%abs_liczba2;
    abs_liczba1=t;
    kroki++;
}
while (abs_liczba2!= 0);

    cout<<"Najwiekszy wspolny dzielnik: "<<abs_liczba1<<endl;
    cout<<"Ilosc krokow: "<<kroki<<endl;
    return 0;
}

komentarz 15 kwietnia 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)

Pomimo zastosowania wartości bezwzględnej

Gdzie w tym kodzie jest stosowana wartość bezwzględna? 

komentarz 15 kwietnia 2018 przez Hikori Nowicjusz (180 p.)
liczba1=abs(liczba1);
liczba2=abs(liczba2);


Po dodaniu tych dwóch linijek zaczęło działać. Dobrze zrobiłem czy jeszcze coś powinienem zmienić? 

komentarz 15 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)

@Hikori,

Gdzie w tym kodzie jest liczony NWD?

komentarz 15 kwietnia 2018 przez Hikori Nowicjusz (180 p.)
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
for( int licznik = 1; licznik > 0; licznik++ )
{
int liczba1, liczba2, kroki;
{
        cout <<"Podaj pierwsza liczbe: ";
        while (not(cin >> liczba1))
        {
        cout <<"Podaj pierwsza liczbe: ";
        cin.clear();
        cin.sync();
        }
        cin.clear();
        cin.sync();
        cout <<"Podaj druga liczbe: ";

while (not(cin >> liczba2))
        {
        cout <<"Podaj druga liczbe: ";
        cin.clear();
        cin.sync();
        }
        cin.clear();
        cin.sync();
if (liczba1==0 || liczba2==0)
       {
        cout<<"NWD nieokreslone" <<endl;
        return 0;
        }
    else

if (liczba1 == liczba2)
        {
        cout <<"Najwiekszy wspolny dzielnik: "<< liczba1 << endl << endl;
        }

if (liczba1>0 and liczba2==0)
        {
       cout <<"Najwiekszy wspolny dzielnik: "<< liczba1 << endl << endl;
        }
        if (liczba1==0 and liczba2>0)
        {
        cout <<"Najwiekszy wspolny dzielnik: "<< liczba2 << endl << endl;
        }
}
do
{
        if(liczba2>liczba1) liczba2=liczba2-liczba1;
        else liczba1=liczba1-liczba2;
        kroki=log2(liczba1+liczba2);
}
while (liczba2!=liczba1);
        cout <<"Najwiekszy wspolny dzielnik: " <<liczba2 <<endl;
        cout <<"Ilosc krokow: " << kroki << endl;

cout<<endl<<endl;
{
int     liczba1, liczba2,t, kroki=0;// t - zapamietuje dzielnik
        cout <<"Podaj pierwsza liczbe: ";

while (not(cin >> liczba1))
        {
        cout <<"Podaj pierwsza liczbe: ";
        cin.clear();
        cin.sync();
        }
        cin.clear();
        cin.sync();
        cout <<"Podaj druga liczbe: ";

while (not(cin >> liczba2))
        {
        cout <<"Podaj druga liczbe: ";
        cin.clear();
        cin.sync();
        }
        cin.clear();
        cin.sync();

if (liczba1==0 || liczba2==0)
       {
        cout<<"NWD nieokreslone" <<endl;
        return 0;
        }
do
{
    t=liczba2;
    liczba2=liczba1%liczba2;
    liczba1=t;
    liczba1=abs(liczba1);
    liczba2=abs(liczba2);
    kroki++;
}
while (liczba2!= 0);

    cout<<"Najwiekszy wspolny dzielnik: "<<liczba1<<endl;
    cout<<"Ilosc krokow: "<<kroki<<endl;
    return 0;
}
}
}

Proszę ale po dodaniu NWD, nie działa w ogóle program. Zacina się po wpisaniu liczb

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)

A może coś takiego zadziała?

#include <iostream>
using namespace std;

int myGCD(int n1, int n2)
{
    for(;n1 != n2; n1 > n2 ? n1 -= n2 : n2 -= n1);

    return n1;
}

int main()
{
    int n1, n2;

    cout << "Enter two numbers separated by space: ";

    cin >> n1 >> n2;

    cout << "GCD " << n1 << " and "
         << n2 << " -> " << myGCD(n1, n2) << '\n';
}

 

Podobne pytania

0 głosów
1 odpowiedź 4,255 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)
0 głosów
1 odpowiedź 379 wizyt
pytanie zadane 29 maja 2017 w C i C++ przez renticor Nowicjusz (160 p.)
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 21 marca 2017 w SPOJ przez chucksqll Stary wyjadacz (12,930 p.)

93,631 zapytań

142,555 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...