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

Pisze algorytm Euklidesa, coś się nie liczy, dzięki za znalezienie błędu, pozdrawiam!

Aruba Cloud - Virtual Private Server VPS
0 głosów
291 wizyt
pytanie zadane 22 listopada 2020 w C i C++ przez BedrisK Użytkownik (600 p.)
edycja 22 listopada 2020 przez BedrisK
#include <iostream>

using namespace std;

int main ()
{
          int n, i, w=0, r;
          double b, a[10];
          cout << "Program policzy nwm podanych liczb przez ciebie." << endl;
          cout << endl << "Podaj z ilu liczb wyliczysz nwd: ";
          cin >> n;

          if (n>=0)
          {
                    for (i=1; i<=n; i++)
                    {
                              cout << "Podaj liczbe " << i << ": ";
                              cin >> a[i];
                    }
                    b=a[0];

                    for (i=0; i<n; i++)
                    {
                              while (a[i]!=0)
                              {
                                        r=w%a[i];
                                        w=a[i];
                                        a[i]=r;
                              }
                              w=a[i];
                    }
                    cout << "Nwd wynosi: " << b << endl;
          }
}

 

komentarz 22 listopada 2020 przez BedrisK Użytkownik (600 p.)
Mój problem polega na tym że w algorytmie jest błąd gdzie jest pętla while w pętli for, ni rozumiem tegobłędu, czy ktoś pomoże?
1
komentarz 22 listopada 2020 przez Wiciorny Ekspert (279,870 p.)
while (a[i]!=0)  a[i]  nie spełnia tego warunku gdyż dla a[0] przez cały program masz 0,
Ponieważ pierwsza funkcja zaczyna się od i=1 ... więc a[1]
komentarz 22 listopada 2020 przez BedrisK Użytkownik (600 p.)
To jak to zmienić, aby a było podaną liczbą przez użytkownika?

1 odpowiedź

+1 głos
odpowiedź 22 listopada 2020 przez Wiciorny Ekspert (279,870 p.)
edycja 22 listopada 2020 przez Wiciorny
 b=a[0];

w takim razie skoro wczytujesz do indeksu tablicy o nr 1, dlaczego przypisujesz do b=  "nic"?
 

 for (i=1; i<=n; i++)
  cin >> a[i];   // tutaj jest a[1]

Potem wykonujesz działania, KTÓRE GENERALnie w pętli wille mają zaczynać się od warunku 

while (a[i]!=0) // tutaj masz a[0] którego nigdy nie inicjalizujesz bo poprzednia iteracja leci od 1 
A wczytujesz dane do tablicy dla indeksu od 1...n 

który nigdy nie jest spełniony... bo  u Ciebie wczytanie zaczyna sie od 1 indeksu a nie zerowego. 

 a na końcu zwracasz 
 

cout << "Nwd wynosi: " << b << endl;

gdzie stan "B" wcale nie jest zależny od tego co się wykonało a przypisałeś mu raz jedną wartość 

 b=a[0];

Przy okazji, nie bardzo rozumiem twoj algorytm... skoro z modulo A.Euklidesa mniej więcej wygląda tak 
 

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

 

komentarz 22 listopada 2020 przez BedrisK Użytkownik (600 p.)
Ok, b ma być wynikiem, więc jaką mam tam liczbę przypisać
1
komentarz 22 listopada 2020 przez Wiciorny Ekspert (279,870 p.)

jeśli to pisałeś to w takim razie, dlaczego wykonujesz operacje...  w pętli while, a nie używasz zmiennej która ma być wynikiem, nawet rezultatu operacji nie przypisałeś? 

może wypadaloby obliczenia przypisać do zmiennej b ? :) potem ją wypisać  np jeśli rezultatem jest w=a[i];

to należało by b=w;

komentarz 22 listopada 2020 przez BedrisK Użytkownik (600 p.)
a jak poprawić ten algorytm, bo za bardzo nie rozumie?
komentarz 22 listopada 2020 przez BedrisK Użytkownik (600 p.)

@Wiciorny, ok, wykonuje operacje w pentli while, aby policzyć nwd z liczb ktore poda użytkownik, zminną jest przecież a[i], to jak mam wypisać zmienną, te co liczby poda? chyba nie :), spoko sugestia, tylko czy mam to zrobić w pętli while, czy w for? Dzięki że mi próbujesz pomóc!

Podobne pytania

0 głosów
4 odpowiedzi 1,230 wizyt
pytanie zadane 6 stycznia 2021 w Algorytmy przez monia79wawa Nowicjusz (190 p.)
0 głosów
1 odpowiedź 160 wizyt
0 głosów
1 odpowiedź 604 wizyt

93,279 zapytań

142,278 odpowiedzi

322,298 komentarzy

62,599 pasjonatów

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...