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

program w języku C - ciąg i NWD

Object Storage Arubacloud
0 głosów
2,145 wizyt
pytanie zadane 23 kwietnia 2016 w C i C++ przez karola Nowicjusz (230 p.)
Mam do zrobienia program który wczyta długość ciągu n, jego elementy będące liczbami naturalnymi, a następnie obliczy i wypisze na ekran największy wspólny dzielnik tych n liczb.

I pierwszą część zrobiłam:

int main(){
float n, i;
int tab[100];
printf("Podaj ilosc elementow ciagu\n");
scanf("%f", &n);
printf("Podaj kolejne wartości ciagu: \n");
for(i=1;i<=n;i++){
printf("a[%f]= ", i);
scanf("%f", &tab[i]);

natomiast jak obliczyć z tych liczb NWD...
 

Prosiłabym o pomoc :)

3 odpowiedzi

0 głosów
odpowiedź 23 kwietnia 2016 przez Garniturek Użytkownik (820 p.)
pętla -> sprawdzasz czy dana liczba jest dzielnikem n, potem czy jest dzielnikiem i. Jak jest to zapisujesz jej wartość w zmiennej NWD itd. Pętla się kończy kiedy iterator będzie równy większej z liczb n lub i
komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
tylko czy to nam coś da? dałoby sie porównać n elementów jednoczesnie?
komentarz 23 kwietnia 2016 przez Garniturek Użytkownik (820 p.)
edycja 23 kwietnia 2016 przez Garniturek

Musisz przelecieć po całej tablicy, mniej więcej coś takiego:

for (int i=0; i<tab[0]; ++i)
{
for (int j= 0 j<tab[0]; ++j) 
{
if (tab[j] % i ==0)
NWD = j;
else break;
}
}

Popraw, pokombinuj i będzie cacy :)

 

komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
ok spróbuje :)
komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
chciałabym jeszcze dopytać: jak jest z tym else - break go przerywa? czy tam powinno być coś innego?
komentarz 23 kwietnia 2016 przez Garniturek Użytkownik (820 p.)
else -> dzieje się, kiedy dany element tablicy nie jest podzielny przez dana liczbe i (wiec nie będzie dzielnikiem liczb z tablicy t dana liczba i)

break -> przerywa przebieg tej pętli (no bo nie ma sensu już dalej sprawdzać, skoro wiadomo, że j nie będzie dzielnikiem

Teraz rozumiesz? :)

Poprawiłem tamten kod, był zły (nie mówię, że teraz jest dobry ;))
komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
Skorzystałam z podpowiedzi niżej, aczkolwiek bardzo dziękuje za cierpliwość, w tej wersji cały czas coś mi nie pasowało i gdzies cały czas ja robiłam błąd, ale dziękuje :)
0 głosów
odpowiedź 23 kwietnia 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
komentarz 23 kwietnia 2016 przez Garniturek Użytkownik (820 p.)
przywrócone 23 kwietnia 2016 przez Garniturek
Skopiuje gotowca bez zrozumienia i na co to?
komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
algorytm gdzieś widziałam, aczkolwiek on działa dla dwóch zmiennych :)
komentarz 23 kwietnia 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Skopiuje gotowca bez zrozumienia i na co to?

Rozumiem, że wyjaśnienie na tej stronie to dla ciebie jakiś mega problem by to zrozumieć mechanikę algorytmu?

 algorytm gdzieś widziałam, aczkolwiek on działa dla dwóch zmiennych :)

Robisz  coś na wzór

x = NWD ( tab[1], tab[2] ) 

potem x  = NWD ( x , tab[3] ) itd i otrzymasz prawidłowy wynik 

Puki co nie znalazłem danych by to obaliło

 

komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
Dziękuje bardzo za pomoc :) działa :)
0 głosów
odpowiedź 23 kwietnia 2016 przez mmr0429 Bywalec (2,010 p.)

Znalazłem to do C/C++ na wikipedii

// Funkcja NWD przyjmująca 2 argumenty: a i b typu int – czyli liczby, których NWD chcemy poznać. Funkcja zwraca wartość typu int – czyli żądane NWD(a,b)
int nwd(int a,int b)
{
    int c;                    // Tworzymy zmienną c o typie int
    while(b != 0)             // Tworzymy pętlę działającą gdy b ≠ 0
    {
        c = a % b;              // Zmienna c przyjmuje wartość a modulo b
        a = b;                // Przypisujemy b do a
        b = c;                // Przypisujemy c do b
    }
    return a;                 // Zwracamy a, czyli żądane NWD(a,b)
}

 

komentarz 23 kwietnia 2016 przez karola Nowicjusz (230 p.)
dla dwóch zmiennych znam algorytm, ale tu mamy n zmiennych i nie wiemy ile ich użytkownik poda

Podobne pytania

+1 głos
1 odpowiedź 614 wizyt
pytanie zadane 15 stycznia 2022 w Assembler przez DzikieHarce Użytkownik (690 p.)
0 głosów
1 odpowiedź 3,848 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)
0 głosów
1 odpowiedź 257 wizyt

92,674 zapytań

141,579 odpowiedzi

320,051 komentarzy

62,039 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...