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

Problem z zadaniem w języku C

Object Storage Arubacloud
0 głosów
163 wizyt
pytanie zadane 19 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

Witam, mam do rozwiązania zadanie z języka C, natomiast nie wiem jak się za nie zabrać. Czy mógłby mi ktoś rozjaśnić, o co w nim chodzi? :) Oto treść:

Podaj wartości, które zostaną wyświetlone na ekranie w wyniku wykonania poniższego programu. Zachować kolejność i format wydruku.

#include <stdio.h> 
void f(int n){ 
int x=0; 
static int y=1; 
--y; x+=y; 
if (n < 4) f(n+2); 
printf ("n=%d \t x=%d \t y=%d \n", n, x, y); 
} 

int main(void){ 
f(0); 
return 0; 
}

 

Z góry dziękuję!

1 odpowiedź

+2 głosów
odpowiedź 19 sierpnia 2022 przez SzkolnyAdmin Szeryf (86,360 p.)
wybrane 19 sierpnia 2022 przez benny13
 
Najlepsza
Wywołujesz funkcję f z argumentem 0. Weź kartkę i po kolei wypisuj wartości zmiennych w funkcji oraz wydruki. Zauważ, ze funkcja jest rekurencyjna, a jedna ze zmiennych statyczna.

Otrzymane przez ciebie wydruki skonfrontuj z programem, czyli odpal w wybranym środowisku.
komentarz 19 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Dziękuję za odpowiedź :) Próbowałem tak robić, natomiast wyniki na kartce, w porównaniu w programem wyszły w odwrotnej kolejności, czy jest to spowodowane tym, że funkcja jest rekurencyjna? :)
1
komentarz 19 sierpnia 2022 przez Oscar Nałogowiec (29,290 p.)
Może tak być, zwróć uwagę, że "wynik" funkcji jest wypisywany po wywołaniu rekurencyjnym, czyli najpierw woła się rekurencyjnie ileś tak razy, a potem kolejno przed wyjściem z każdego poziomu rekurencji są wypisywane wyniki - czyli będą tak trochę odwrotnie.
komentarz 19 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Dziękuję za rozjaśnienie :) Jeszcze trochę przeanalizuję co i jak i myślę, że zrozumiem to.
2
komentarz 19 sierpnia 2022 przez SzkolnyAdmin Szeryf (86,360 p.)

@benny13, tak, ponieważ drukowanie odbywa się podczas ściągania danych ze stosu. Instrukcja w linii 6 powoduje wywołanie funkcji i pominięcie drukowania. Dopiero, gdy n = 4 warunek jest fałszywy i następuje drukowanie w odwrotnej kolejności (n=4, n=2, n=0). kolejne wartości zmiennych x i n są zapamiętane na stosie, a zmienna y jest statyczna - obowiązuje ostatnia wartość.

1
komentarz 19 sierpnia 2022 przez benny13 Obywatel (1,150 p.)
Dziękuję!! Bardzo mi ten komentarz pomógł, już wiem co i jak.
1
komentarz 19 sierpnia 2022 przez SzkolnyAdmin Szeryf (86,360 p.)
Miło mi, że mogłem pomóc. Powodzenia!

Podobne pytania

0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 8 września 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
0 odpowiedzi 174 wizyt
pytanie zadane 5 września 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
0 odpowiedzi 139 wizyt
pytanie zadane 17 marca 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

92,540 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 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!

...