Semantyka i weryfikacja programów/Ćwiczenia 7

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Semantyka bezpośrednia instrukcji. Konstrukcje iteracyjne.

Pętle while i repeat

Ćwiczenie 1

Zdefiniuj semantykę denotacyjną następującego języka:

Pętla polega na wykonaniu instrukcji i, a następnie wyliczeniu warunku logicznego b. Jeśli warunek jest prawdziwy, wykonanie pętli kończy się, w przeciwnym razie powracamy do wykonania instrukcji i.

Pętla for

Ćwiczenie 2

Rozszerzmy język z poprzedniego zadania o instrukcję:

Wykonanie takiej pętli polega na:

  1. Wyliczeniu wartości wyrażenia .
  2. Przypisaniu wartości na zmienną .
  3. Wyliczeniu wartości wyrażenia .
  4. Jeśli , to pętla kończy się.
  5. W przeciwnym razie:
    • Wykonujemy instrukcję .
    • Zwiększamy zmienną o 1.
    • Powracamy do punktu 3.

Zauważmy, że wyrażenie jest tu wyliczane tylko raz, ale oblicza się przy każdym obrocie pętli.


Rozwiązanie


Ćwiczenie 3

Zmieńmy semantykę instrukcji for z poprzedniego zadania tak, aby oba wyrażenia obliczały się tylko raz. Tym razem wyliczenie pętli polega na:

  1. Wyliczeniu wartości wyrażenia .
  2. Przypisaniu wartości na zmienną .
  3. Wyliczeniu wartości wyrażenia .
  4. Jeśli , to pętla kończy się.
  5. W przeciwnym razie:
    • Wykonujemy instrukcję .
    • Zwiększamy zmienną o 1.
    • Powracamy do punktu 4.


Rozwiązanie


Ćwiczenie 4

O pętli for można jednak myśleć jeszcze inaczej. Można wymagać, aby wszelkie zmiany wartości zmiennej sterującej wewnątrz wykonania pętli nie miały wpływu na liczbę iteracji tej pętli. Przykładowo przy semantyce z poprzedniego zadania pętla:

for x := 1 to 10 do 
  x:= x + 1;
  y:= y + x;

wykonuje się pięć razy, a zmienna jest zwiększana łącznie o 2+4+6+8+10. Jeśli uznamy, że zmiany zmiennej wewnątrz pętli nie wpływają na liczbę iteracji, to pętla wykona się 10 razy, a zmienna zostanie zwiększona o 2+3+4+5+6+7+8+9+10+11. Zdefiniuj taką semantykę.


Rozwiązanie


Ćwiczenie 5

W języku C pętla for ma następującą postać:

Jej wykonanie polega na:

  1. Wykonaniu instrukcji .
  2. Wyliczeniu wartości wyrażenia .
  3. Jeśli wyrażenie wylicza się do fałszu, to pętla kończy się.
  4. W przeciwnym razie:
    • Wykonujemy instrukcję .
    • Wykonujemy instrukcję .
    • Powracamy do punktu 2.


Rozwiązanie