• 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!

0 głosów
471 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 (282,600 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 (282,600 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 (282,600 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,603 wizyt
pytanie zadane 6 stycznia 2021 w Algorytmy przez monia79wawa Nowicjusz (190 p.)
0 głosów
1 odpowiedź 221 wizyt
0 głosów
1 odpowiedź 696 wizyt

93,633 zapytań

142,558 odpowiedzi

323,058 komentarzy

63,141 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
...