Stefan Sokołowski, Podstawy
programowania
LABORATORIUM 5
Zadanie 0:
Proszę uważać (i w razie potrzeby przerywać pytaniami) w
trakcie prezentacji na temat walki z pluskwami. Prezentowane slajdy dostępne są
tutaj; a w postaci do przeglądania
lub drukowania — tutaj.
Tutaj znajduje się demonstrowany program z
błędami.
Proszę dokończyć proces ,,odpluskwiania'' tego programu. Oczywiście
konieczne będzie przetestowanie go w różnych warunkach -- dla
parzystej lub nieparzystej liczby danych, dla danych zerowych,
ujemnych, itp. Zapewne okaże się, że jeszcze kilka rzeczy wymaga
poprawienia; proszę wprowadzić konieczne poprawki.
Zadanie 1:
W programie z zad.0 wystąpiły dwa rodzaje pętli:
W prawej pętli (czyli
pętli do) komenda S
(czyli ciało pętli) wykona się co najmniej jeden raz
niezależnie od warunku S. W lewej pętli (czyli
pętli while)
komenda S może ani razu się nie wykonać, jeśli od razu przy
pierwszym sprawdzeniu warunek W jest fałszywy.
Proszę wyrazić pętlę do przy
pomocy pętli while. To
znaczy, tak skonstruować fragment programu zawierający warunek
logiczny W oraz komendę S, żeby dawał ten sam efekt co
pętla do, ale nie zawierał
pętli do a tylko
pętlę while:
do { S } while ( W )
≡podać równoważne komendy
Zadanie 2:
W języku C występuje jeszcze jeden rodzaj pętli --
pętla for. Najczęściej
używane są takie dwa jej rodzaje:
wstępująca:
for (i=a; i<b; i++) { S }
≡
i=a; while (i<b) { S i++; }
zstępująca:
for (i=b-1; i≥a; i--) { S }
≡
i=b-1; while (i≥a) { S i--; }
przy czym a i b to są wyrażenia o wartościach
całkowitych (najczęściej, ale nie koniecznie, liczby całkowite albo
zmienne całkowite); a i jest zmienną całkowitą --
t.zw. indeksem pętli. Komenda S może zależeć od tego
indeksu, ale nie powinna go zmieniać(to nie jest zabronione regułami
języka C, ale złamanie tej zasady prowadzi do bardzo złych
programów). Najczęściej stosuje się te pętle do
wykonywania tej samej czynności kolejno dla wszystkich wartości
całkowitych i, takich że
a ≤ i < b .
Proszę uruchomić program, który bez użycia
pętli while, a za to z
pętlą for
wczyta liczbę naturalną n,
wczyta n liczb rzeczywistych,
wyświetli średnie arytmetyczną, geometryczną i harmoniczną tych
liczb rzeczywistych.
Zadanie 3:
Uruchomić program, który bez użycia
pętli while, a za to z
pętlą for
wczyta liczbę naturalną n,
wczyta n liczb rzeczywistych,
wyświetli największą z wczytanych liczb
(por. zad.4 z lab.3).
Zadanie 4:
Napisać program, który przy użyciu
pętli for (i bez pętli
innych rodzajów) narysuje gwiazdkami trójkąt równoramienny o podanej
przez użytkownika nieparzystej podstawie p; i o
wysokości (p+1)/2. Jeśli użytkownik poda parzystą lub
niedodatnią podstawę, to program powinien zgłosić błąd.
Na przykład:
podstawa = 3 :
podstawa = 11 :
*
***
*
***
*****
*******
*********
***********
Oczywiście można zagnieżdżać
pętlę for w innej
pętli for.
Zadanie 5 domowe:
Proszę napisać program, który
wczyta dwie liczb naturalne k i w,
wydrukuje całą stronę wizytówek (por. zad.1 z lab.1) w w wierszach i k kolumnach
Na przykład dla k=3 i w=8 strona wydruku powinna wyglądać mniej
więcej tak:
Oczywiście program powinien poprawnie działać dla dowolnych k
i w, nie tylko dla 3 i 8. I tego przykładowego ,,Pawła
Nowaczyka'' proszę zastąpić danymi własnymi; mogą być nieprawdziwe
(zmyślone).