Pascal - zadanie

0

Prosiłbym o pomoc w tym zadaniu.
Ile razy zostanie wykonana instrukcja while: n:=8; while n>0 do n:=n div 2; Zapisz kolejne etapy analizy.

Pętla WHILE DO jest wykonywana aż warunek nie będzie spełniony,tak?
Czyli póki n będzie większe od 0 to będzie ta pętla wykonywana.
"Div" to dzielenie całkowite. Czyli n będzie większe od zera dopóki n:=(liczby mniejsze lub równe 2) div 2 bo wtedy n będzie równe lub mniejsze od 0.
Czy dobrze myślę? Ile razy zostanie wykonana ta instrukcja?

0

8 4 2 1 0

0

ehh... Ja kompletnie nie umiem Programowania więc gdybyś był na tyle miły i powiedział jak to zrobiłeś to było by dobrze.

0

To zadanie wydaje mi się bez sensu. While n>0 do n:=n div 2 czyli while 8>0 do 8:=4 bo przecież n to 8 czyli nie mogę podłożyć nic innego pod n? czyli że pętla wykona się tylko raz? Za dużo jest tu tych "n" i się gubię, nie wiem czy każde to "n"' to 8 czy co?

0

Źle myślisz.

N := 8;

While (N > 0) Do
 N := N div 2;
While (8 > 0) Do
  N := 8 div 2; // N = 4
While (4 > 0) Do
  N := 4 div 2; // N = 2
While (2 > 0) Do
  N := 2 div 2; // N = 1
While (1 > 0) Do
  N := 1 div 2; // N = 0

0 > 0 jest teraz fałszem = wychodzimy z pętli.

Najlepiej byłoby, jakbyś sobie pod debuggerem podejrzał, co się po kolei dzieje z kodem i zawartością zmiennej.

0

No tak, ale ja nie mogę chyba pod n podkładać sobie co chce i kiedy chce, bo skoro bym mógł to by od mnie zależało ile razy będzie wykonywana pętla. Czyli odpowiedzią jest że pętla wykona się 3 razy czy że pętla będzie się wykonywała dopóki n będzie większe lub równe 2?

0

Nie podkładasz sobie co chcesz i kiedy chcesz - wyraźnie masz zaznaczony przebieg algorytmu.

Może zapis słowny Ci pomoże:

1.Niech `N` będzie liczbą całkowitą.
2.Ustaw `N` na `8`.
3.Podziel `N` przez `2`
4.Jeżeli `N` jest większe od zera, przejdź do punktu trzeciego.
5.Koniec!

Czyli odpowiedzią jest że pętla wykona się 3 razy...

Pętla wykona się cztery razy - przecież ładnie ponumerowałem w moim poście powyżej.

... czy że pętla będzie się wykonywała dopóki n będzie większe lub równe 2?

czo?

Pierwsza odpowiedź zakłada, że N jest równe 8 - wtedy pętla wykona się cztery razy.
W przypadku ogólnym (gdy z góry nie znamy N), można powiedzieć, że pętla będzie się wykonywać, dopóki N jest większe od zera.

2
Proximite napisał(a)

Ale czemu pod "n" trzeba podłożyc akurat 8,4,2,1 skoro możesz podłożyć wszystkie całkowite? O to mi chodziło.

Proximite napisał(a)

Ile razy zostanie wykonana instrukcja while: n:=8; while n>0 do n:=n div 2; Zapisz kolejne etapy analizy.

Myślisz czasem..?

1 użytkowników online, w tym zalogowanych: 0, gości: 1