• 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,106 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ź 578 wizyt
pytanie zadane 15 stycznia 2022 w Assembler przez DzikieHarce Użytkownik (690 p.)
0 głosów
1 odpowiedź 3,818 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)
0 głosów
1 odpowiedź 249 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...