Wątek przeniesiony 2017-02-06 12:06 z Edukacja przez DibbyDum.

Zadanie z Pascala - jak jest prawidłowa odpowiedź?

0

Dzień Dobry.

Mam tutaj takie zadanie i nie za bardzo wiem jaka odpowiedź powinna być poprawna:

Po Wykonaniu fragmentu algorytmu:

p := 2;
q := 2;
b := ((q div p + 1) = q);

while b do
begin
  p := p - 1;
  b := ((q div p + 1) = q);
end;

Możliwe odpowiedzi to:

A) p=2q
B) q=2
p
C) q=p
D) p=q-2

Problem pojawia się w linii trzeciej. b nie zostało do niczego przyrównane i nie wiem czy po prostu zadanie jest błędnie sformułowane?

Pozdrawiam

0

zapewne jezeli B bedzie zerem to wtedy warunek petli bedzie nieprawdziwy

0

@fasadin: b nie może być zerem, bo to wartość logiczna. Co prawda Ord(True) to 1, a Ord(False) to 0, jednak z racji bardzo silnego typowania języka, ma to kluczowe znaczenie.


@Grimus23: analizując od początku:

b := ((q div p + 1) = q);

Zmienna b otrzyma wartość True, albowiem zmienne q i p zawierają wartości 2, co da nam 2 div 2 + 1 = 2, operator div ma wyższy priorytet niż operator dodawania, więc najpierw wykonujemy dzielenie bez reszty, co daje 1 + 1 = 2, czyli 2 = 2, czyli prawda.

while b do

b zawiera True, więc warunek jest spełniony i nastepuje pierwsza iteracja pętli.

p := p - 1;

p zawiera wartość 2, odejmujemy 1 i otrzymujemy 1.

b := ((q div p + 1) = q);

Zmienna b otrzymuje wartość False, dlatego że zmienna q zawiera wartość 2, zmienna p została dekrementowana i zawiera wartość 1, co daje nam 2 div 1 + 1 = 2, znów najpierw wykonujemy dzielenie co daje nam 2 + 1 = 2, czyli 3 = 2, co jest nieprawdą.

Skoro zmienna b otrzymuje wartość False, kolejna iteracja pętli nie zostanie wykonana. Po zakończeniu pętli, zmienna q zawiera wartość 2, a zmienna p wartość 1 - prawidłową odpowiedź nie problem wskazać.

0

Dzięki za rozwiązanie.

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