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

Niezrozumiałe polecenie w kodzie (Język C)

VPS Starter Arubacloud
0 głosów
164 wizyt
pytanie zadane 12 listopada 2015 w C i C++ przez Kapi2222 Obywatel (1,220 p.)

Witam.

Próbuje rozwiązać zadanie na kartce bez używania programu. Problem w tym ,że nie mogę zrozumieć jednej linijki kodu:


int proc(int a, int b) 
{ 
    int result; 
    if(b > 0) 
        result = (a / b) * proc(b, a % b); 
    else 
        result =  a; 
    return result; 
} 
int main() { 
  int a=11, b=4; 
  printf("%d", proc(a, b)); 
  return 0; 
}

1. Czym w tym kodzie jest proc(b, a%b)? Jakie działanie mam wykonać w tej linijce kodu? Bo a%b wiem o co chodzi ale jak to całe wyrażenie ma się do wyniku czyli result?

2. Na koniec program wypisze wartość 6 czyli z tego proc(a, b) wybierze a? Dobrze rozumuje? Jezeli nie prosze o poprawienie mnie.

 

Dziekuje i pozdrawiam.

1 odpowiedź

0 głosów
odpowiedź 12 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)

Funkcji printf przekazujesz dwa argumenty, czyli flagę, która określa typ wyświetlanego komunikatu oraz treść komunikatu. A co zwraca funkcja proc? Liczbę int, a że wywołanie jest w argumencie, to nic się nie dzieje - po prostu program wykona przed funkcją printf funkcję proc, która zwróci w danym miejscu wartość i dopiero ona zostanie wykorzystana.

komentarz 12 listopada 2015 przez Kapi2222 Obywatel (1,220 p.)
A skąd wychodzi wynik 6? Wiemy tutaj ,że wykona się ten if i zwroci nam wartosc result. (Problem w tym ,że nie wiem jak go obliczyć ze wzgledu na ten proc bo nwm co z nim zrobic :P) Ale nadal nie wiem co ten result ma wspolnego z funkcja glowna no i skad sie to 6 wzielo :P
komentarz 12 listopada 2015 przez hubot Dyskutant (9,090 p.)
Ten fragment kodu to jest rekurencja. Funkcja wywołuje samą siebie.
komentarz 12 listopada 2015 przez furas Maniak (53,800 p.)

Jak to co zrobić z proc ? Policzyć. To jest ponowne wywołanie funkcji proc(int a, int b) tylko z innymi wartościami. To jest przykład rekurencji - tak jak przy liczeniu silni za pomoca wzoru  n! = n * (n-1)! 

komentarz 12 listopada 2015 przez furas Maniak (53,800 p.)
A `result` dzieki `return` zostanie zwrócony w miejsce gdzie zostało wywołane `proc(a,b)`.

Ponieważ masz tu rekurencję więc będzie wstawiane w miejsce `proc(b, a % b)`. A ostatecznie trafi w miejsce `proc(a,b)` w `printf()`

Podobne pytania

+1 głos
1 odpowiedź 180 wizyt
0 głosów
0 odpowiedzi 95 wizyt
0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 24 października 2016 w C i C++ przez krzysiek12345 Użytkownik (890 p.)

92,961 zapytań

141,922 odpowiedzi

321,158 komentarzy

62,295 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...