PRI, laboratorium 2
Zakres materiału: Pętle for
, while
, do-while
. Instrukcje sterujące if-else
, switch
, break
, continue
. (5 pkt)
Zadanie 1. Pętle for
, while
, do-while
.
- W katalogu
prm2
utworzyć nowy projekt zad1
i do głównego pliku projektu skopiować zawartość pliku źródłowego zad1.c.
- Jeśli wykonacie poprawnie utworzenie nowego projektu, to pliki tekstowy main.c i wykonywalny ./zad1 są w katalogu ~/prm2/zad1. Do katalogu można przejść komendą cd ~/prm2/zad1 i skompilować program komendą gcc -g main.c -o zad1 -lm, a wykonać ./zad1.
- Aby uzyskać większe litery w edytorze należy wybrać w górnym menu Settings/Editor settings, kliknąć na przycisk Choose przy napisie na górze "This is sample text" i zmienić rozmiar na co najmniej 14.
- Aby uzyskać większe litery i więcej linii w konsoli uruchamianej przez codeblocks należy wybierając w górnym menu Settings/Environment/Terminal to launch console programs wstawić zamiast komendy xterm -T $TITLE -e polecenie xterm -geometry 100x90 -fn 10x20 -T $TITLE -e.
- Zapoznać się ze trzema różnymi sposobami wyznaczania silni liczby całkowitej (linie 15-38).
- Ile razy jest wykonywana zasadnicza instrukcja pętli (linie 18, 27, 36) dla zadanej wartości zmiennej
liczba
?
- Zmodyfikować sposób obliczania silni z wykorzystaniem pętli
for
(linie 15-19), tak aby w każdej iteracji pętli zmienna n
była zwiększana.
- Korzystając z doświadczeń z poprzedniego punktu, napisać program, który oblicza i wypisuje wartości silni dla wszystkich liczb
od 1 do zadanej wartości (program zapisać w osobnym pliku, np.
silnia.c
).
Zadanie 2. Instrukcje sterujące if-else
, switch
, break
, continue
.
- W katalogu
prm2
utworzyć nowy projekt zad2
i do głównego pliku projektu skopiować zawartość pliku źródłowego zad2.c.
- Jeśli wykonacie poprawnie utworzenie nowego projektu, to pliki tekstowy main.c i wykonywalny ./zad2 są w katalogu ~/prm2/zad2. Do katalogu można przejść komendą cd ~/prm2/zad2 i skompilować program komendą gcc -g main.c -o zad2 -lm, a wykonać ./zad2.
- Program implementuje prostą grę, w ktorej zadaniem grającego jest zgadnięcie liczby całkowitej z zakresu 1-10 wylosowanej wcześniej przez komputer.
Każda próba odgadnięcie (zgadywanie można zakończyć w dowolnym momencie wprowadzając liczbę -1) jest komentowana przez program w następujący sposób:
- "Blisko" jeżeli moduł różnicy między strzałem a wylosowaną liczbą jest równy 2.
- "Bardzo blisko" jeżeli moduł różnicy między strzałem a wylosowaną liczbą jest równy 1.
- "Przestrzeliles" jeżeli różnica między strzałem a wylosowaną liczba jest większa od 2.
- "Niedostrzeliles" jeżeli różnica między strzałem a wylosowaną liczba jest mniejsza od -2.
- "Poza zakresem" jeżeli strzał jest poza zakresem 1-10.
- Zapoznać sie ze sposobem działania programu, zwrócić szczególną uwagę na konstrukcję głównej pętli programu (linie 16-70) oraz instrukcję
switch
(linie 38-68).
Kiedy przerywane jest wykonanie głównej pętli programu?
- Korzystając z debuggera (ustawić pułapki na odpowiednich liniach), zapoznać się z działaniem instrukcji
continue
(linia 32) oraz break
(linie 26, 43, 48, 53).
Jaka jest róźnica w działaniu instrukcji break
w lini 26 oraz w liniach 43, 48, 53?
- Zaobserwować, co się wydarzy, gdy zostaną usunięte (najprościej przez wykomentowanie) instrukcje
break
w liniach 43, 48, 53.
- Przepisać instrukcję
switch
(linie 38-68) z wykorzystaniem sekwencji instrukcji if-else
.
Zadanie 3. Zadanie samodzielne.
Grupa A
Napisać i uruchomić program wyznaczający średnią, wartość maksymalną i wartość minimalną ciągu 5 liczb typu float
. Liczby wprowadzane z wykorzystaniem funkcji scanf
.
Przykładowe wyniki działania programu:
Prosze podac 5 liczb oddzielonych spacjami: 10 9 3 7 8
Wartosc srednia: 7.4
Wartosc maksymalna: 10
Wartosc minimalna: 3
Grupa B
Napisać i uruchomić program przelicznika kowty z PLN na kwote w wybranej walucie (EUR, USD lub CHF). Kwota i kod waluty wprowadzane z wykorzystaniem funkcji scanf
. Przy przeliczaniu wykorzystać instrukcję switch
.
Przykładowe wyniki działania programu:
Prosze podać kwote w PLN: 100
Prosze podac kod waluty (1 EUR, 2 USD, 3 CHF): 1
Kwota w EUR: 25