You are on page 1of 0

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.

4a
Wstp do programowania w jzyku C++.
Etapy tworzenia programu:
1. Definicja problemu (specyfikacja).
2. Analiza wymaga i znalezienie odpowiedniej metody rozwizania (opracowanie algorytmu).
3. Implementacja programu (zapis algorytmu w jzyku programowania).
4. Uruchomienie i testowanie programu.
5. Konserwacja programu.
Kod maszynowy to jzyk zrozumiay dla procesora. Polecenia i ich atrybuty s w tym kodzie
reprezentowane poprzez sekwencje liczbowe. Kady typ procesora ma swj wasny kod maszynowy
z list instrukcji, ktre rozumie zatem programy napisane na jeden typ procesora nie mog by
w atwy sposb przeniesione na inny.
Aby uatwi programowanie komputerw, wymylono inne jzyki programowania. Dziel si one na
tzw. generacje:
I generacja kod maszynowy
II generacja jzyk symboliczny, niskiego poziomu (asemblery)
III generacja jzyk wysokiego poziomu (np. Pascal, C, C++, Java)
IV generacja tzw. generatory aplikacji (np. Visual Basic, Delphi)
V generacja jzyki sztucznej inteligencji, najbardziej zblione do jzyka naturalnego (np. PROLOG)
Im wysza generacja, tym jzyk programowania jest bardziej podobny do jzyka naturalnego.
Dziki temu programista moe si bardziej skupi na rozwizywaniu problemu ni na sposobie jego
zapisu.
Lista instrukcji asemblera jest identyczna z list instrukcji procesora w kodzie maszynowym.
Instrukcje w asemblerze maja jednak posta tzw. mnemonikw (krtkich wyrazw zrozumiaych dla
czowieka), a nie sekwencji liczbowych jak w kodzie maszynowym. Zaprogramowanie nawet
najprostszych operacji jest czasochonne, wymaga uycia wielu instrukcji.
mov ax, 0D625h
mov es, ax ; wprowad do rejestru segmentowego ES warto z AX wynoszc D625 szesnastkowo
(54821 dziesitnie)
mov al, 24
mov ah, 0 ; zaaduj do rejestru AX warto 24 (wyzeruj AH starsz powk rejestru AX i zapisz
warto 24 w modszej AL)
int 21h ; wywoaj przerwanie nr 33 (21 szesnastkowo)

Program napisany w asemblerze musi by przed uruchomieniem przetumaczony na kod maszynowy
(asemblacja), proces odwrotny to deasemblacja.
Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Jzyk C++ pozwala na pisanie programw operujcych na instrukcjach do niskiego poziomu, ale
udostpnia te szereg mechanizmw pozwalajcych na programowanie obiektowe, w ktrym
definiuje si wasne typy danych.
Program zapisany w C++ to cig instrukcji zapisanych jedna po drugiej w pliku tekstowym, zwanym
dalej kodem rdowym (pliki o rozszerzeniu cpp). Aby program zapisany w takiej postaci by
zrozumiay dla procesora, musi zosta skompilowany, czyli przetumaczony na kod maszynowy,
w ktrym instrukcje wyraone s przez cig liczb w systemie dwjkowym. Takim tumaczeniem
zajmuje si specjalny program, zwany kompilatorem.
Po skompilowaniu programu powinna nastpi konsolidacja, czyli poczenie programu
z bibliotekami, popularnie zwane linkowaniem od nazwy linker programu, ktry to wykonuje.
Bibliotekami s gotowe zestawy programw, podprogramw i procedur, ktre programista
wykorzystuje piszc wasny program.
Przydatnym narzdziem stosowanym podczas sprawdzania programw jest debuger
(odpluskwiacz), ktry umoliwia m.in. ledzenie wykonywanego programu krokowo, linijka po
linijce (instrukcja po instrukcji).
W literaturze anglojzycznej bd w programie komputerowym nosi nazw bug (owad, robak,
pluskwa) w 1945 r. w czasie poszukiwania przyczyny bdnego dziaania komputera MARK II
okazao si, e wszystkiemu winna jest ma, ktra spowodowaa spicie w przekanikach
elektromagnetycznych.
Struktura programu.
Program w jzyku C++ zbudowany jest z dwch czci:
Cz deklaracyjna,
Cz operacyjna
Cz deklaracyjna obejmuje wszystkie deklarowane elementy programu, ktre mog zosta
wykorzystane w czci operacyjnej.
Cz operacyjna to program gwny, ktry w tym jzyku jest funkcj o nazwie main(). Po
uruchomieniu programu wykonywane s wszystkie polecenia zawarte w funkcji main(). W tej czci
programu korzystamy ze zdefiniowanych lub zadeklarowanych przez nas elementw znajdujcych si
w czci deklaracyjnej.

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Pierwszy program.
#include <iostream>
#include <cstdio>
using namespace std;
main ()
{
cout << Witaj Swiecie!\n;
cout << A to druga linia tekstu <<endl;
cout << A czy to bedzie 3 linia?;
getchar ();
return 0;
}

CZ DEKLARACYJNA
#include <iostream>, #include <cstdio>, using namespace std - dyrektywa preprocesora
(program dokonujcy wstpnego przegldu kodu rdowego program). Deklaracja bibliotek
(czyli plikw nagwkowych), z ktrych korzystamy w programie.
CZ OPERACYJNA
Main (), cout , getchar, return 0.
Program nasz napisany jest w trybie konsolowym (tekstowym). Oznacza to, e po
uruchomieniu programu otwierane jest okno konsoli, w ktrym pojawiaj si wyniki
dziaania programu a nastpnie okno to jest automatycznie zamykane. Gdybymy nie
zastosowali funkcji getchar(), nie zdylibymy obejrze efektu dziaania naszego programu.
Funkcja ta definiowana jest w bibliotece stdio, dlatego w drugiej linii zapisana zostaa
odpowiednia dyrektywa.
W linii trzeciej programu jest zawarta informacja dla kompilatora, e w programie bdzie
wykorzystana przestrze o nazwie std. Uycie jej uatwia dostp do caej biblioteki standardu
C++, ktra jest w niej zadeklarowana. W przypadku pominicia deklaracji przestrzeni nazw
standardowych std operacje wejcia i wyjcia dostpne s dopiero po podaniu nazwy klasy
std, czyli std::cout, std:cin.

Operator << nazywamy operatorem wyjcia, a cout jest identyfikatorem standardowego
wyjcia (najczciej ekranu). Napis ktry jest wywietlany na ekranie, umieszczony jest w
cudzysowie (staa tekstowa, z ang. string).
Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Instrukcja return 0 powoduje, e funkcja main koczy prac z wartoci 0 (dla wikszoci
systemw operacyjnych jest to informacja o pomylnym zakoczeniu programu).
Przechodzenie do nowej linii:
- za pomoc tzw. manipulatora endl
- przez wpisanie znaku nowej linii \n
Umieszczanie komentarzy:
#include <iostream>
/* To jest komentarz na kilka linijek tekstu. Nie wiem co mam tu teraz napisa, bo to tylko
przykad komentarza, ale ju mam drug lini wic kocz */
using namespace std;

// a to jest komentarz, ktry obejmuje tekst do koca linii, np.
#include <iostream> //doczam biblioteki
using namespace std; //deklaruj uycie przestrzeni nazw std

Reasumujc:
#include <iostream> //doczam biblioteki
#include <cstdio>
using namespace std; //deklaruj uycie przestrzeni nazw std
main ()
{
cout << Witaj Swiecie!\n;
cout << A to druga linia tekstu <<endl;
cout << A czy to bedzie 3 linia?;
getchar ();
return 0;
}


Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Podstawowe typy danych.

Podobnie jak w wielu innych jzykach programowania rwnie w C++ kada zmienna ma
swj typ, ktry musi by okrelony przez programist przed pierwszym uyciem zmiennej.
W C++ wystpuje pi podstawowych typw zmiennych:
znak (char)
liczba cakowita (int skrt od integer)
liczba zmiennopozycyjna (float)
liczba zmiennopozycyjna podwjnej precyzji (double)
warto logiczna (bool skrt od boolean)
Inne typy danych utworzone s na podstawie tych piciu typw. Jest w C++ jeszcze szsty typ
oznaczony jako void sucy do deklarowania funkcji, ktrych wynikiem dziaania nie jest
adna warto.

Typy danych rni si pomidzy sob rozmiarem zajmowanej pamici i zakresem wartoci
(wielkoci te zmieniaj si w zalenoci od uytego procesora, kompilatora i systemu
operacyjnego).
Typ Typowy rozmiar w bajtach Minimalny zakres
char 1 -128 127
unsigned char 1 0 255
int 2, 4 lub 8 -32 768 32 767
unsigned int 2, 4 lub 8 0 65 535
short int 2 -32 768 32 767
unsigned short int 2 0 65 535
long int 4 -2 147 483 648 2 147 483 647
unsigned long int 4 0 4 294 967 295
float 4 sze cyfr znaczcych w zapisie
(-3,4E38 3,4E38)*
double 8 dziesic cyfr znaczcych w zapisie
(-1,7E308 1,7E308)*
long double 12 dziesi cyfr znaczcych w zapisie
(-1,2E4932 1,2E4932)*
bool 1 true, false
* przykadowe zakresy (zalene od konfiguracji sprztowo programowej)
Zapis 3,4E38 oznacza 3,410
38


Deklaracja zmiennej to nadanie zmiennej nazwy i okrelenie typu wartoci, jaka bdzie w
niej przechowywana.
Nazwa zmiennej:
nie moe by sowem kluczowym jzyka
pierwszy jej znak musi by liter lub znakiem podkrelenia
pozostae znaki musz by literami, cyframi lub znakami podkrelenia
wielko liter ma znaczenie (licznik i Licznik to dwie rne zmienne!)
Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Bdnymi nazwami zmiennych s np.:
12malp cyfra na pocztku
int sowo kluczowe C++
Ala! wykrzyknik w nazwie
liczba krokow spacja w nazwie

Poprawnymi nazwami zmiennych s np.:
_7krasnali
Int
aLa
liczba_krokow
Archiwum_nr_125

Gdzie naley umieszcza deklaracj zmiennej?
Najwaniejsza zasada zmienn naley zadeklarowa przed jej pierwszym uyciem. Mona
wic deklarowa zmienn przed funkcj main lub bezporednio przed jej pierwszym uyciem.

Wprowadzanie danych do programu.
cin >> a;
Operator >> nazywany jest operatorem wejcia, a cin jest identyfikatorem standardowego
wejcia (najczciej klawiatury).

Instrukcje sterujce instrukcja warunkowa if .. else.
Instrukcje sterujce kieruj przebiegiem wykonywania programu. Pozwalaj one na zmian
kolejnoci wykonywania innych instrukcji zalenie od otrzymywanych wynikw. Bez instrukcji
sterujcych moglibymy pisa tylko programy liniowe, realizujce algorytmy liniowe. Dziki
instrukcjom sterujcym moemy pisa programy realizujce algorytmy rozgazione i
iteracyjne.

Skadnia instrukcji warunkowej if .. else
if (wyrazenie) instrukcja1;

lub
if (wyrazenie) instrukcja1;
else instrukcja2;

W pierwszej postaci instrukcja1 wykona si tylko w wypadku, gdy wyraenie jest spenione.
Kolejne instrukcje programu bd wykonywane niezalenie od wyniku wyraenia.
W drugiej postaci wykona si instrukcja1 lub instrukcja2. Jeli wyraenie jest spenione, to
wykona si instrukcja1, a instrukcja2 nie zostanie wykonana; w przeciwnym wypadku
Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
wykona si instrukcja2, a nie wykona si instrukcja1. Kolejne instrukcje programu wykonaj
si niezalenie od wartoci wyraenia.

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
float a,b,c,d; //deklarowanie zmiennych
cout << "Podaj 1 ocene: ";
cin >> a; // wprowadzimy warto z klawiatury, program zapamita j w zmiennej a
cout << "Podaj 2 ocene: ";
cin >> b;
cout << "Podaj 3 ocene: ";
cin >> c;
d=(a+b+c)/3;
cout << "Srednia tych ocen wynosi: " << d << endl;
if (d>4.75)
cout << "No to pasek :-)";
else
cout << "No to pasek ... na ... :-(";
cin.ignore(); //ignoruje znak ostatnio wprowadzony z klawiatury (ENTER)
getchar();
return 0;
}

Instrukcja moe by pojedyncza lub zoona z kilku instrukcji.
Skoczon liczb instrukcji pojedynczych ujtych w klamry { } nazywamy instrukcj zoon
lub inaczej blokiem instrukcji.


Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Zobaczmy, jak bardzo rni si bd efekty dziaania dwch programw, ktrych kody rni si
tylko jedn par nawiasw klamrowych.

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
int dlugosc;
cout << "Podaj liczbe calkowita ";
cin >> dlugosc;
if (dlugosc>0)
{ //klamra wica kilka instrukcji w blok
cout << endl;
cout << "Podales dodatnia liczbe" << endl;
cout << "Dobrze, bo to ma byc dlugosc odcinka" << endl;
cout << "Narysuje wiec odcinek o dlugosci " << dlugosc;
}
cout << "\n \nDziekuje, koncze dzialanie ...";
cin.ignore();
getchar();
return 0;
} //klamra zamykajca blok instrukcji

Program prosi uytkownika o podanie liczby cakowitej. Jeli podana liczba jest dodatnia, to wykonuj
si wszystkie instrukcje bloku zaznaczonego kolorem niebieskim. Klamry SA jakby spoiwem caoci
instrukcji zoonej, ktra ma zosta wykonana, jeli jest speniony warunek (dlugosc>0).
W przypadku wpisania liczby, ktra nie jest dodatnia, wykona si tylko linia zaznaczona kolorem
zielonym.

Co si zmieni, gdy usuniemy klamry wice kilka instrukcji w jeden blok instrukcji?
Gdy podamy liczb dodatni, to wynik programu bdzie taki sam, jak poprzednio.
Gdy podamy liczb ujemn, to program opuci lini cout << endl; i wykona kolejne linie, bo one nie
dotycz instrukcji warunkowej if.

W unikaniu tego typu bdw bardzo pomocne jest stosowanie wci w pisanym kodzie.
Przejrzysto zapisu i grupowanie instrukcji pomaga w analizie kodu, a w razie
nieprawidowego dziaania programu w znalezieniu bdu.

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Instrukcje warunkowe mog by zagniedane wewntrz siebie.

Jeli do jutra wyzdrowiej, to
jeli bdzie adna pogoda, pjd na spacer,
w przeciwnym wypadku bd czyta ksik;
w przeciwnym wypadku //czyli jeli nie wyzdrowiej
jeli bd si czu bardzo le, bd lea w ku,
w przeciwnym wypadku zaprosz koleg do domu

Zadanie. Napisz program, ktry wyprowadzi na ekran monitora najmniejsz z trzech
podanych przez uytkownika wartoci cakowitych.

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
int a,b,c;
cout << "Podaj pierwsza liczbe ";
cin >> a;
cout << "Podaj druga liczbe ";
cin >> b;
cout << "Podaj trzecia liczbe ";
cin >> c;
if (a<b)
if (a<c)
cout << "Najmniejsza liczba: " << a;
else
cout << "Najmniejsza liczba: " << c;
else
if (c<b)
cout << "Najmniejsza liczba: " << c;
else
cout << "Najmniejsza liczba: " << b;
cin.ignore();
getchar();
return 0;
}



Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Zadanie. Napisz program, ktry zapyta uytkownika (ucznia) o rozpoczt godzin lekcyjn i na tej
podstawie wypisze informacj o odbywajcym si wanie przedmiocie.
#include <iostream>
#include <cstdio>
using namespace std;

main()
{
int lekcja;
cout << "Ktora godzina lekcyjna sie zaczela? ";
cin >> lekcja;
if (lekcja==1) cout << "Masz teraz matematyke";
if (lekcja==2) cout << "Masz teraz fizyke";
if (lekcja==3) cout << "Masz teraz j. polski";
if (lekcja==4) cout << "Masz teraz historie";
if (lekcja==5) cout << "Masz teraz geografie";
if (lekcja==6) cout << "Masz teraz informatyke";
if (lekcja>6) cout << "Jestes juz po lekcjach";
cin.ignore();
getchar();
return 0;
}

Program jest prosty i czytelny, ale dziaanie jest nieoptymalne. Gdy uytkownik poda 1, to zachodzi
prawdziwo okrelonego warunku i zostanie wypisany komunikat matematyka. Potem wykona si
kolejna instrukcja programu, a potem nastpna itd. Po co sprawdza kolejne warunki, gdy speniony
jest jeden z powyszych? Mona by po kadym warunku if doda instrukcje else, ale takie
postpowanie wymaga wiele pisania i jest mao czytelne.

Zawi konstrukcj warunkw zagniedonych moemy zastpi instrukcj switch.
Skadnia instrukcji switch
switch (wyrazenie)
{
case wartosc1: instrukcja1; break;
case wartosc2: instrukcja2; break;

default: instrukcja_inna; break;
}

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Jeli warto wyraenia odpowiada ktrej z wartoci podanej przy jednej z etykiet case, wwczas
wykona si instrukcja przy tej wanie etykiecie. Po napotkaniu instrukcji break nastpuje
przekazanie sterowania do pierwszej instrukcji nastpujcej po switch a zatem nie s sprawdzane
kolejne przypadki, ktrych zajcie i tak jest ju niemoliwe.
Jeli wyraenie nie przyjmuje adnej z wartoci okrelonych w etykietach case, to wykonana zostanie
instrukcja oznaczona etykieta default.
Etykieta default i instrukcja przy niej nie s konieczne, wtedy jeli adna z etykiet case nie ma
wartoci odpowiadajcej warunkowi po prostu nie wykona si adna instrukcja wewntrz instrukcji
switch.
Zastosowanie instrukcji switch w poprzednim zadaniu:
#include <iostream>
#include <cstdio>
using namespace std;

main()
{
int lekcja;
cout << "Ktora godzina lekcyjna sie zaczela? ";
cin >> lekcja;
switch (lekcja)
{
case 1: cout << "Masz teraz matematyke"; break;
case 2: cout << "Masz teraz fizyke"; break;
case 3: cout << "Masz teraz j. polski"; break;
case 4: cout << "Masz teraz historie"; break;
case 5: cout << "Masz teraz geografie"; break;
case 6: cout << "Masz teraz informatyke"; break;
default: cout << "Jestes juz po lekcjach"; break;
}
cin.ignore();
getchar();
return 0;
}

Instrukcj switch mona rwnie wykorzysta bez uywania instrukcji break. Robimy tak w
sytuacjach, gdy chcemy, aby wykonay si instrukcje zarwno wystpujce po etykiecie znalezionej
wartoci, jak i wszystkie wystpujce po kolejnych etykietach.


Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Przykad. Napisz program, ktry zapyta o rozpoczt godzin lekcyjn a nastpnie wypisze
pozostae lekcje.
Ktra godzina lekcyjna si zacza? 4
Pozostay ci dzisiaj jeszcze nastpujce lekcje:

historia
geografia
informatyka

#include <iostream>
#include <cstdio>
using namespace std;

main()
{
int lekcja;
cout << "Ktora godzina lekcyjna sie zaczela? ";
cin >> lekcja;
cout << "Pozostaly ci dzisiaj jeszcze nastepujace lekcje:" << endl << endl;
switch (lekcja)
{
case 1: cout << "matematyka" << endl;
case 2: cout << "fizyka" << endl;
case 3: cout << "j. polski" << endl;
case 4: cout << "historia" << endl;
case 5: cout << "geografia" << endl;
case 6: cout << "informatyka" << endl;
}
cin.ignore();
getchar();
return 0;
}

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Instrukcja ptli for.

Gdy dana czynno ma si powtarza wiele razy, stosuje si wtedy instrukcje iteracyjne, czyli ptle.
Ptla for jest zwykle uywana, gdy liczba powtrze jest ustalona jeszcze przed wejciem do
pierwszego obiegu ptli.

Przykad.
for (int i=0; i<10; i=i+1)
{
cout << i << , ;
}
Ten fragment kodu odpowiada za wypisanie na ekranie wszystkich 10 cyfr z przecinkiem
umieszczonym po kadej z nich. Po sowie kluczowym for wystpuje nawias, w ktrym wpisuje si
warunek sterujcy ptl. Po nawiasie podaje si instrukcj (blok instrukcji), ktra ma by powtarzana
w ptli.

Skadnia ptli for

for (instrukcja pocztkowa; warunek sterujcy; instrukcja kroku)
instrukcja;

instrukcja pocztkowa instrukcja wykonana przed pierwszym obiegiem ptli,
zwana inicjujc

warunek sterujcy wyraenie, ktrego logiczna warto jest badana przed kadym
obiegiem ptli jeli jego warto jest true, to ptla wykona si kolejny
raz, w przeciwnym wypadku nastpuje wyjcie z ptli

instrukcja kroku instrukcja wykonana po kadym przebiegu ptli, najczciej
modyfikuje tak zwany licznik ptli

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Przykad.
Wypisz w kolumnie liczby od 0 do 20. Przy liczbach niepodzielnych przez 3 umie stosowny
komentarz.

#include <iostream>
#include <cstdio>
using namespace std;

main()
{
for (int i=0; i<=20; i++)
{
cout << i;
if (i%3!=0) // jeli reszta z dzielenia przez 3 jest rna od zera
cout << " - nie jest podzielne przez 3, ";
cout << endl;
}
getchar();
return 0;
}

Instrukcja kroku postaci i++ jest instrukcj inkrementacji zmiennej i odpowiada wyraeniu i=i+1.
Instrukcja kroku postaci ijest instrukcj dekrementacji zmiennej i odpowiada wyraeniu i=i-1.

Ptla for w C++ jest bardzo elastyczna. Moemy na przykad w tej ptli pomin dowoln instrukcj
wystpujc w nawiasie, musimy jednak zachowa rednik. Ptla ta moe wyglda tak:
for ( ; ; )
co oznacza ptl nieskoczon. Brak warunku sterujcego oznacza, e jest on zawsze prawdziwy.







Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Wybrane operatory jzyka C++
- operator przypisania (podstawienia)
Operator Dziaanie
= Przypisanie wartoci zmiennej
- operatory arytmetyczne
Operator Dziaanie
+ - * / dodawanie, odejmowanie, mnoenie, dzielenie
% reszta z dzielenia
- operatory relacyjne
Operator Dziaanie
< mniejsze
> wiksze
<= mniejsze lub rwne
>= wiksze lub rwne
== rwne
!= rne (nieprawda, e rwne)
- operatory logiczne
Operator Dziaanie
! negacja
&& koniunkcja (iloczyn logiczny)
|| alternatywa (suma logiczna)


Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Instrukcja ptli while.
Ptla ta wykonuje si kolejny raz, gdy wyraenie jest prawdziwe (czyli ma warto rn od zera).
Skadnia ptli while
while (wyraenie) instrukcja;

gdzie:
wyraenie wyraenie przyjmujce warto logiczn prawda lub fasz
instrukcja instrukcja wykonywana w ptli
Przykad. Napisz program, ktry zapyta o haso a nastpnie wypisze stosowny komunikat.
#include <iostream>
#include <cstdio>
using namespace std;

main()
{
string z;
cout << "Podaj haslo >";
cin >> z;
while (z!="Pitagoras")
{
cout << "Podaj haslo >";
cin >> z;
}
cout << "Podales prawidlowe haslo!" << endl << "Kocham Cie !!! :-)" ;
cin.ignore();
getchar();
return 0;
}

Jeli w tym programie uytkownik poda na pocztku waciwe haso (Pitagoras), ptla while
nie wykona si nawet jeden raz.


Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Instrukcja ptli do while
Ptla ta wykonuje si kolejny raz, gdy wyraenie jest prawdziwe (czyli ma warto rn od zera).
Skadnia ptli do while

do instrukcja while (wyraenie)
gdzie:
instrukcja instrukcja wykonywana w ptli
wyraenie wyraenie przyjmujce jedn z 2 wartoci logicznych: prawda albo fasz.

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
int i = 0; // definicja zmiennej
do // rb...
{ // klamra otwierajca blok instrukcyjny
cout << *; // wypisz gwiazdk
i++; // zwiksz warto zmiennej i
} // klamra zamykajca blok instrukcyjny
while (i<4); // ...dopki i jest mniejsze od czterech
getchar();
return 0;
}
Program bdzie dziaa tak samo, jeli zamiast warunku, ktrego prawdziwo jest sprawdzana,
umiecimy w ostatniej linii wyraenie, ktrego warto bdzie sprawdzana. Zgodnie z semantyk
ptli, czyli opisem jej dziaania, dopki wyraenie nie ma wartoci 0, bdzie si wykonywa kolejny
przebieg tej ptli.
#include <iostream>
#include <cstdio>
using namespace std;
main()
{
int i = 4; // definicja i inicjacja zmiennej
do // rb...
{ // klamra otwierajca blok instrukcyjny
cout << "*"; // wypisz gwiazdk
i--; // zmniejsz warto zmiennej i
} // klamra zamykajca blok instrukcyjny
while (i); // ...dopki wyraenie ma warto rn od zera
getchar();
return 0;
}
Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Przykad. Napisz program obliczajcy pole kwadratu o podanej dugoci boku.
W wypadku podania przez uytkownika niewaciwej wartoci (ujemnej lub zero), program
powinien poprosi o podanie waciwej wartoci.
#include <iostream>
#include <cstdio>
using namespace std;
main()
{
float bok;
do // rb...
{
cout << "Podaj dodatnia dlugosc boku! ";
cin >> bok; // zmiennej bok zostaa przypisana warto
if (bok<=0)
cout << "Niepoprawna dlugosc boku - podaj jeszcze raz!" << endl;
}
while (bok<=0); // ...dopki bok nie jest wartoci dodatni
cout << "Pole kwadratu wynosi: " << bok*bok;
cin.ignore();
getchar();
return 0;
}

Ptla do while wykonuje si co najmniej jeden raz w programie, poniewa warunek wyjcia jest
sprawdzany na kocu.
Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Instrukcje break i continue sterujce wykonaniem ptli.
Instrukcji tych nie naley uywa w programach! Uywanie tych instrukcji nie jest zgodne
z kanonem dobrego programisty i sprawia, e program staje si mao czytelny.
Przykad. Program, ktry wywietla liczby parzyste, dopki ich suma nie przekroczy 20:

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
int sum = 0;
for (int i=0; i<10; i++)
{
cout << 2*i <<", ";
sum = sum+2*i;
if (sum>20)
break; // jeli warunek speniony, wyjcie z ptli
}
cout << " Jestem poza petla"; //tu zaczyna si realizacja zada

getchar();
return 0;
}

W pierwszej linii znajdujcej si wewntrz ptli for wyprowadzana jest na ekran monitora podwojona
warto zmiennej i. Drug instrukcj w ptli jest obliczanie sumy liczb ju wyprowadzonych na ekran
monitora. Nastpnie sprawdzany jest warunek, czy suma ta przekroczya warto 20. Jeli tak,
wystpuje wyjcie z ptli, realizowane za pomoc instrukcji break, czyli przerwana zostaje instrukcja
iteracji. Na ekran monitora zostan wyprowadzone liczby: 0,2,4,6,8,10. Przy szstym przebiegu ptli
warunek okrelajcy wyjcie z ptli zosta speniony, a wic nie bdzie ju kolejnej iteracji.
Wywietlony zostanie napis: Jestem poza petla i wykonywa si bd pozostae instrukcje.

Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Liczb instrukcji wykonanych w pojedynczym przebiegu ptli mona modyfikowa za pomoc
instrukcji continue po jej napotkaniu nie zostaje przerwane dziaanie caej ptli, a jedynie tego
konkretnego przebiegu, ktry jest realizowany, i nastpuje przejcie do kolejnego. Zatem w przebiegu
ptli cz instrukcji zostaje pominitych.

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
for (int i=0; i<5; i++)
{
cout << endl << i << ", ";;
if (i%3==0)
continue; // przy spenieniu warunku przechodzimy
// natychmiast do kolejnego przebiegu ptli
cout << " - nie jest podzielne przez 3, ";
}
getchar();
return 0;
}

Na ekranie odczytamy:
0,
1, - nie jest podzielne przez 3,
2, - nie jest podzielne przez 3,
3,
4, - nie jest podzielne przez 3,

Dla liczb 0 i 3 speniony by warunek zerowania si reszty z dzielenia przez 3, a wic wykonaa si
instrukcja continue ignorujemy dalsze instrukcje okrelone w ptli (czyli wyprowadzenie na
ekran napisu: nie jest podzielne przez 3) i przechodzimy do jej nastpnego obiegu. Dlatego dla tych
wanie liczb nie zosta wywietlony tekst.


Opracowanie: Arkadiusz Skibiski, I LO ver. 0.4a
Prawidowa implementacja programu (bez continue) moe wyglda tak:

#include <iostream>
#include <cstdio>
using namespace std;
main()
{
for (int i=0; i<5; i++)
{
cout << endl << i << ", ";
if (i%3!=0)
cout << " - nie jest podzielne przez 3,";
}
getchar();
return 0;
}

You might also like