1 Wielokrotne powtarzanie tych samych operacji Zadanie 1. roszę porównać następujące programy(efekt działania każdego z nich jest takisam). rzykład 1 przedstawia najbardziej typowy zapis, powodujący wykonanie grupy instrukcji określoną liczbę razy(tutaj 7 razy): rzykład 1. for (int i = 0; i <7;++i) oniżej, w przykładzie 2 wykorzystano równoważny zapis z użyciem pętli while. Jest on bardziej rozwlekły i dlatego zwykle w tej sytuacji używamy for. rzykład 2. int i = 0; while (i<7) ++i; Nic nie stoi na przykładzie, aby zastosować odliczanie do zera, jest to bardziej naturalne dla pętli while. Zapis taki może być wygodny, gdy liczba powtórzeń jest wartością pochodzącą z wcześniejszych obliczeń, nie musimy wtedy deklarować kolejnego licznika. rzykład 3. int i = 7; while (i>0) i ; 1 KAIMSLAB2013QHRTFC5
Dekrementację licznika można przenieść do warunku: rzykład 4. int i = 7; while (i >0) Kolejne przykłady zawierają niezalecane elementy. rzykład 5. int i = 7; while (i ) // brzydko, // zapis i>0 lepiej // oddaje intencję programisty // brak nawiasów zmniejsza czytelność // i sprzyja powstawaniu błędów // przy późniejszych modyfikacjach Liczba całkowita interpretowana jest jako wartość logiczna. Dlatego w przykładzie 5 pętla będzie się wykonywać tak długo jak wartość zmiennej i pozostanie niezerowa. Jednak użycie operatora porównania logicznego > poprawia czytelność programu. rzykład 6. for (int i = 7; i >0; i ) 2 KAIMSLAB2013QHRTFC5
W przykładzie 6 licznik zmniejsza swoją wartość. Jest to dopuszczalny zapis równieżwpętlifor,jednakwtymprzypadkuwyglądadziwnie,boniematożadnego uzasadnienia, a jedynie budzi wątpliwości co do intencji programisty. W przykładzie 7 nietypowe jest przeniesienie instrukcji inkrementacji licznika, do warunku, co pogarsza czytelność. rzykład 7. for (int i = 7; i >0; ) Ostatni przykład pokazuje bardzo zwarty zapis, który również nie jest typowy. Nie jest również czytelny, a dodatkowo prowokuje trudny do znalezienia błąd, gdy nie napiszemy średnika(kompilator tego błędu nie zauważy, po prostu wykona w pętli kolejną instrukcję). rzykład 8. for (int i = 7; i >0; cout << Witaj przyjacielu << endl); Zadanie 2. Napisz program, który wypisuje liczby parzyste z zakresu od 2 do 76. Zadanie3. rzeanalizujponiższyprzykład,napiszprogram,którywyświetlazadaną liczbę w postaci sumy potęg liczby 2. rzykład 9. int main() int x; cin >> x; int exp = 0; int rem=x; while (rem%2== 0) rem>>=1; exp++; if (exp>0) cout << x << = << 2ˆ << exp; if (rem>1) cout << <<rem; 3 KAIMSLAB2013QHRTFC5
else cout << x << to liczba nieparzysta << endl; 2 Wybórwielowariantowy Zadanie 4. rzeanalizuj poniższy przykład, uzupełnij program o zliczanie znaków interpunkcyjnych:.,:; rzykład 10. int samogloski = 0; int biale = 0; int inne = 0; int cyfry = 0; char z; while(cin >> noskipws >> z) switch (z) case a : case e : case i : case o : case u : case y : case A : case E : case I : case O : case U : case Y : samogloski++; case 0 : case 1 : case 2 : case 3 : case 4 : case 5 : case 6 : case 7 : case 8 : case 9 : cyfry++; case : case \t : case \n : biale++; default: inne++; cout << Wczytano << endl; cout << samoglosek : << samogloski << endl; cout << cyfr : << cyfry << endl; cout << bialych znakow : << biale << endl; cout << pozostalych : << inne << endl; cout << << endl; 4 KAIMSLAB2013QHRTFC5
rzykład 11. int samogloski = 0; int biale = 0; int inne = 0; int cyfry = 0; char z; while(cin >> noskipws >> z) switch (z) case a : case e : case i : case o : case u : case y : case A : case E : case I : case O : case U : case Y : samogloski++; case : case \t : case \n : biale++; default: if (z>= 0 &&z<= 9 ) cyfry++; else inne++; cout << Wczytano << endl; cout << samoglosek : << samogloski << endl; cout << cyfr : << cyfry << endl; cout << bialych znakow : << biale << endl; cout << pozostalych : << inne << endl; cout << << endl; Zadanie 5. W przykładzie 11 zastąpiono 10 instrukcji case jedną instrukcją warunkową. Było to możliwe, gdyż kody ASCII cyfr są kolejnymi liczbami. odobnie jest dla liter. Wykorzystaj ten fakt i uzupełnij rozwiązanie zadania 4 o zliczanie spółgłosek. Zadanie6. Napiszprogram,którywczytazapisdodawaniadwóchliczbzapisanych trzynastkowo(cyfryodpowiadająceliczbom10,11i12będązapisanejakoa,bic) wykona działanie i wypisze wynik dziesiętnie. Na przykład dla danych: 1A045 + CA76 wypisze 50623. Zadanie7. Czterechgraczy:G 1,G 2,G 3 ig 4 uczestniczywpewnejgrzeplanszowej. Graczenaprzemianrzucająkostkądogry,naktórejwypada:1,2,3,4,5albo6oczy. Zaczyna gracz G1. Każdy z graczy ma jeden pionek stojący początkowo na polu startowym. Wyrzucenie 1 i w następnym ruchu 6 pozwala graczowi wystartować. Liczba oczy uzyskana w kolejnych rzutach oznacza liczbę pól, o które gracz przemieszcza swój pionek. Na planszy, oprócz pola startowego jest X pól. Osiągnięcie ostatniego pola oznacza koniec gry i zwycięstwo gracza, którego pionek osiągnął ostatnie pole. Mając dane rozmiar planszy i wyniki rzutów kostką. rzeprowadź symulację gry. 5 KAIMSLAB2013QHRTFC5
Format danych wejściowych: Najpierw X- rozmiar planszy a następnie w kolejnych wierszach litera M, odstęp i wartość kolejnego rzutu albo litera - żądanie wyświetlania stanu gry. Format danych wyjściowych: DlakażdejliniizawierającejwypisznumerypólzajmowanychprzezgraczyG 1,G 2, G 3 ig 4 oddzielonychodstępami.jeślinastąpikoniecgry,przestańprzetwarzaćdanei wyświetl komunikat: END OF GAME. rzykład Dla danych wejściowych: 5 M5 M6 M2 M3 Odpowiednie dane wyjściowe: 0000 0000 3000 Zadanie8. Danajestgratakajakwzadaniu7,aledodatkowokażdyzgraczyma przypisanedwiediody.dodas i sygnalizuje,czygraczijużwystartował,adiodaw i sygnalizuje, że gracz i przebywa na polu o nieparzystym numerze. Zapamiętaj ich stan wz-zmiennejtypuunsignedcharwporządkus 1 W 1 S 2 W 2 S 3 W 3 S 4 W 4.Doustawiania odpowiednichbitówwzużyjoperatorówbitowych&i. W danych wyjściowych, dla każdej komendy dodatkowo wyświetl binarnie stan rejestru z. rzykład Dla danych wejściowych: 5 6 KAIMSLAB2013QHRTFC5
M5 M6 M2 M3 Odpowiednie dane wyjściowe: 000000000000 000010000000 300011000000 Zadanie9. Danajestgratakajakwzadaniu8,aledodatkowokażdyruch,którykończy się na zajętym polu powoduje, że stojący tam wcześniej pionek trafia z powrotem na pole startowe i dopiero po uzyskaniu sekwencji startowej może się znowu poruszać. 7 KAIMSLAB2013QHRTFC5