x-kom hosting

Problem z zadaniem z informatyki: pseudojęzyk

Denator
utworzono
utworzono (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 przez Denator

benkowik
komentarz
komentarz

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,

  • Dobra wypowiedź 1
  • 2 tygodnie później...
Denator
komentarz
komentarz (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 przez Denator
benkowik
komentarz
komentarz

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
komentarz

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
komentarz

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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.