Denator utworzono 29 października 2011 utworzono 29 października 2011 (edytowane) Witam, a więc jest taka sprawa, że nie mam pojęcia jak rozwiązać pewne zadanie z informatyki. Szukałem w internecie wszystkiego na ten temat ale nadal nie wiem o co chodzi. Jest to zadanie z ubiegłorocznego konkursu z Informatyki. Przygotowuję się na następny konkurs i chciałbym zrozumieć to. Proszę tylko o wyczerpujące odpowiedzi od obeznanych w tym temacie osób. Zadanie poniżej, prawidłową odpowiedź znam, ale nie potrafię do niej dojść. Dziękuję i pozdrawiam. Poniżej przedstawiony został algorytm, zapisany w pseudojęzyku. Jaki będzie wynik działania dla n=25 i m=15? Podaj (n) Podaj (m) DOPÓKI m>0 WYKONUJ ( r:= reszta z dzielenia n przez m n:=m m:=r ) wynik:=n PISZ (wynik) a) 1 b) 5 c) 15 d) 25 Edytowane 29 października 2011 przez Denator
benkowik komentarz 29 października 2011 komentarz 29 października 2011 Witaj, Zadanie jest proste i nie trzeba znać się na informatyce, żeby je zrobić. Tłumacz od zera to masz krótką lekcje Program, czyli ten algorytm można podzielić na 3 części: 1. Wstęp, pobranie danych: [CODE] Podaj (n) Podaj (m) [/CODE] 2. Obliczenia: [CODE] DOPÓKI m>0 WYKONUJ ( r:= reszta z dzielenia n przez m n:=m m:=r ) [/CODE] 3. Wyświetlenie wyniku działania algorytmu: [CODE] wynik:=n PISZ (wynik) [/CODE] Najważniejsza część to oczywiści druga. Do pętli - bo tak się nazywa część kod cyklicznie powtarzanego aż do momentu kiedy będzie spełniony warunek. W Twoim wypadku warunek to: [CODE]DOPÓKI m>0 WYKONUJ[/CODE] Dane wejściowe to [b]n = 25[/b] i [b]m = 15[/b] Analizując kod i dane dochodzimy do wniosku: 1 wywołanie pętli [code]r := [b]10[/b] [color=#a9a9a9]reszta z dzielenia n przez m[/color] n := [b]15[/b] m := 10 [color=#a9a9a9]z pierwszej linijki wynik[/color][/code] Kod się wykonał raz. Teraz sprawdzamy warunek: [CODE] DOPÓKI m>0 WYKONUJ [/CODE] No jakby nie patrząc m jest większe od zera więc wykonujemy jeszcze raz pętle: [code]r := [b]5[/b] [color=#a9a9a9]reszta z dzielenia 15 przez 10[/color] n := [b]10[/b] m := 5 [color=#a9a9a9]z pierwszej linijki wynik[/color][/code] Warunek dalej nie spełniony. Jedziemy dalej: [code]r := [b]0[/b] [color=#a9a9a9]reszta z dzielenia 10 przez 5[/color] n := [b]5[/b] m := 0 [color=#a9a9a9]z pierwszej linijki wynik[/color][/code] W tym miejscu warunek zostaje spełniony bo [b]m = 0[/b] Ostatnia wartość [b]n = 5[/b] więc wynik to [b]5[/b]. Pozdrawiam, 1
Denator komentarz 9 listopada 2011 Autor komentarz 9 listopada 2011 (edytowane) Dziękuję bardzo za pomoc i dokładne wyjaśnienie! Już teraz wszystko rozumiem, i to jednak nie takie trudne jak się wydawało ;P Przepraszam, że zawracam głowę, ale mam 2 kolejne zadania, tym razem pytające o ilość pętli. Siedzę i myślę, ale jakoś nie mogę pogodzić się z prawidłowymi odpowiedziami zawartymi na karcie odpowiedzi. :/ Oto one: k:=5 POWTARZAJ k:=k-1 AŻ k>4 Ile razy zostanie wykonana pętla: [b]a)nieskończoną ilość razy[/b] b)5 razy c)raz d)ani raz e)3 razy ___________________________________________________________________ k:=10 POWTARZAJ k:=k-1 AŻ k>10 Ile razy zostanie wykonana pętla: a)nieskończoną ilość razy b)5 razy [b] c)1 raz[/b] d)ani raz e)3 razy Bardzo proszę o pomoc, bo kompletnie nie rozumiem. Edytowane 9 listopada 2011 przez Denator
benkowik komentarz 9 listopada 2011 komentarz 9 listopada 2011 Witam, W pierwszym zadaniu odpowiedź jest nieskończenie wiele razy. Dlaczego? Na początku deklarujesz, że [b]k = 5[/b] Wchodzisz do pętli z tą wartością i odejmujesz -1 czyli masz [b]k = 4[/b] Dochodzisz do warunku - wykonaj do momentu [b]aż[/b] k będzie miało wartość większą niż 4. Kiedy taką będzie miało? Nigdy - w pierwszym wywołaniu masz już 4, później 3,2,1......,-100,-101,.... itd. W drugim masz to samo tylko, pętla raz się wykona bo program do niej wejdzie i od razu spełni sobie warunek - ale raz wykona! Pozdrawiam.
Denator komentarz 9 listopada 2011 Autor komentarz 9 listopada 2011 No dobrze, z pierwszym zadaniem bym sobie poradził, ale gdy zobaczyłem drugie i porównałem je, to doszedłem do wniosku że coś jest nie tak. Chodzi o to, że teraz nie rozumiem zadania drugiego. Dlaczego pętla została wykonana raz? Przecież nie został spełniony warunek [b]k>10[/b], bo [b]k-1=9[/b], a 9 na pewno nie jest większe od 10, więc wg. mnie pętla powinna być wykonywana dalej, aż do nieskończoności. Gdzie ja popełniam błąd?
benkowik komentarz 9 listopada 2011 komentarz 9 listopada 2011 Ale według odpowiedzi to jest pętla [b]do-while[/b] czyli nawet jak warunek jest spełniony to pętla się wykona
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.