Instrukcje iteracyjne
Pętla for ma postać:
for (inicjalizacja; warunek_pętli; aktualizacja)
treść pętli
Treść pętli to dowolna instrukcja lub blok instrukcji ujęty w nawiasy klamrowe { }.
Wykonanie pętli obejmuje
1. zainicjowanie wartości początkowych,
2. sprawdzenie warunku pętli, czy pętla ma być wykonana,
3. wykonanie instrukcji znajdujących się w treści pętli,
4. aktualizacja wartości.
Rys. Realizacja pętli for
Przykład
Pętla while ma postać:
while (warunek logiczny)
treść pętli
Treść pętli to dowolna instrukcja lub blok instrukcji ujęty w nawiasy klamrowe { }.
Jeżeli warunek logiczny ma wartość true to jest wykonywana treść pętli. Po wykonaniu
treści pętli, program sprawdza warunek logiczny. Jeżeli warunek logiczny będzie miał
wartość false, wykonywanie pętli zostanie przerwane.
Rys. Realizacja pętli while
Przykład
Pętla do ma postać:
do treść pętli
while (warunek logiczny);
Po wykonaniu treści pętli sprawdzany jest warunek logiczny. Przy spełnionym warunku
program ponownie przechodzi do wykonania treści pętli a przy niespełnionym wychodzi z
pętli (wykonuje instrukcję po pętli).
Rys. Realizacja pętli do
Przykład
Instrukcje warunkowe
Instrukcja warunkowa if ma postać:
if (warunek logiczny)
instrukcja
Jeśli warunek jest prawdziwy, to program wykonuje instrukcję (pojedynczą instrukcję lub
blok), natomiast jeśli jest fałszywy - program pomija instrukcję.
Rys. Realizacja instrukcji if
Przykład
Instrukcja warunkowa if else ma postać
if (warunek logiczny)
instrukcja1
else
instrukcja2
Jeśli warunek jest prawdziwy, to program wykonuje instrukcję1 (pojedynczą instrukcję lub
blok), natomiast jeśli jest fałszywy program wykonuje instrukcję2.
Rys. Realizacja instrukcji if else
Przykład
Operatory logiczne
Operator
Znaczenie
!
NOT
&&
AND
||
OR
Operatory sumy i iloczynu logicznego mają priorytet niższy niż operatory relacyjne,
co oznacza, że wyrażenie
x < 1 || x > 42
jest interpretowane jako
(x < 1) || (x > 42)
Operator zaprzeczenia ma priorytet wyższy od operatorów relacyjnych i
arytmetycznych. Dlatego, aby zanegować wyrażenie relacyjne, należy ująć je w nawiasy.
!(x > 0)
Przykład
Wczytanie wartości dodatniej; podanie liczby mniejszej lub równej 0 albo wartości
nieliczbowej - wyjście z pętli.
W przykładzie wykorzystano jedną z własności obiektu cin i operatora >>. Jeżeli wczytanie
danych do zmiennej wartosc się udało, wyrażenie
cin >> wartosc
rzutowane na typ bool, przyjmuje wartość true, w przeciwnym razie (np. gdy podano
wartość nie liczbową dla zmiennej liczbowej) przyjmuje wartość false.
Ćwiczenia
1. Napisz program, który oblicza 1!, 2!, ..., n!, dla n wczytanego z wejścia.
2. Napisz program, który wczytuje ilość wierszy a następnie drukuje piramidkę z
gwiazdek.
Podaj ilosc wierszy: 7
*
***
*****
*******
**********
************
**************
3. Napisz program, który wczyta dwie liczby całkowite i wydrukuje sumę wszystkich
liczb między nimi (z nimi włącznie).
4. Napisz program, proszący o podanie ciągu liczb zakończonego 0. Po każdej liczbie
program powinien wydrukować dotychczasową sumę liczb.
5. Bank oferuje dwa rodzaje lokat:
I. wariant: 10% oprocentowanie stałe (zysk = 10% pierwotnego kapitału),
II. wariant: 5 % opocentowanie składane (zysk = 5% aktualnego stanu lokaty).
Napisz program, który wyznaczy po ilu latach II wariant oszczędzania jest
korzystniejszy od I wariantu oraz wyświetli zestawienie wartości lokat w obu
wariantach.
6. Napisz program, który wczytuje dane z klawiatury aż do znaku @, a następnie
wyświetla te dane z wyjątkiem kropek, przekształcając duże litery w małe i
odwrotnie. Do sprawdzenia czy wczytano małą lub dużą literę i do konwersji
wykorzystaj funkcje znakowe z biblioteki cctype:
islower() - zwraca true, jeśli argument jest małą literą
isupper() - zwraca true, jeśli argument jest dużą literą
tolower() - jeśli argument jest dużą literą funkcja zwraca odpowiadającą jej małą
literę, w przeciwnym razie zwraca niezmieniony argument
toupper() - jeśli argument jest małą literą funkcja zwraca odpowiadającą jej dużą
literę, w przeciwnym razie zwraca niezmieniony argument.
Wczytanie pojedynczego znaku
char znak;
cin.get(znak);