C Zadania z programowania 9788324637072


eBook
PDF
n z m
" " "
z mt
z
"
Proste ra e w ści ścia
" Tabli , itera e oraz podprogramy
"
Programowanie obiektowe i pliki kstowe
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości
lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.
Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie
książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi
bądz towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej
odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne
naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo
HELION nie ponoszą również żadnej odpowiedzialności za ewentualne
szkody wynikłe z wykorzystania informacji zawartych w książce.
Redaktor prowadzÄ…cy: Ewelina Burska
Projekt okładki: Radosław Zbytniewski
Materiały graficzne na okładce zostały wykorzystane za zgodą iStockPhoto Inc.
Wydawnictwo HELION
ul. Kościuszki le, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http:/!helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http:/!helion.pl/user/opinie ?cppzad_p
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Kody wykorzystane w książce można znalezć pod adresem:
p://ftp.helion.pl/przykłady/cppzad.zip
ISBN: 978-83-246-3707-2
Numer katalogowy: 6900
Copyright © Helion 2011
Printed in Poland.
" "
Poleć książkę na Facebook.com Księgarnia internetowa
" "
Kup w wersji papierowej Lubię to! Nasza społeczność
"
Oceń książkę
Od autora 5
Rozdział 1. Proste operacje wejścia-wyjścia 7
Rozdział 2. Podejmujemy decyzje w programie 17
Rozdział 3. Iteracje 29
Rozdział 4. Tablice 57
Tablice jednowymiarowe 57
Tablice dwuwymiarowe 61
Rozdział 5. Podprogramy 79
Rozdział 6. Programowanie obiektowe 97
Rozdział 7. Pliki tekstowe 111
4 C ++. Zadani a z progr a mowani a z przykł adowymi rozwi ązani ami
Trójzbiór Zadania z progran1owania z rozwiqzanian1i to pie1,wszy
w Polsce zbióI' zadaÅ„ ad1,esowany do wszystkich osób zaintereso­
wanych p1,ogramowaniem, które w k1'ótkim czasie, pop1,zez analizę
zaproponowanych I'ozwiązań, chciałyby na11czyć się solidnych podstaw
Pl'Ogramowania w tI'Zech językach : Tt1rbo Pascaltl, c+ + OI'aZ Javie.
Składa się on z trzech zbiorów zadań:
Turbo Pascal. Zadania z progra111owania z przyklado n1i
" " "
rozw1qzan1a1111.
C+ +. Zadania z progran1owania z przykłado mi roz qzanian1i.
Java. Zadania z progran1owania z przyklado n1i rozwiqzanian1i.
Chociaż każdy z tych zbiorów stanowi odrębną całość, to zostały
one napisane w taki sposób, aby ten sam 111b bardzo podobny pro­
blem prog1,amistyczny (np . napisz p1,ogram, który oblicza pole pro­
stokąta) został rozwiązany w trzech językach p1,ogramowania: T11rbo
Pascalu, C+ + i Javie, strt1kturalnie i obiektowo . Tak skonstruowany
t1'ójzbiór Zadania z progra1nowania zyskt1je zupełnie nowy wymiar
dydaktyczny w na11ce tych trzech języków.
Zadania z progran1owania można również wykorzystać jako 11z11peÅ‚­
nienie wiedzy zaczerpniÄ™tej z innych książek do nat1ki prog1,amowa­
nia. Zakres i stopień t1,udności zadań pokrywa się z tradycyjnym
p1,ocesem na11czania wymienionych języków. Zbiór ten może też pełnić
I'olę podręcznej pomocy dla początk11jących p1,ogramistów, w której
szybko znajdÄ… oni pot1,zebne im rozwiÄ…zanie.
6 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Trójzbiór adresowany jest również do matt1rzystów, studentów, na­
t1czycieli informatyki oraz osób zainteresowanych programowaniem
lub rozpoczynających naukę programowania w języku c+ +.
Uczniowie techników informatycznych mogÄ… zbiory zadaÅ„ wykorzy­
stać do szybkiej powtó1'ki przed egzaminem zawodowym.
W trakcie pisania tej książki korzystałem z tzw. aplikacji konsolowych
(ang. co11sole application) i kompilatora firmy Borland (C+ + ) .
Mirosław J. Kt1biak
. , .
SCIO-W
W 1 rozdziale zan1ieszczono proste zadania z przyklado n1i roz q­
zania111i ilustrujÄ…ce, w jaki sposób kon1puter kon1unikuje siÄ™ z użyt­
kownikien1 w języku C + +.
Każda aplikacja powinna posiadać możliwość kom11nikowania się
z użytkownikiem. Wyko1,zystując p1,oste p1,zykłady, pokażemy, w jaki
sposób progi,am napisany w języku c+ + komunikuje się z nim poprzez
standardowe operacje wejścia-wyjścia.
Plik nagłówkowy z instr11kcji
#i ncl ude
zawiera definicje klas 1 trmożliwiajÄ…cych wykonywanie operacji wejÅ›cia­
wyjścia na strumieniach. Do wyprowadzania danych na ekran sł11ży
standardowy str1rmień wyjściowy cout, któI'Y w językt1 C+ + domyślnie
p1,zypisuje ekran do standa1,dowego tu,ządzenia wyjściowego systemt1
ope1,acyjnego. Aby wyÅ›wietlić komt1nikat lt1b dane, trzeba do strtrmie­
nia wyjÅ›ciowego cout zastosować symbol podwójnego znak11 mniejszo­
ści<< (operacja wstawiania). Dwa znaki mniejszości należy wprowadzić
z klawiatury.
1 Więcej informacji na ten1at klas czytelnik znajdzie w rozdziale 6.
8 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Do wprowadzania danych do programu służy standardowy strt1mień
wejściowy ci n oraz operatOI' >> (dwa znaki większości, które również
wprowadzamy z klawiatt1ry), np . ci n >> a : .
Do formatowania strt1mienia wyjÅ›ciowego bÄ™dziemy t1żywali flagi for­
matt1jącej fi xed i manipulatora s etpreci si on ( n) . Flaga fi xed używa do
liczb zmiennoprzecinkowych t1stalonej k1,opki dziesiętnej , natomiast
manipulator setp reci si on(n) t1stala ich precyzjÄ™ na n np.
zapis cout
<< setpreci si on ( 2) : oznacza, że liczby zmiennoprzecinkowe bÄ™dÄ… wy­
świetlane z dokładnością dwóch miejsc po k1,opce.
Zastosowanie manipulatora setpreci si on (n) wymaga wÅ‚Ä…czenia do pro­
gramt1 pliku nagłówkowego:
#i ncl ude
Opisane powyżej podejście do operacji wejścia-wyjścia nazywa się
obiektowym 2.
ZADANIE
Napisz program, który oblicza pole prostokąta. Wartości boków
b
a i wprowadzamy z klawiatury. W programie należy p1,zyjąć,
że zmienne a i b oraz pol e sÄ… typt1 fl oat (rzeczywistego). PI'Zyj­
mujemy format wyświetlania ich na ekranie z dokładnością
dwóch miejsc po kropce.
Przy adowe 1żÿozwiqzanie - listing 1. 1
#i ncl ude I I Zadanie 1.1
#i ncl ude
#i ncl ude
ma i n ( )
{
fl oat a . b, pol e:
cout << "Program ob l i cza pol e prostokata . " << endl :
cout << "Podaj bok a . " << endl :
c1n >> a :
cout << "Podaj bok b . " << endl :
ci n >> b:
pol e = a*b :
2 Więcej informacji na temat obiektowych operacji wejścia-wyjścia, flag
i manipulatorów znajdzie czytelnik na stronach WWW poświęconych
językowi programowania c+ + pod adrese1n http://www.cplusplus.co1n/.
R zdzi ał 1. " Proste oper acj e wejści a-wyjśc i a 9
cout << fi xed : I I flaga
cout << setpreci si on ( 2) : I I ustalenie precyzji
cout << "Pol e prostokata o boku a = " << a << " i boku b = " << b:
cout << " wynosi " << pol e << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Linijka kod11
fl oat a. b, pol e:
t1możliwia zadeklarowanie zmiennych a, b i pol e (wszystkie zmienne
w p1·og1,amie sÄ… typ11 rzecz wistego fl oat). Inst1,11kcja
cout << "Program obl i cza pol e prostokata . " << eridl :
wyświetla na ekranie komp11tera komunikat Progra111 oblicza pole
prostokata. Instr11kcja ci n >> a: czeka na wprowadzenie z klawiatury
kompt1tera liczby, która następnie zostanie przypisana zmiennej a.
Pole prostokąta zostaje obliczone w wyrażeniu
pol e = a*b :
Za wyÅ›wietlenie wartoÅ›ci zmiennych a i b oraz pol e wraz z odpo­
wiednim opisem są odpowiedzialne następujące linijki kodt1:
cout << "Pol e prostokata o boku a = " << a << " i boku b = " << b:
" "
cout << wynosi << pol e << " . " endl :
<<
Flaga fi xed t1żywa 11stalonej kropki dziesiÄ™tnej dla liczb zmienno­
przecinkowych. Zapis
cout << setpreci sion ( 2) :
oznac a, że liczby te będą wyświetlane na ek1,anie z dokładnością
dwóch miejsc po kropce. Natomiast ft1nkcja
getch( ) :
(ang. get character wczytaj znak) czeka na wczytanie dowolnego
znakt1 z klawiatury (naciśnięcie dowolnego klawisza) . Prototyp tej
ft1nkcji znajduje się w plikt1 nagłówkowym conio.h. Instrt1kcja
endl :
(ang. end of line - koniec linii) przenosi k11rsor na poczÄ…tek nastÄ™p­
nej linii.
Komentarze w programie oznaczamy dwoma 11kośnikami
I I to jest komentarz do programu
1 0 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
SÄ… one ignorowane w procesie kompilacji.
Rez11ltat działania program11 można zobaczyć na rysunk11 1. 1.
Program oblicza pole prostokata.
Podaj bok a.
1
Podaj bok b.
2
Pole prostokata o boku a = 1.00 i boku b = 2.00 wynosi 2.00.
Rysunek 1.1. Efekt dziaÅ‚ania prog1żÿamu Zadanie 1.1
ZADANIE
Napisz program, który wyÅ›wietla na ekranie komp11tera war­
tość predefiniowanej stałej n = 3,14 . . . Należy przyjąć fo1,mat
prezentowania tej stałej, oznaczanej w język11 C+ + jako M_PI,
z dokładnością pięcit1 miejsc po kropce.
Wskazówka
Stała M_PI znajduje się w pliku nagłówkowym 111ath.h, który poleceniem
#i ncl ude należy dołączyć do programu.
PrzykÅ‚adowe 1żÿozwiqzanie - listing 1.2
#i ncl ude I I Zadanie 1.2
#i ncl ude
#i ncl ude
#i ncl ude
mai n ( )
{
cout << "Program wyswi etl a wa rtosc predefi ni owanej stal ej pi " << endl :
cout << "z dokl adnosci a pi eci u mi ejsc po kropce . " << endl :
cout << "pi = " << fi xed << setprecisi on ( S) << M_PI << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania programt1 można zobaczyć na rysunkt1 1. 2.
R zdzi ał 1. " Proste oper acj e wejści a-wyjśc i a 1 1
Program wyswietla wartosc predefiniowanej stalej pi
z doklad noscia pieci u miejsc po kropce.
pi = 3.14159
Rysunek 1. 2. Efekt dziaÅ‚ania prog1żÿan1u Zadanie 1. 2
ZADANIE
Napisz prog1,am, który wyświetla na ekranie kompute1'a
pierwiastek kwadratowy z wartości predefiniowanej stałej
n = 3,14 . Należy przyjąć format wyświetlania tego pierwiastka
z dokładnością dwóch miejsc po k1,opce.
Wskazówka
Pierwiastek kwadratowy ze stałej n obliczamy, korzystając z fu nkcj i sqrt( ) .
Funkcja ta znajduje się w pliku nagłówkowym math.h.
PrzykÅ‚adowe 1żÿozwiqzanie - listing 1.3
#i ncl ude I I Zadanie 1.3
#i ncl ude
#i ncl ude
#i ncl ude
mai n( )
{
cout << "Program wyswi etl a pi erwi astek kwadratowy z pi " :
cout << " z dokladnosci a dwoch mi ej sc po kropce . " << endl :
cout << "Sq rt(pi ) = " << fixed << setpreci si on(2} << sqrt (M_PI ) << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania programt1 można zobaczyć na rys11nkt1 1. 3.
Program wyswietla pierwiastek kwadratowy
z pi z dokladnoscia dwoch miejsc po kropce.
Sqrt(pi) = 1.77
Rysunek 1. 3. Efekt działania progran1u Zadanie 1. 3
1 2 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz progi,am, któI'Y oblicza objętość k11li o promieni11 r.
Wartość promienia wprowadzamy z klawiatury. W programie
należy przyjąć, że r jest typll fl oat (rzeczywistego). Dla zmien­
nych r oraz objetosc należy przyjąć format wyświetlania ich
na ekranie z dokładnością dwóch miejsc po kropce.
Przy adowe rozwiÄ…zanie - listing 1.4
#i ncl ude I I Zadanie 1.4
#i ncl ude
#i ncl ude
#i ncl ude
ma i n ( )
{
fl oat r. objetosc:
cout << "Program ob l i cza objetosc kul i o promi eni u r . " << endl :
11
cout << Podaj promi en r. " << endl :
c1n >> r :
objetosc = 4*M_PI*r*r*r/3 :
cout << fi xed :
cout << setpreci si on ( 2) :
11
cout << "Objetosc kul i o promi eni u r = << r << " wynosi " :
cout << obj etosc << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Objętość kuli o promienilI r oblicza linijka kod11
objetosc = 4*M_PI*r*r*r/3 :
gdzie potęgowanie zamieniono na mnożenie.
Rez11ltat działania programt1 można zobaczyć na rysunkt1 1.4.
Program oblicza objetosc kuli o promieniu r.
Podaj prom ien r.
1
Objetosc kuli o prom ieniu r = 1.00 wynosi 4.19.
Rysunek 1.4. Efekt dzialania prog1żÿamu Zadanie 1.4
R zdzi ał 1. " Proste oper acj e wejści a-wyjśc i a 1 3
ZADANIE
Napisz p1,ogram, który oblicza wynik dzielenia całkowitego
bez reszty dla dwóch liczb całkowitych a = 3 7 i b = 11.
Wskazówka
w języku c+ + w przypadku zastosowania operatora dzielenia I dla l iczb
całkowitych reszta wyniku jest pom ijana3.
PrzykÅ‚adowe 1żÿozwiqzanie - listing 1. 5
#i ncl ude I I Zadanie 1.5
#i ncl ude
ma i n ( )
{
i nt a = 37 :
=
i nt b 11:
cout << "Program obl i cza wyni k dzi el eni a cal kowi tego" << endl :
cout << "dl a dwoch l i czb cal kowi tych . " << endl :
cout << "D l a l i czb a = " << a << " i b = " << b << endl :
= . :
cout << a << "I" << b << " " << a /b << " " << endl
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1 1. 5.
Program oblicza wynik dzielenia calkowitego
dla dwoch liczb calkowitych.
Dla liczb a = 37 i b = 11
37/11 = 3.
Rysunek 1. 5. Efekt dziaÅ‚ania prog1żÿamu Zadanie 1. 5
3 W języku T11rbo Pascal należy zastosować operator dzielenia całkowitego
bez r szty di v.
1 4 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz prog1,am, który oblicza I'esztę z dzielenia całkowitego
dla dwóch liczb całkowitych a = 3 7 i b = 11.
Wskazówka
Należy zastosować operator reszty z dzielenia całkowitego modulo, który
oznaczamy w języku C+ +
symbole1m %. Operator ten umożl iwia uzyskan 1ie
tylko resz z dzielenia, natomiast całkowita wartość liczbowa jest odrzucana.
PrzykÅ‚adowe 1żÿozwiqzanie - listing 1. 6
#i ncl ude I I Zadanie 1.6
#i ncl ude
mai n ( )
{
i nt a = 37 :
i nt b = 11 :
cout << "Program obl i cza reszte z dzi el eni a cal kowitego" :
cout << " dw och l i czb cal kowi tych . " << endl :
cout << "D l a l i czb a = " << a << " i b = " << b << endl :
cout << a << "%" << b << " = " << a%b << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania program11 można zobaczyć na rysunk11 1. 6.
Program oblicza reszte z dzielenia calkowitego dwoch liczb
calkowitych.
Dla liczb a = 37 i b = 11
37%1 1=4.
Rysunek 1. 6. Efekt dziaÅ‚ania prog1żÿamu Zadanie 1.6
R zdzi ał 1. " Proste oper acj e wejści a-wyjśc i a 1 5
ZADANIE
Napisz p1,og1,am, któI'Y oblicza st1mę, różnicę, iloczyn i ilo1,az
dla dwóch liczb x i y wprowadzanych z klawiatt1ry. W pro­
gramie p1·zyjml1jemy, że liczby x i y sÄ… typll fl oat (1·zeczywi­
stego ). Dla zmiennych x, y, suma, rozni ca, i 1 oczyn i i l oraz należy
p1,zyjąć format wyświetlania ich na ekranie z dokładnością
dwóch miejsc po k1,opce.
Przy adowe rozwiÄ…zanie - listing 1. 7
#i ncl ude I I Zadanie 1. 7
#i ncl ude
#i ncl ude
ma i n ( )
{
fl oat x. y, suma . rozn1ca . i l oczyn , i l oraz:
cout << "Program obl i cza sume . rozni ce . i l oczyri i i l oraz" << endl :
l
cout << "dl a dwoch l i czb x y wprowadzanych z kl awi atury. " << endl :
cout << endl :
cout << "Podaj x. " << endl :
Cln >> X:
cout << "Podaj y. " << endl :
Y:
Cl n >>
=
suma x+y :
rozn1ca = x-y :
i l oczyn = x*y :
i l oraz = x/y :
cout << fi xed :
cout << setpreci sion ( 2) :
ut 11
co << "Ol a x = " << x << i y = " << y << eridl :
cout << endl : I I wydruk pustej linii
cout << "suma = " << suma << "." << endl :
11
cout << rozni ca = " << rozni ca << " . " << endl :
cout << "i l oczy n = " << i l oczyn << " . " << endl :
cout << "i l oraz = " << i l oraz << " . " :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rezt1ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1 1. 7.
1 6 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Program oblicza sume, roznice, iloczyn i iloraz
dla dwoch liczb x i y wprowadzanych z klawiatury.
Podaj x.
1
Podaj y.
2
Dla X = 1.00 i y = 2.00
suma = 3.00,
roznica = -1 .00,
iloczyn = 2.00,
iloraz = 0.50.
Rysunek 1. 7. Efe dzialania prog1żÿan1u Zadanie 1. 7
" "
mu
w
W n1 rozdziale przedstawimy t owe zadania wraz z przykladowyn1i
rozwiqzanian1i z korzystanie1n instrukcji warunko ch.
w języku c+ + istnieją dwie instrt1kcje wart1nkowe:
D instrt1kcja wart1nkowa i f . . . el se,
tch . . . case.
D instrt1kcja wyboru swi
Instrt1kcja warunkowa i f . . . el se służy do sprawdzania poprawności
wyrażenia wart1nkowego i w zależności od tego, czy dany wart1nek
jest p1,awdziwy, czy nie, pozwala na wykonanie różnych bloków
p1,ogramt1.
Jej ogólna postać jest następt1jąca:
i f (warunek )
{
I I instrukcje do wykonania, kiedy warunekjest prawdziwy
}
el se
{
I I instrukcje do wykonania, kiedy warunekjest fał
}
1 8 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Blok el se jest opcjonalny i instrukcja war11nkowa w wersji skróconej
ma postać
i f (warunek )
{
I I instrukcje do wykonania, kiedy warunekjest prawdziwy
}
Jeżeli warunek nie jest prawdziwy, to instr11kcja warunkowa i f nie zo­
stanie wykonana.
Instrukcja wybo1'tl swi tch . . . case pozwala w wygodny i przejrzysty
sposób sprawdzić ciąg war11nków i wykonywać kod w zależności od
tego, czy sÄ… one p1,awdziwe, czy faÅ‚szywe. Jej ogólna postać jest na­
stęp11jąca:
swi tch (wyrażenie)
{
case wartość 1 : instrukcje_l;
break :
case wartość 2 : instrukcje_2 :
break :
. . . . . . . . . . . . . . . . . . . . . . . .
case wartość_n : instrukcje_n :
break :
defaul t : instrukcje :
}
Instrukcja break przerywa wykonywanie całego bloku case. UWAGA:
jej brak może doprowadzić do nieoczekiwanych wyników i błędów
"
w programie.
ZADANIE
Napisz program, który dla trzech boków trójkÄ…ta a, b i c wpro­
wadzonych z klawiatury sprawdza, czy tworzÄ… one trójkÄ…t pro­
że
(zakładamy, a > b > O, c > O) .
stokÄ…tny O,
Przy adowe 1żÿozwiqzanie - listing 2. 1
#i ncl ude I I Zadanie 2. 1
#i ncl ude
ma i n ( )
{
i nt a , b, c:
cout << "Program sprawdza . czy boki a, b oraz c tworza troj kat
prostokatny . " << endl :
Rozdzi ał 2. " Pod ejmuj emy decyzje w progr ami e 1 9
cout << "Podaj bok a . " << endl :
c1n >> a :
cout << "Podaj bok b . " << endl :
ci n >> b:
cout << "Podaj bok c. " << endl :
Cln >> C;
i f ( ( a*a+b*b ) == (c*c) )
{
11
cout << "Boki a = " << a << " , b = " << b << i c = << c:
11
cout << " tworza trojkat prostokatny . " << endl :
}
el se
{
11 11
cout << "Boki a = << a << " , b = " << b << i c = " << c:
cout << " ni e tworza troj kata prostokatnego .11 << endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Sprawdzenie twierdzenia Pitagorasa dla wczytanych boków a, b i c
zostało zawarte w następ11jących linijkach kod11:
i f ( ( a*a+b*b ) == ( c*c) )
{
11 11
cout << "Boki a = << a << " , b = " << b << i c = " << c:
11
cout << tworza trojkat prostokatny . " << endl :
}
el se
{
, 11 = 11 << c:
cout << "Boki 11 = " << b << i c
<< a << " b
a =
cout << " ni e tworza troj kata prostokatnego .11 << endl :
}
Aatwo sp1,awdzić, że boki a = 3, b = 4, c = 5 tworzÄ… trójkÄ…t prostokÄ…t­
ny (liczby te spełniają twie1,dzenie Pitagorasa), i na ekranie pojawi
siÄ™ kom11nikat Boki. . . tworza trojkat prostokatny, natomiast boki a = 1,
b = 2, c = 3 nie tworzą trójkąta prostokątnego (liczby te nie spełniają
twierdzenia Pitagorasa), więc na ek1,anie zostanie wyświetlony kom11-
nikat Boki . . . 11ie two1,za trojkata p1,ostokat11ego.
Rez11ltat działania prog1,amu dla a = 1, b = 2, c = 3 można zobaczyć
na I'YSt1nkt1 2 . 1.
20 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Program sprawdza, czy boki b oraz c tworza troj kat
a,
prostokatny.
Podaj bok a.
1
Podaj bok b.
2
Podaj bok c.
3
Boki a = b = 2 i c = 3 n ie tworza troj kata prostokatnego.
1,
Rysunek 2. 1. Efekt dziaÅ‚ania prog1żÿamu Zadanie 2.1
ZADANIE
Napisz pI'OgI'am, który z wykorzystaniem instrt1kcji warunkowej
i f oblicza pie1,wiastki równania kwadratowego ax2+bx+c = O,
gdzie zmienne a, b, c to liczby rzeczywiste wprowadzane z kla­
wiatury. Dla zmiennych a, b, c, xl oraz x2 należy p1,zyjąć for­
mat wyświetlania ich z dokładnością dwóch miejsc po kropce.
Przykładowe rozwiązanie - listing 2.2
#i ncl ude I I Zadanie 2.2
#i ncl ude
#i ncl ude
#i ncl ude
ma i n ( )
{
fl oat a . b, c. delta . xl. x2 :
cout << "Program obl i cza pi erwi astki rownani a kwadratowego" :
cout << " dl a dowol nych wspol czynni kow a . b, c. " << endl :
cout << "Podaj a . " << endl :
c1n >> a :
i f ( a O)
==
{
cout << "Ni edozwol ona wartosc wspol czynni ka a. Naci sni j dowol ny kl awi sz. " :
}
el se
{
cout << "Podaj b . " << endl :
ci n >> b:
cout << "Podaj c. " << endl :
c1n >> c:
cout << fi xed :
cout << setpreci si on ( 2) :
Rozdzi ał 2. " Pod ejmuj emy decyzje w progr ami e 21
cout << "Dl a wprowadzonych l i czb : " << endl :
li li li
-
cout << "a << a << << endl :
li li li li
-
cout << b << b << << endl :
lic - li li li
cout << << c << << endl :
del ta = b*b -4*a*c :
i f ( del ta < O )
{
cout << "brak pi erwi astkow rzeczywi stych . " << endl :
}
el se
{
i f ( del ta == O)
{
xl = -b/( 2*a ) :
1
11 I
cout << "trojmi an ma jeden pi erwi astek podwojny xl = " << xl <<
<< endl :
}
el se
{
xl = ( - b-sqrt(delta) ) /( 2*a ) :
x2 = ( - b+sq rt(delta ) ) /( 2*a ) :
cout << "trojmi an ma dwa pi erwi astki : " << endl :
cout << "xl = " << xl << " " << endl :
co ut << " x2 = " << x2 << " . " << endl :
}
}
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
W pierwszej części program11 sprawdzamy, czy wa1,tość współczyn­
nika a jest równa zeI'O. Ilt1strują to następt1jące linijki kod11 :
i f (a == O)
{
cout << "Ni edozwol ona wartosc wspol czynni ka a . Naci sni j dowol ny
kl awi sz . " :
}
el se
{
}
=
Jeśli a O, to zostanie wyświetlony kom11nikat Niedozwolona wartosc
wspolczynnika a . . . i prog1,am zostanie zakończony. Dla a różnego od
zera program będzie oczekiwał na wp1,owadzenie wa1,tości b i c. Po
ich wpisani11 zostanie obliczona del ta według wzoru
22 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
del ta = b*b - 4*a*c :
Jeśli del ta < O, to zostanie wyświetlony kom11nikat brak pierwiastkow
rzeczywis ch.
W p1,zypadk11 gdy del ta = O, równanie kwadratowe ma jeden pier­
wiastek podwójny, który obliczymy ze wzoru
xl = -b/( 2*a) :
Jeśli del ta > O równanie ma dwa pierwiastki, któ1'e zostaną obliczone
. .
/
PI'ZY uzyc111 wzorow
xl = ( - b-sqrt( delta) ) /( 2*a ) :
x2 = ( - b+sqrt( delta ) ) /( 2*a ) :
Przykładowo dla a = 1, b = 5 i c = 4 wartości pierwiastków równania
wynoszÄ… odpowiednio xl = -4 i x2 = - 1.
Dla a = 1, b = 4 i c = 4 trójmian ma z kolei jeden pierwiastek po­
dwójny xl = -2.
Dla a = 1, b = 2 01,az c = 3 h'ójmian nie ma pierwiastków rzeczywistych.
Rezt1ltat działania programt1 dla a = 1, b = 5, c = 4 można zobaczyć
na rysunkt1 2 .2.
Program oblicza pierwiastki rownania kwadratowego dla
dowolnych wspolczynnikow c.
a, b,
Podaj a.
1
Podaj b.
5
Podaj c.
4
Dla wprowadzonych liczb:
a= 1.00,
b = 5.00,
c = 4.00,
trojmian ma dwa pierwiastki:
x1 = -4.00,
x2 = -1 .00.
Rysunek 2. 2. Efe dziaÅ‚ania prog1żÿa111u Zadanie 2.2
Rozdzi ał 2. " Pod ejmuj emy decyzje w progr ami e 23
ZADANIE
Napisz program, któI'Y z wykorzystaniem instrukcji wyborll
=
swi tch oblicza pie1,wiastki równania kwadratowego ax2+bx+c O,
gdzie zmienne a, b, c to liczby I'Zeczywiste wp1,owadzane z kla­
wiatury. Dla zmiennych a, b, cJ xl oraz x2 należy przyjąć fo1 llat
wyświetlania ich na ekranie z dokładnością dwóch miejsc po
kropce.
Wskazówka
Należy wp rowadzić do program u zmienną pomocn iczą
l i czba_pi erwi astkow.
Przy adowe 1żÿozwiqzanie - listing 2.3
#i ncl ude I I Zadanie 2. 3
#i ncl ude
#i ncl ude
#i ncl ude
mai n ( )
{
fl oat a . b. c. delta , xl , x2 :
char l i czba_pi erwi astkow :
cout << "Program obl i cza pi erwi astki rownani a kwadratowego" :
cout << " dl a dowol nych wspol czynni kow a . b. c . " << endl :
cout << "Podaj a . " << endl :
c1n >> a :
i f ( a == O)
{
cout << "Ni edozwol ona wartosc wspol czynni ka a . Naci sni j dowol ny
kl awi sz. " :
}
el se
{
cout << "Podaj b . " << endl :
ci n >> b:
cout << "Podaj c. " << endl :
Cl n >> C;
cout << fi xed :
cout << setpreci si on(2) :
cout << "Dla wprowadzonych l i czb : " << endl :
li li li
cout << "a = << a << << endl :
li li "
cout << '' b = << b << << endl :
li li "
cout << "c = << c << << endl :
del ta = b*b- 4*a*c :
24 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
i f (delta < 0) l i czba_pi erwi astkow = O:
i f (delta == 0 ) l i czba_pi erwi astkow = 1:
i f (delta > 0) l i czba_pi erwi astkow = 2:
swi tch ( l i czba_pi erwi astkow)
{
case O : cout << "bra k pi erwi a stkow rzeczywi stych . " << endl :
break :
case 1 : { xl = -b/( 2*a ) :
cout << ··trojmi an ma jeden pi erwi astek podwojny" :
" ·
cout << xl = " << xl << " . " << endl :
}
break:
case 2 : { xl = ( - b- sqrt( delta) ) / ( 2*a) :
x2 = ( - b+sqrt ( delta ) ) /( 2*a ) :
cout << "'trojmi an ma dwa pi erwi astki : " << endl :
11
" ·
cout << xl = " << xl << " << endl :
11
" · "
cout << x2 = " << x2 << " << endl :
}
break:
}
}
getch ( ) ; I I czeka na nacżsniecże dowolnego klawisza
}
- - -
Rezultat działania program11 dla a 1, b 4, c 4 można zobaczyć
na rysunk11 2 .3.
Program oblicza pierwiastki rownania kwadratowego dla
dowolnych wspolczynnikow c.
a, b,
Podaj a.
1
Podaj b.
4
Podaj c.
4
Dla wprowadzonych liczb:
a= 1.00,
b = 4.00,
c = 4.00,
trojmian ma jeden pierwiastek podwojny x1 = -2.00.
Rysunek 2. 3. Efe dziaÅ‚ania prog1żÿamu Zadanie 2.3
Rozdzi ał 2. " Pod ejmuj emy decyzje w progr ami e 25
ZADANIE
Napisz program, który oblicza wa1,tość x z równania ax+b = c.
Wartości a, b i c należą do zbiort1 liczb rzeczywistych i są
wprowadzane z klawiatury. Dodatkowo należy zabezpieczyć
program na wypadek sytuacji, kiedy wprowadzona wartość a
jest równa zero . Dla zmiennych a, b, c oraz x należy przyjąć
format wyświetlania ich z dokładnością dwóch miejsc po
kropce.
Przy adowe rozwiÄ…zanie - listing 2.4
#i nc I I Zadanie 2.4
l ude
#i ncl ude
#i ncl ude
ma i n ( )
{
fl oat a , b, c. x:
cout << "Program obl i cza wartosc x z rownan1a l ini owego ax+b = c. " << endl :
cout << "Podaj a . " << endl :
c1n >> a :
i f ( a == O)
{
cout << "Ni edozwol ona wartosc wspol czynni ka . Naci sni j dowolny klawi sz. " :
}
el se
{
cout << "Podaj b. " << endl :
ci n >> b:
cout << "Podaj c. " << endl :
Cln >> C;
x
= ( c-b) /a :
cout << fi xed :
cout << setpreci sion(2) :
li ' li
cout << "D l a << b << c = << c:
a = " << a << " , b = "
I I I I
cout << " wartosc x = " << x << << endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
26 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Rezt1ltat działania programu można zobaczyć na rysunku 2.4.
Program oblicza wartosc x z rownania liniowego ax+b = c.
Podaj a.
1
Podaj b.
2
Podaj c.
3
Dla a = 1.00, b = 2.00, c = 3.00 wartosc x = 1.00.
Rysunek 2.4. Efekt dziaÅ‚ania prog1żÿan1u Zadanie 2.4
ZADANIE
Napisz program, w którym t1żytkownik zgadt1je liczbę losową
z przedziału od O do 9 generowaną przez komputer.
Wskazówka
W programie należy zastosować i nstru kcję (makro) random() .
PrzykÅ‚adowe 1żÿozwiqzanie - listing 2.5
#i ncl ude li Zadani e 2. 5
#i ncl ude
#i ncl ude
ma i n ( )
{
i nt l osuj_l i czbe , zgadnij_l i czbe :
cout << "Program l osuje l i czbe od O do 9. Zgadni j ja . " << endl :
randomi ze( ) :
l osuj_l i czbe = random( lO) :
ci n >> zgadni j_l i czbe :
i f (zgadni j_l i czbe == l osuj_l i czbe )
{
cout << "Gratul acje! Zgadl es l i czbe ! " << endl :
}
el se
{
Rozdzi ał 2. " Pod ejmuj emy decyzje w progr ami e 27
cout << "Ba rdzo mi przykro . ale wyl osowana l i czba to : " <<
l osuj_l i czbe << " . " << endl :
}
getch ( ) : // czeka na naci sni eci e dowol nego kl awi sza
}
Za losowanie liczby przez komputer odpowiadajÄ… w programie na­
stępujące linijki kodt1:
randomi ze ( ) :
l osuj_l i czbe = random( lO ) :
Inst1't1kcja (makro) random( 10) zwraca liczbÄ™ pseudolosowÄ… z zakrest1
od O do 9 (tj . 10-1).
Instrukcja (makro) randami ze ( ) inicjaliz11je generator liczb pset1dolo­
sowych (tzn. ustala jego wartość początkową) .
Rezt1ltat działania program11 można zobaczyć na ryst1nk11 2. 5.
Program losuje liczbe od O do 9. Zgadnij ja.
1
Bardzo mi przykro, ale wylosowana liczba to: 4.
Rysunek 2.5. Efe dzialania prog1żÿan1u Zadanie 2.5
28 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
W i11 rozdziale przedstawi1ny owe zadania wraz z przy adowy1ni
roz qzania111i z korzystanien1 iteracji, czyli popularnych pętli. O ile
n1lodzi progran1iÅ›ci nie n1ajq problen1u z progra1nan1i, w órych ko­
rzystano instrukcjÄ™ for, to zan1iana jej na do . . . whi 1 e 01·az whi 1 e po­
woduje pewne trudnoÅ›ci. Proste przyklady z użycien1 instrukcji for zo­
staly więc rozwiązane zarówno z instrukcją do . . . whi 1 e, jak i whi 1 e.
Iteracja (łac. iteratio powtarzanie) to czynność powta1,zania (naj-
częściej wieloki'otnego) tej samej albo wielu różnych instrtlkcji w pętli.
w języku c+ + istnieją trzy instrukcje iteracyjne:
O for (dla),
O do . . . whi 1 e (powtarzaj),
O whi 1 e (dopóki).
Pętlę for stosujemy w syt11acji, kiedy dokładnie wiemy, ile razy ma
ona zostać wykonana. Istnieje wiele wa1'iantów tej pętli, ale zawsze
możemy wyróżnić trzy główne części.
1. Inicjalizacja to zwykle instrukcja przypisania stosowana do
11stawienia początkowej wartości zmiennej sterującej pętlą.
2. Warunek jest wyrażeniem relacyjnym określającym moment
zakończenia wykonywania pętli.
3. Inkrementacja (zwiększanie) 111b dekrementacja (zmniejszanie)
defini11je sposób modyfikacji zmiennej sterującej pętlą po
zakończeni11 każdego przebiegu (powtó1,zenia).
30 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Te trzy główne składowe oddzielone są od siebie średnikami.
PÄ™tla for wykonywana jest tak dÅ‚11go, dopóki wartość war11nk11 wy­
nosi true. Gdy wa1,11nek osiągnie wartość fal se, działanie prog1,amt1
jest kontyn11owane od pie1,wszej instrt1kcji znajd11jącej się za pętlą.
W p1,zeciwieństwie do Turbo Pascala w języku C+ + zmienna ster11-
jÄ…ca pÄ™tlÄ… for nie m11si być typ11 caÅ‚kowitego, znakowego 111b logicz­
nego . Może być ona np. typu fl oat.
Pętla ta może być wykonywana tyle razy, ile wa1,tości znajd11je się
w przedziale
inicja lizacja: warunek: zwiększanie
lub
inicja lizacja : warunek : zmn1eJszan1e
Ogólna postać tej instrt1kcji jest następt1jąca:
for (inicja lizacja : warunek: zwiększanie)
{
I I instrukcje
}
lub
for (inicja lizacja : warunek: zmniejszanie )
{
I I instrukcje
}
W język11 C + + jest możliwa zmiana przyrostu zmiennej sterującej
pętlą.
Kolejną instrukcją iteracyjną jest do . . . whi l e. Jej ogólna postać jest
następt1jąca:
do
{
I I instrukcje
}
whi l e (warunek) :
Cechą charakterystyczną instrukcji iteracyjnej do . . . whi l e jest to, że
bez wzglÄ™du na wartość zmiennej warunek pÄ™tla mt1si zostać wyko­
nana co najmniej jeden raz. Program po napotkaniu instr11kcji do . . .
whi l e wchodzi do pÄ™tli i wykon11je inst1·1lkcje znajd11jÄ…ce siÄ™ w nawia­
sach klamrowych {}, a następnie sprawdza, czy wart1nek jest spełniony.
Rozdzi ał 3. " I t er acj e 31
Jeśli tak, wraca na początek pętli, natomiast jeśli warunek osiągnie
wartość fal se (niep1,awda), pętla się zakończy.
Ostatnią instrl1kcją iteracyjną jest wh i l e. Jej ogólna postać jest nastę-
"
plIJÄ…ca:
whi l e (warunek)
{
I I instrukcje
}
CechÄ… charakterystycznÄ… tej instr11kcji jest sprawdzenie war11nk11
jeszcze p1,zed jej wykonaniem. W szczególnym p1,zypadkt1 pętla może
nie zostać wcale wykonana. Instrukcja whi l e powoduje wykonywanie
instrl1kcji tak dłt1go, dopóki war11nek jest prawdziwy.
ZADANIE
Napisz program, który za pomocą instrukcji for dla danych
wartości x zmieniających się od O do 10 oblicza wartość
=
funkcji y 3x.
Przy adowe 1żÿozwiqzanie - listing 3.1
#i ncl ude I I Zadanie 3. 1
#i ncl ude
ma i n ( )
{
i nt X, y;
y 3x
cout << "Program obl i cza wartosc funkcji = dl a x zmi eni ajacego si e
żÿod O do 10." << endl :
for (x = O : x <= 10: x++ )
{
y = 3*x :
"
y
cout << "x = " << x << ' \t' << y = " << << endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
w pętli
for (x = O : <= 10: x++ )
x
32 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
kolejne wartości x, zmieniające się a11tomatycznie od O (inicjalizacja) do
10 (wa1,11nek) z krokiem 1 (zwiększanie), będą podstawiane do wzoru
y = 3*x :
a nastÄ™pnie zostanÄ… wyÅ›wietlone na ekranie. Znak ' \ t' oznacza przej­
ście do następnej pozycji w tab11lacji linii.
Rez11ltat działania program11 można zobaczyć na rys11nk11 3 . 1.
Program oblicza wartosc funkcj i y = 3x dla x zmieniajacego
sie od O do 10.
x = O y = O
x= 1 y = 3
x = 2 y = 6
x = 3
x = 4 y= 12
x = 5
x = 6 y = 18
x = 7 y= 21
x = 8
x = 9
x= 1 0 y = 30
Rysunek 3. 1. Efe dziaÅ‚ania prog1żÿan1u Zadanie 3. 1
ZADANIE
Napisz program, który za pomocą inst1,ukcji do . . . whi 1 e dla
danych wartoÅ›ci x zmieniajÄ…cych siÄ™ od O do 10 oblicza war­
tość f11nkcji y = 3x.
Przy adowe 1żÿozwiqzanie - listing 3.2
#i ncl ude I I Zadanie 3.2
#i ncl ude
ma i n ( )
{
X Y
i nt = 0 , = 0 :
=
cout << "Program obl i cza wartosc funkcji y 3x dl a x zmi eni ajacego si e
żÿod O do 10 . " << endl :
Rozdzi ał 3. " I t er acj e 33
do
{
y = 3*x :
11 y << endl :
11Y 11 <<
X 11 ' \ t' << =
= << x <<
<<
cout
}
whi l e (x <= 10 ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
. . . whi l e
Pętla do
do
{
y = 3*x :
11
11 11Y
cout << "x = << x << ' \t' << = << y << endl :
}
whi l e (x <= 10 ) :
nie posiada wbl1dowanego mechanizmu zmiany ste1't1jÄ…cej niÄ… zmien­
nej, dlatego m11simy do niej ten mechanizm dobt1dować. Rolę zmiennej
ster11jÄ…cej peÅ‚ni t11taj x. ZmiennÄ… tÄ… powinniÅ›my przed pÄ™tlÄ… wyzero­
wać, stąd zapis
X
= O:
Następnie x należy zwiększać o krok, który w naszym przypadk11
wynosi 1. Ilust1'uje to następująca linijka kodu:
x++ :
Pętla będzie powtarzana tak dłl1go, aż zostanie spełniona zależność
x <= 10. Zwróćmy liwagę, że warunek sprawdzający akończenie
działania pętli, tzn. whi 1 e ( x <= 10) , znajd11je się na jej końcu.
ZADANIE
Napisz program, który za pomocą instrukcji whi 1 e dla danych
wartości x zmieniających się od O do 10 oblicza wartość
funkcji y = 3x.
Przy adowe 1żÿozwiqzanie - listing 3.3
#i ncl ude I I Zadanie 3.3
#i ncl ude
ma i n ( )
{
34 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
i nt x = O , y = O :
cout << '' Program obl i cza wartosc funkcji y = 3x dl a x zmi eni ajacego si e
11
żÿod O do 10 . << endl :
whi l e (x <= 10)
{
y = 3*x :
11
11Y << y << endl :
11 ' \ t' << =
11X << x <<
<< =
cout
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Pętla whi l e, podobnie jak do . . . wh i l e, nie posiada wbt1dowanego
mechanizmu zmiany stert1jącej nią zmiennej, musimy więc do niej ten
mechanizm dob11dować. Rolę zmiennej ste1't1jącej pełni tt1taj zmienna x.
whi l e (x <= 10)
{
y = 3*x :
"
" ' \t' "
cout << "x = << x << << y = << y << endl :
}
Zmienną x powinniśmy przed pętlą wyze1,ować, zatem
X =
O:
Następnie należy ją zwiększać o krok, któI'Y w naszym przypadkt1
wynosi 1. Ilustruje to następująca linijka kodu:
PÄ™tla bÄ™dzie powtarzana tak dÅ‚t1go, aż stanie siÄ™ prawdziwa zależ­
ność x <= 10. Zwróćmy t1wagÄ™, że wart1nek sprawdzajÄ…cy zakoÅ„cze­
nie działania pętli, tzn. whi l e ( x <= 10), znajdt1je się na jej początkt1.
ZADANIE
Napisz p1,ogram, który za pomocą inst1,ukcji for wyświetla
liczby całkowite od 1 do 20.
Przy adowe 1żÿozwiqzanie - listing 3.4
#i ncl ude I I Zadanie 3. 4
#i ncl ude
Rozdzi ał 3. " I t er acj e 35
ma i n ( )
{
i nt i :
<<
cout << "Program wyswi etl a l i czby cal kowi te od 1 do 20 . " endl :
for ( i = 1 : i <= 20 : i++)
{
i f (i < 20)
{
I I I I "
cout << i <<
'
}
el se
{
I I 11 "
cout << i << .
'
}
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1 3. 2.
Program wyswietla liczby calkowite od 1 do 20.
1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20.
Rysunek 3. 2. Efe dziaÅ‚ania prog1żÿan1u Zadanie 3.4
ZADANIE
Napisz program, który za pomocÄ… instrukcji do . . . whi 1 e wy­
świetla liczby całkowite od 1 do 20.
Przy adowe rozwiÄ…zanie - listing 3.5
#i ncl ude I I Zadanie 3. 5
#i ncl ude
ma i n ( )
{
i nt i = 1: I I ustalenie wartosci poczatkowej
cout << "Program wyswi etl a l i czby cal kowi te od 1 do 20 . " << endl :
do
{
i f ( i < 20 )
36 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
{
li "
cout << i << "
"
}
el se
{
Å‚ I I I
"
cout << i << "
"
}
l++:
}
whi l e (i <= 20 ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program, który za pomocą instrt1kcji whi l e wyświetla
liczby całkowite od 1 do 20.
Przy adowe rozwiÄ…zanie - listing 3. 6
#i ncl ude I I Zadanie 3. 6
#i ncl ude
ma i n ( )
{
i nt i = 1: I I ustalenie wartosci poczatkowej
cout << "Program wyswi etl a l i czby cal kowite od 1 do 20 . " << endl :
whi le (i <= 20)
{
i f (i < 20)
{
li
.
cout << i << "
"
}
el se
{
, , 11 "
"
cout << i <<
"
}
++ :
i
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rozdzi ał 3. " I t er acj e 37
ZADANIE
Napisz program, który za pomocą instr1ikcji for s11m11je liczby
całkowite od 1 do 100.
Przy adowe 1żÿozwiqzanie - listing 3. 7
#i ncl ude I I Zadanie 3. 7
#i ncl ude
ma i n ( )
{
i nt i , suma = O :
cout << "Program sumuje l i czby cal kowi te od 1 do 100 . " << endl :
for ( i = 1: i <= 100 : i++)
{
suma = suma+1 :
}
cout << "Suma l i czb cal kowi tych od 1 do 100 wynosi " << suma << " " <<
żÿendl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Za s11mowanie liczb caÅ‚kowitych od 1 do 100 odpowiedzialne sÄ… na­
stępujące linijki kod11:
for ( i = 1: i <= 100 : i++)
{
suma = suma+i :
}
Oczywiście przed pętlą zmienna suma m11si zostać wyzerowana, stąd
"
zapis
suma = O:
Rez11ltat działania program11 można zobaczyć na rys11nk11 3 . 3.
Program sumuje liczby calkowite od 1 do 100.
Suma liczb calkowitych od 1 do 100 wynosi 5050.
Rysunek 3. 3. Efe dziaÅ‚ania prog1żÿan1u Zadanie 3. 7
38 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz progi,am, któI'Y za pomocą insh'ukcji do . . . whi l e sl1-
m11je liczby całkowite od 1 do 100.
Przy adowe 1żÿozwiqzanie - listing 3.8
#i ncl ude I I Zadanie 3.8
#i ncl ude
ma i n ( )
{
i nt i = l, suma = O : I I ustalenie wartosci poczatkowych
cout << "Program sumuje l i czby cal kowi te od 1 do 100 . " << endl :
do
{
suma - suma+1 :
}
whi l e (i <= 100) :
li li
<<
cout "Suma l i czb cal kowi tych od 1 do 100 wynosi " << suma << <<
"
żÿendl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz p1,ogram, który za pomocą insh'llkcji whi l e s11m11je
liczby całkowite od 1 do 100.
Przy adowe rozwiÄ…zanie - listing 3.9
#i ncl ude I I Zadanie 3.9
#i ncl ude
ma i n ( )
{
= =
i nt i l, suma O : I I ustalenie wartosci poczatkowych
cout << "Program sumuje l i czby cal kowi te od 1 do 100 . " << endl :
whi l e (i <= 100 )
{
suma = suma+1 :
Rozdzi ał 3. " I t er acj e 39
·
i ++
"
}
cout << "Suma li czb cal kowitych od 1 do 100 wynosi " << suma << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz p1żÿogram, który za pomocÄ… instrukcji for s11m11je liczby
parzyste w przedziale od 1 do 100.
Wskazówka
Należy skorzystać z właściwości operatora mod u Io %.
Przy adowe 1żÿozwiqzanie - listing 3 . 1 O
#i ncl ude I I Zadanie 3.1 O
#i ncl ude
ma n ( )
i
{
i nt i , suma = O :
cout << "Program sumuJe l i czby parzyste w przedzi ale od 1 do 100 . " <<
żÿendl :
for ( i = 1: i <= 100 : i++)
{
i f (i %2 == o)
suma = suma+1 :
}
cout << "Suma l i czb pa rzystych z przedzi al u od 1 do 100 wynosi " << suma
żÿ<< " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Za s11mowanie liczb parzystych z przedziaÅ‚11 od 1 do 100 odpowie­
dzialne są następujące linijki kodu:
for ( i = 1: i <= 100 : i++)
{
==
i f (i %2 o)
suma = suma+i :
}
40 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Do wyodrębnienia liczb parzystych wykorzystaliśmy właściwości
operatora modulo oznaczonego symbolem %. Użyliśmy w tym cel11
zapisu i %2 == O jeśli reszta z dzielenia całkowitego zmiennej i %2
wynosi zeI'O, to mamy do czynienia z liczbÄ… parzystÄ…, któ1'Ä… dodaje­
my do zmiennej s u a.
Rezultat działania program11 można zobaczyć na rysunk11 3 .4.
Program sumuje liczby parzyste w przedziale od 1 do 100.
Suma liczb parzystych z przedzialu od 1 do 100 wynosi 2550.
Rysunek 3.4. Efekt dziaÅ‚ania p1żÿog1żÿa111u Zadanie 3.1 O
ZADANIE
Napisz program, który za pomocÄ… insh'11kcji do . . . whi 1 e su­
mt1je liczby parzyste w przedziale od 1 do 100.
Wskazówka
Należy skorzystać z właściwości operatora mod u Io %.
PrzykÅ‚adowe 1żÿozwiqzanie - listing 3 . 11
#i ncl ude I I Zadanie 3. 11
#i ncl ude
ma i n ( )
{
i nt i , suma O :
=
cout << "Program sumuje l i czby parzyste w przedzi al e od 1 do 100 . " <<
żÿendl :
do
{
i f (i %2 == o)
suma = suma+1 :
·
i++
'
}
whi l e < 100) :
(i =
cout << "Suma l i czb pa rzystych z przedzi al u od 1 do 100 wynosi " << suma
żÿ<< " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rozdzi ał 3. " I t er acj e 41
ZADANIE
Napisz program, któI'Y za pomocą instrl1kcji whi l e sl1m11je
liczby parzyste w przedziale od 1 do 100.
Wskazówka
Należy skorzystać z właściwości operatora modu
Io %.
Przy adowe 1żÿozwiqzanie - listing 3. 12
#i ncl ude I I Zadanie 3.12
#i ncl ude
ma i n ( )
{
i nt i . suma = O :
cout << "Program sumuJe l i czby parzyste w przedzi al e od 1 do 100 . "
żÿ<< endl :
whi l e (i <= 100 )
{
i f (i %2 == o)
suma = suma+1 :
·
i++
'
}
cout << "Suma l i czb pa rzystych z przedzi al u od 1 do 100 wynosi "
żÿ<< suma << " . " << endl ;
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program, który za pomocą instrl1kcji for s11m11je liczby
nieparzyste z p1,zedzialu od 1 do 100.
Wskazówka
Należy skorzystać z właściwości operatora mod u Io % i oznaczonego
sym bo Iem ! operatora negacj i .
Przy adowe rozwiÄ…zanie - listing 3 . 13
#i ncl ude I I Zadanie 3.13
#i ncl ude
42 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ma i n ( )
{
i nt i , suma = O :
cout << "Program sumuJe l i czby ni eparzyste w przedzi al e od 1 do 100 . "
żÿ<< endl :
for ( i = 1: i <= 100 : i++)
{
i f ( ! ( i % 2 == o ) )
suma = suma+1 :
}
cout << "Suma l i czb ni epa rzystych z przedzi al u od 1 do 100 wynosi " <<
żÿsuma << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Za st1mowanie liczb niepa1,zystych od 1 do 1 OO odpowiedzialne sÄ…
następujące linijki kodt1:
for ( i = 1: i <= 100 : i++)
{
i f ( ! ( i % 2 == o ) )
suma = suma+1 :
}
Do wyodrębnienia liczb nieparzystych wykorzystaliśmy właściwości
ope1,atora modt1Å‚o oznaczonego symbolem % oraz wÅ‚aÅ›ciwoÅ›ci ozna­
czonego znakiem ! ope1,atora negacji. D1't1gi z nich p1,zeksztaÅ‚ca wa­
rl1nek prawdziwy w fałszywy, a fałszywy w prawdziwy. Zapis ( ! ( i %2
==
O) ) oznacza, że reszta z dzielenia całkowitego zmiennej i %2 jest
I'óżna od zera, a więc mamy do czynienia z liczbą nieparzystą, którą
dodajemy do zmiennej suma.
Rezt1ltat działania programt1 można zobaczyć na rysunkt1 3. 5.
Program sumuje liczby nieparzyste w przedziale od 1 do 100.
Suma liczb nieparzystych z przedzialu od 1 do 100 wynosi 2500.
Rysunek 3. 5. Efe dziaÅ‚ania p1żÿog1żÿan1u Zadanie 3. 13
Rozdzi ał 3. " I t er acj e 43
ZADANIE
Napisz progi,am, któI'Y za pomocą insh'ukcji do . . . whi l e sl1-
m11je liczby nieparzyste w przedziale od 1 do 100.
Wskazówka
Należy skorzystać z właściwości operatora mod u Io i operatora negacj i ! .
%
Przy adowe 1żÿozwiqzanie - listing 3 . 14
#i ncl ude I I Zadanie 3.14
#i ncl ude
ma i n ( )
{
i nt i . suma = O :
cout << "Program sumuJe l i czby ni epa rzyste w przedzi al e od 1 do 100 . "
żÿ<< endl :
do
{
i f ( ( i % 2 == o ) )
!
suma = suma+1 :
·
i++
'
}
whi l e (i <= 100) :
cout << "Suma l i czb ni epa rzystych z przedzi al u od 1 do 100 wynosi " <<
żÿsuma << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program, który za pomocą instr11kcji whi l e s11m11je
liczby nieparzyste w przedziale od 1 do 100.
Wskazówka
Należy skorzystać z właściwości operatora mod u Io i operatora negacj i ! .
%
Przy adowe 1żÿozwiqzanie - listing 3 . 15
#i ncl ude I I Zadanie 3.15
#i ncl ude
44 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ma i n ( )
{
i nt i , suma = O :
cout << "Program sumuJe l i czby ni epa rzyste w przedzi al e od 1 do 100 . " <<
żÿendl :
whi l e (i <= 100 )
{
i f ( ( i % 2 == o ) )
!
suma = suma+i :
·
i ++
"
}
cout << "Suma l i czb ni epa rzystych z przedzi al u od 1 do 100 wynosi " <<
żÿsuma << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program, który za pomocÄ… instr11kcji for znajd11je naj­
wiÄ™kszÄ… i najmniejszÄ… liczbÄ™ ze zbior11 n liczb losowych z p1,ze­
=
dział11 od O do 99 oraz oblicza ich średnią (w zadaniu n 5) .
Przy adowe rozwiÄ…zanie - listing 3 . 16
#i ncl ude I I Zadanie 3. 16
#i ncl ude
#i ncl ude
#i ncl ude
ma i n ( )
{
con st
i l osc l i czb = 5 :
i nt i :
fl oat l i czba , suma , mi n, max :
cout << "Program l osuje " << i l osc_l i czb << " l i czb z przedzi al u od O do
żÿ99 , " << endl :
cout << "a nastepni e znajduje najmni ejsza i najwi eksza oraz" << endl :
cout << "obl i cza sredni a ze wszystki eh wyl osowariych l i czb . ·· << endl :
suma = O:
randomi ze ( ) :
Rozdzi ał 3. " I t er acj e 45
m1 n = random( l00 ) :
cout << endl :
II
"
11
11
11
cout << Wyl os owano l i czby : << m1 n <<
,
max = mi n:
suma = suma+max:
for ( i = 1: i <= i l osc l i czb- 1: i ++)
{
l i czba = random( lOO ) :
i f (i <= i l osc l i czb-2)
{
11 11 :
cout << l i czba <<
"
}
el se
{
'' "
11
cout << l i czba << .
,
}
i f (max < l i czba ) max = l i czba :
i f ( l i czba < mi n) mi n = l i czba :
suma = suma+l i czba :
}
cout << endl :
11
11
"
11
cout << Najwi eksza l i czba to << max << 11 << endl :
11
11
11
11 n << " << endl :
cout << Najmni ej sza l i czba to << mi
11Sredni a wynosi " << fi xed << setpreci si on( 2) <<
cout <<
11
suma/i l osc l i czb << " 11 << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
W pierwszej kolejności w programie los11jemy liczbę i przypis11jemy
jej wartość mi n.
mi n = random( l00 ) :
W kolejnym krok11 wartości max nadajemy wartość mi n.
max = mi n:
Następnie w pętli pomniejszonej o 1 (for C i = 1 : i <= i l osc l i czb- 1 :
i ++) ) sprawdzamy, czy następna wylosowana liczba jest większa od
poprzedniej . JeÅ›li tak, to staje siÄ™ ona najwiÄ™kszÄ… liczbÄ… (max); w prze­
ciwnym wypadk11 przypis11jemy jest wartość mi n. Il11strt1jÄ… to poniż­
sze linijki:
46 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
i f (max < l i czba ) max = l i czba :
i f ( l i czba < mi n) mi n = l i czba :
Sl1mę wszystkich wylosowanych liczb wyliczają następ11jące linijki
= =
kod11: suma suma+max (przed pętlą) i suma suma+l i czba (w pętli).
/
Srednia ze wszystkich liczb jest natomiast obliczana i wyświetlana na
ekranie przez taki fragment kodu:
cout << "S redni a wynosi ·· << fi xed << setpreci si on ( 2) <<
żÿsuma /i l osc l i czb << " . ·· << endl :
Rezl1ltat działania program11 dla pięciu wylosowanych liczb można
zobaczyć na rysunk11 3 .6.
Program losuje 5 liczb z przedzialu od O do
99,
a nastepnie znajduje najmniejsza i najwieksza oraz
oblicza srednia ze wszystkich wylosowanych liczb.
Wylosowano liczby: 23.
93, 76, 61, 12,
Najwieksza liczba to 93.
Najmniejsza liczba to 12.
Srednia wynosi 53.00.
Rysunek 3. 6. Efekt dziaÅ‚ania p1żÿog1żÿamu Zadanie 3. 1 6
ZADANIE
Napisz program, który za pomocą instr11kcji do . . . whi l e
znajd11je najwiÄ™kszÄ… i najmniejszÄ… liczbÄ™ ze zbioru n liczb loso­
wych z p1żÿzedziaÅ‚11 od O do 99 oraz oblicza ich Å›redniÄ… (w za­
dani11 n = 5).
Przykładowe rozwiązanie - listing 3 . 17
#i ncl ude I I Zadanie 3. 17
#i ncl ude
#i ncl ude
#i ncl ude
ma i n ( )
{
con st
i l osc l i czb = 5 :
i nt i = 1:
fl oat l i czba , suma . mi n. max :
Rozdzi ał 3. " I t er acj e 47
cout << "Program l osuje " << i l osc_l i czb << " l i czb z przedzi al u od O do
żÿ99 , " << endl :
cout << "a nastepni e znajduje najmni ejsza i najwi eksza oraz" << endl :
cout << "obl i cza s redni a ze wszystki eh wy l osowariych l i czb . ·· << endl :
suma = O:
randomi ze ( ) :
mi n = random( l00 ) :
cout << endl :
li "
cout << "Wyl osowano l i czby : " << mi n << "
,
max = mi n:
suma = suma+max:
do
{
l i czba = random( lOO) :
i f (i <= i l osc l i czb-2)
{
li "
cout << l i czba << "
,
}
el se
{
li li
"
cout << l i czba << .
,
}
i f (max < l i czba ) max = l i czba :
i f ( l i czba < mi n) mi n = l i czba :
suma = suma+l i czba :
i++;
}
whi l e (i <= i l osc l i czb- 1 ) :
cout << endl :
cout << "Najwi eksza l i czba to " << max << " . " << endl :
cout << "Najmni ej sza l i czba to " << mi n << " . " << endl :
<< <<
cout "Sredni a wynosi " << fi xed setpreci si on( 2) <<
suma /i l osc l i czb << " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz prog1,am, któI'Y za pomocÄ… instrtlkcji whi l e znajd11je naj­
wiÄ™kszÄ… i najmniejszÄ… liczbÄ™ ze zbior11 n liczb losowych z prze­
dział11 od O do 99 oraz oblicza ich średnią (w zadani11 n = 5) .
48 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Przy adowe 1żÿozwiqzanie - listing 3 . 18
#i ncl ude I I Zadanie 3.18
#i ncl ude
#i ncl ude
#i ncl ude
ma i n ( )
{
con st
i l osc l i czb = 5 :
i nt i = 1:
fl oat l i czba , suma . mi n. max :
cout << "Program l osuje " << i l osc_l i czb << " l i czb z przedzi al u od O do
żÿ99 , " << endl :
cout << "a nastepni e znajduje najmni ejsza i najwi eksza oraz" << endl :
<< <<
cout "obl i cza sredni a ze wszystki eh wyl osowariych l i czb . ·· endl :
suma = O:
randomi ze ( ) :
mi n = random( lOO) :
cout << endl :
li "
cout << "Wyl osowano l i czby : " << m1 n << "
,
max = mi n:
suma = suma+max:
whi l e (i <= i l osc l i czb - 1)
{
l i czba = random( l00 ) :
i f (i <= i l osc l i czb-2)
{
li "
cout << l i czba << "
,
}
el se
{
"
li li
cout << l i czba << .
,
}
i f (max < l i czba ) max = l i czba :
i f ( l i czba < mi n) mi n = l i czba :
suma = suma+l i czba :
i ++:
}
Rozdzi ał 3. " I t er acj e 49
cout << endl :
cout << "Maksymal na l i czba to " << max << " . " << endl :
cout << "Mi ni mal na l i czba to " << mi n << " . " << endl :
cout << "Sredni a wynosi " << fi xed << setpreci si on(2) << suma/
11 11
"
żÿi l osc l i czb << << en dl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program wyświetlający tabliczkę mnożenia dla liczb
od 1 do 1 OO z wykorzystaniem podwójnej pętli for.
Przy adowe rozwiÄ…zanie - listing 3 . 19
#i ncl ude I I Zadanie 3.19
#i ncl ude
#i ncl ude
ma i n ( )
{
const n = 10 :
i nt wi ersze . kol umny :
cout << "Program wyswi etl a tabli czke mnozeni a dla l i czb od 1 do 100 . "
żÿ<< endl :
cout << endl :
for (wi ersze = 1: wi ersze <= n: wi ersze++ )
{
for ( kol umny = 1: kol umny <= n: kol umny++ )
{
cout << wi ersze*kol umny << ' \t' :
}
cout << endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania programt1 można zobaczyć na rysunkt1 3. 7.
50 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Program wyswietla tabliczke mnozenia dla liczb od 1 do 100.
1 2 3 4 5 6 7 8 9 10
2 4 6 8 1 o 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Rysunek 3. 7. Efekt dziaÅ‚ania p1żÿogra111 u Zadanie 3 . 19
ZADANIE
Napisz program wyświetlający tabliczkę mnożenia dla liczb
od 1 do 100 z wykorzystaniem podwójnej pętli do . . . whi 1 e.
PrzykÅ‚adowe 1żÿozwiqzanie - listing 3.20
#i ncl ude I I Zadanie 3.20
#i ncl ude
#i ncl ude
ma i n ( )
{
const n = 10 :
i nt wi ersze . kol umny :
Rozdzi ał 3. " I t er acj e 51
cout << "Program wyswi etl a tabli czke mnozeni a dla l i czb od 1 do 100 . "
<< endl :
cout << endl :
wi ersze = 1:
do
{
kol umny = 1 :
do
{
cout << wi ersze*kol umny << ' \t' :
kol umny++ :
}
whi l e ( kol umny <= n) :
wi ersze++ :
cout << endl :
}
whi l e (wi ersze <= n) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program wyświetlający tabliczkę mnożenia dla liczb
od 1 do 100 z wyko1żÿzystaniem podwójnej pÄ™tli whi l e.
Przy adowe rozwiÄ…zanie - listing 3 .21
#i ncl ude // Zadanie 3.21
#i ncl ude
#i ncl ude
ma i n ( )
{
const n = 10 :
i nt wi ersze . kol umny :
cout << "Program wyswi etl a tabli czke mnozeni a dla l i czb od 1 do 100 . "
<< endl :
cout << endl :
wi ersze = 1:
whi l e (wi ersze <= n)
{
kol umny = 1:
whi l e ( kol umny <= n)
{
52 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
cout << wi ersze*kol umny << ' \t' :
kol umny++ :
}
wi ersze++ :
<<
cout endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program, który wyświetla duże liteI'Y alfabet11 od A do
Z i od Z do A, z wykorzystaniem pętli for.
Przy adowe 1żÿozwiqzanie - listing 3.22
#i ncl ude I I Zadanie 3.22
#i ncl ude
#i ncl ude
ma i n ( )
{
char znak:
cout << "Program wyswi etl a duze l i tery al fabetu od A do Z i od Z do A. "
<< endl :
cout << endl :
for (znak = ' A' : zna k <= ' Z' : znak++ )
{
i f (znak < · Z· )
{
li "
cout << znak << "
,
}
el se
{
11 I I "
cout << znak << .
,
}
}
<<
cout endl :
for (znak = ' Z' : zna k >= ' A' : znak- - )
{
i f (znak > · A· )
{
li "
cout << znak << "
,
Rozdzi ał 3. " I t er acj e 53
}
el se
{
11 Å‚ I
"
cout << znak << "
"
}
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1 3. 8.
Program wyswietla duze litery alfabetu od A do Z i od Z do A.
I
A B C
V,
, , , D, J, K, L, N, O, P, S,
E, F, G, H, , M, Q, R, T, U,
Z.
W, X, Y,
I
Z, S, P, O, N, L, K, J, D,
Y, X, W,
V, U, T, R, Q, M, , H, G, F, E,
C B A.
, ,
Rysunek 3.8. Efekt dziaÅ‚ania p1żÿog1żÿan1u Zadanie 3.22
ZADANIE
Napisz prog1,am, który wyświetla d11że litery alfabett1 od A do
Z i od Z do A, z wykorzystaniem pętli do . . . whi l e.
Przykładowe rozwiązanie - listing 3.23
#i ncl ude I I Zadanie 3.23
#i ncl ude
#i ncl ude
ma i n ( )
{
char znak:
cout << "Program wyswi etl a duze l i tery al fabetu od A do Z i od Z do A. "
<< endl :
<<
cout endl :
znak = ' A' :
do
{
i f (znak < · Z· )
{
54 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
11 I I "
cout << znak <<
,
}
el se
{
cout << znak << " . " :
}
zna k++ :
}
whi l e ( znak <= ' Z' ) :
cout << endl :
znak = ' Z' :
do
{
i f (znak > · A· )
{
11 II "
cout << znak <<
'
}
el se
{
cout << znak << " . " :
}
znak- - :
}
whi l e ( znak >= ' A' ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
ZADANIE
Napisz program, który wyświetla duże litery alfabetl1 od A do
Z i od Z do A, z wyko1,zystaniem pętli wh i l e.
Przykładowe rozwiqzanie listing 3.24
#i ncl ude I I Zadanie 3.24
#i ncl ude
#i ncl ude
ma i n ( )
{
char znak :
cout << "Program wyswi etl a duze l i tery al fabetu od A do Z i od Z do A. "
<< endl :
Rozdzi ał 3. " I t er acj e 55
cout << endl :
znak = · A· :
whi l e ( znak <= ' Z ' )
{
i f ( znak < · Z· )
{
11 li "
cout << znak <<
,
}
el se
{
11 11 "
"
cout << znak <<
"
}
znak++ :
}
cout << endl :
znak = · Z· :
whi l e ( znak >= ' A' )
{
i f ( znak > · A· )
{
11 li "
cout << znak <<
,
}
el se
{
11 "
''
"
cout << znak <<
"
}
znak- - :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
56 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
"
I
W n1 rozdziale p1·zedstawin1y t owe zadania wraz z rozwiqzanian1i
z wykorzystanien1 tablic jedno- i dwu miaro ch.
Ta bl ice jednowymiarowe
Tablica jest strt1kt1uÄ… danych, która t1możliwia przechowywanie w spo­
sób zorganizowany wielt1 zmiennych tego samego typt1 (całkowitego,
rzeczywistego itd .). Aby 11tworzyć taką strt1kt111'ę musimy dokonać
dekla1,acji tablicy. W deklaracji tej określamy typ wartości, jaki ma
p1,zechowywać tablica, a także liczbę jej elementów. Tablice mogą
być jednowymiarowe, dwuwymiarowe itd .
Ogólna postać deklaracji tablicy jednowymiarowej i związanej z nią
zmiennej jest w języktl c+ + następująca:
typ_tabl icy nazwa_tab licy[rozmiar_tab l icy] :
Przykład poniżej ilustrt1je deklarację tablicy jednowymiarowej typu
całkowitego o nazwie dane zawierającej 10 elementów.
i nt dane [ 1 OJ :
DostÄ™p do elementów tablicy jest I'ealizowany za poÅ›1'ednictwem in­
deks11, który wskazuje dany element. Dla deklaracji w język11 C+ +
o postaci
i nt dane[ 1 OJ :
58 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
pierwszy element tablicy dane ma indeks O, drugi dostępny jest p1,zez
indeks 1 itd. Ostatni element ma indeks równy wymiarowi tablicy po­
mniejszonem11 o 1, czyli 9, co przedstawiono w reprezentacji graficznej
" " "
pon1zeJ.
o 1 2 3 4 5 6 7 8 9
ZADANIE
Napisz program, który w 10-elementowej tablicy jednowy­
miarowej o nazwie dane t1mieszcza liczby od O do 9 (zobacz
poniżej jej reprezentację graficzną) .


u
u -żÿ
-żÿ żÿ
żÿ






'U

' J
żÿ
o

żÿ


żÿ
żÿ
żÿ
o o
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 g
Przy adowe rozwiÄ…zanie - listing 4. 1
#i ncl ude I I Zadanie 4. 1
#i ncl ude
mai n( )
{
const n = 10 :
i nt i , dane[n] :
for ( i = O : i < 1 O : i ++)
{
dane[i J = i :
cout << "dane[" << i << "] = " << dane[i J << endl :
Rozdzi ał 4. " Ta bl i ce 59
}
getch ( ) : 11 czeka na nacisniecie dowolnego klawisza
}
Rezultat działania programt1 można zobaczyć na rysunkt1 4. 1.
dane[O] = O
dane[1] = 1
dane[2] = 2
dane[3] = 3
dane[4] = 4
dane[5] = 5
dane[6] = 6
dane[7] = 7
dane[B] =
8
dane[9] = 9
Rysunek 4. 1. Efe dziaÅ‚ania prog1żÿan1u Zadanie 4. 1
ZADANIE
Napisz p1żÿogram, który w 10-elementowej tablicy jednowymia­
rowej o nazwie dane trmieszcza liczby od 9 do O (zobacz poniżej
jej reprezentacjÄ™ graficznÄ…).

u

-żÿ
u żÿ
-żÿ

żÿ





'U
'
J
o
żÿ


żÿ


żÿ
żÿ żÿ
o g
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
g o
60 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Wskazówka
Zadanie to rozwiążemy poprawnie, zamieniając w zadani u 4.1 linijkę kodu
dane [i J = i :
na następL1jącą:
dane [i J = n-1-i :
Przykładowe rozwiązanie - listing 4.2
#i ncl ucie I I Zadanie 4.2
#i ncl ude
ma i n ( )
{
const n = 10 :
i nt i , dane[n] :
= <
for ( i O : i 1 O : i ++)
{
dane[i ] = n-i - 1:
cout << "dane[" << i << " ] = " << dane[i ] << endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania p1,ogram11 można zobaczyć na I'ysunk11 4.2.
dane[O] = 9
dane[1] =
8
dane[2] = 7
dane[3] = 6
dane[4] = 5
dane[5] = 4
dane[6] = 3
dane[7] = 2
dane[B] = 1
dane[9] = O
Rysunek 4. 2. Efekt dziaÅ‚ania prog1żÿamu Zadanie 4.2
Rozdzi ał 4. " Ta bl i ce 61
Ta bl ice dwuwymiarowe
Tablice dw11wymiarowe deklar11jemy w języku C+ + podobnie jak
jednowymia1,owe. Ogólna postać deklaracji takiej tablicy i związanej
z nią zmiennej jest następt1jąca:
typ_tabl icy nazwa_tab licy[rozmiar_tab l icy] [ rozmiar_tab l icy] :
Dostęp do elementów tablicy jest realizowany za pośrednictwem dwóch
indeksów, które wskazują dany element. Przykład poniżej ilt1str11je
deklarację tablicy dwuwymiarowej 10X 10 typ11 całkowitego .
i nt dane[lOJ[lOJ :
Tablicę dwuwymiarową, jako prod11kt o wymiarach 10X 10, możemy
sobie wyobrazić następ11jąco:
1 2 o o o o o o o o
3 1 o o o o o o o o
o o 1 o o o o o o o
o o o 1 o o o o o o
o o o o 1 o o o o o
o o o o o o o o o
1
o o o o o o 1 o o o
o o o o o o o 1 o o
o o o o o o o o 1 o
o o o o o o o o o 7
WartoÅ›ci liczbowe możemy wpisywać do tablicy wierszami lub ko­
lumnami. Pierwszy element tablicy dane [OJ [OJ jest I'ówny 1, element
dane[OJ[l] to 2, element dane[l][OJ wynosi 3 itd . Ostatni element ta­
blicy ma indeks równy jej wymiarowi minus 1, czyli 9 w naszym
=
przypadk11 dane[9J [9] 7.
62 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz program, któI'Y w zadeklarowanej tablicy dwl1wymia­
rowej 1Ox1O o nazwie maci erz eszcza na przekÄ…tnej liczbÄ™ 1,
a poza przekątną O. Dodatkowo program powinien obliczać
sumę elementów wyróżnionych w tablicy, tj . tych znajd11jących
siÄ™ na jej przekÄ…tnej .
1 o o o o o o o o o
o 1 o o o o o o o o
o o 1 o o o o o o o
o o o 1 o o o o o o
o o o o 1 o o o o o
o o o o o 1 o o o o
o o o o o o 1 o o o
o o o o o o o 1 o o
o o o o o o o o 1 o
o o o o o o o o o 1
Przy adowe 1żÿozwiqzanie - listing 4.3
#i ncl ude I I Zadanie 4.3
#i ncl ude
ma i n ( )
{
const i nt n = 10 ;
i nt i , j , suma , maci erz[n][n] :
cout << "Wpi sywani e do tabl i cy l i czby 1 na przekatnej , a O poza ni a . " <<
żÿendl :
cout << endl :
for ( i = O : l < n: i++) I I wpisywanie do tablicy
{
for ( j = O : J < n: j++ )
{
i f ( i == j)
maci erz[i ][j] = 1:
el se
maci erz[i ][j] = O :
}
}
Rozdzi ał 4. " Ta bl i ce 63
I I wyswietlenie zawartosci tablicy
-
for ( i O : i < n: i++)
{
-
for ( j O : J < n: j++ )
{
li li "
cout << maci erz[i ][j] <<
,
}
cout << endl :
}
I I obliczanie sumy liczb znajdujacych sie na przekatnej
suma = O:
cout << endl :
for ( i = O : i < n: i++)
{
suma = suma+maci erz[i J[i J :
}
lf' ''
cout << "Suma el ementow na przekatnej wynosi " << suma << << endl :
getchO; li czeka na nacisniecie dowolnego klawisza
}
Do wpisywania danych do tablicy o nazwie maci erz l1żyliśmy dwóch
pętli for. Linijki kod11 z instr11kcją war11nkową i
f:
i f (i == j )
-
maci erz[i ][j] 1:
el se
-
maci erz[i ][j] O :
odpowiadajÄ… za wpisywanie liczby 1 na p1'zekÄ…tnej i liczby O poza niÄ….
CaÅ‚ość kod11 limieszczajÄ…cego w tablicy liczby 1 na przekÄ…tnej i licz­
by O poza przekątną znajduje się poniżej .
-
for ( i o : < n: i++) I I wpisywanie do tablicy
{
-
for ( j O : < n: j++ )
J
{
i f ( i == j)
-
maci erz[i ][j] 1 :
el se
-
maci erz[i ][j] o :
}
}
64 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Za wyÅ›wietlenie zawartoÅ›ci tablicy na ekranie komputera odpowia­
dają następujące linijki kodl1:
for ( i = O : l < n: i++)
{
for ( j = O : J < n: j++ )
{
"
cout << maci erz[i ][j] << " :
}
cout << endl :
}
Obliczanie s11my elementów znajdujących się na przekątnej należy
do następ11 jących linijek:
for ( i = O : i < n: i++)
{
suma = suma+maci erz[ i ] [i ] :
}
OczywiÅ›cie zmiennÄ… suma trzeba wczeÅ›niej wyze1żÿować:
suma = O:
Rez11ltat działania program11 można zobaczyć na rysunk11 4.3.
Wpisywanie do tablicy liczby 1 na przekatnej, a O poza nia.
1 000000000
0 1 00000000
00 1 0000000
0001 000000
00001 0 0000
000001 0 000
000000 1 000
00000 0 0 1 00
00000 0 0 0 1 0
0000000001
Suma elementow na przekatnej wynosi 10.
Rysunek 4. 3. Efe dziaÅ‚ania prog1żÿamu Zadanie 4.3
Rozdzi ał 4. " Ta bl i ce 65
ZADANIE
Napisz prog1,am, który w zadeklarowanej tablicy dw11wymia­
rowej 10 x10 o nazwie maci erz trmieszcza na przekÄ…tnej liczby
od O do 9, a poza p1·zekÄ…tnÄ… O. Dodatkowo program powinien
obliczać sumę elementów wyróżnionych w tablicy, tj . znajdt1-
jÄ…cych siÄ™ na jej p1,zekÄ…tnej .
o o o o o o o o o o
o 1 o o o o o o o o
o o 2 o o o o o o o
o o o 3 o o o o o o
o o o o 4 o o o o o
o o o o o 5 o o o o
o o o o o o 6 o o o
o o o o o o o 7 o o
o o o o o o o o 8 o
o o o o o o o o o 9
Wskazówka
Zadanie to rozwiążemy poprawnie, zamieniając w zadani u 4.3 linijkę kodu
maci erz[i ] [j] = 1 :
na następL1jącą:
maci erz[i ] [j] = i :
Przy adowe rozwiÄ…zanie - listing 4.4
#i ncl ude I I Zadanie 4.4
#i ncl ude
ma i n ( )
{
const i nt n = 10 :
i nt i , j , suma , maci erz[nJ[nJ :
cout << "Wpi sywani e do tabl i cy l i czb od O do 9 ria przekatnej ,
żÿa O poza ni a . " << endl :
cout << endl :
66 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
for ( i - O : i < n: i++)
{
for ( j - O : < n: j++ )
J
{
i f ( i == j)
maci erz[i ][j] = i :
el se
maci erz[i ][j] = O :
}
}
I I wyswietlenie zawartosci tablicy
for ( i - O : i < n: i++)
{
for ( j - O : < n: j++ )
J
{
li li "
cout << maci erz[i ][j] <<
,
}
cout << endl :
}
I I obliczanie sumy liczb znajdujacych sie na przekatnej
suma = O:
cout << endl :
for ( i = O : i < n: i++)
{
suma = suma+maci erz[ i J [i J :
}
I I I I
"
cout << "Suma l i czb na przekatnej wynosi << suma << << endl :
getch ( ) I I czeka na nacisniecie dowolnego klawisza
:
}
Rezt1ltat działania p1,ogramt1 można zobaczyć na I'ysunkt1 4.4.
ZADANIE
Napisz p1,ogram, który w zadeklarowanej tablicy dwuwymia­
rowej 10x10 o nazwie maci erz (jej inte1,pretacja graficzna po­
niżej) trmieszcza liczby 1 i O. Program powinien dodatkowo ob­
liczać st1mę wyróżnionych elementów.
Rozdzi ał 4. " Ta bl i ce 67
Wpisywanie do tablicy liczb od O do 9 na przekatnej, a O
"
poza n1a.
0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
0 0 0 0 4 0 0 0 0 0
0 0 0 0 0 5 0 0 0 0
0 0 0 0 0 0 6 0 0 0
0 0 0 0 0 0 0 7 0 0
0 0 0 0 0 0 0 0 8 0
0 0 0 0 0 0 0 0 0 9
Suma liczb na przekatnej wynosi 45.
Rysunek 4.4. Efe dziaÅ‚ania prog1żÿan1u Zadanie 4.4
o o o o o o o o o 1
o o o o o o o o 1 o
o o o o o o o 1 o o
o o o o o o 1 o o o
o o o o o 1 o o o o
o o o o 1 o o o o o
o o o 1 o o o o o o
o o 1 o o o o o o o
o 1 o o o o o o o o
1 o o o o o o o o o
Wskazówka
Zadanie to rozwiążemy poprawnie, zamieniając w zadani u 4.3 linijki kodu
i f ( i == j )
maci erz[i ] [j] = 1:
el se
maci erz[i ] [j] = O :
68 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
na następujące:
i f ( n == i +j+l)
maci erz[i ] [j] - 1:
el se
maci erz[i ] [j] - O :
Sumę wyróżnionych elementów obliczymy, zastępując l i nij ki
fo r ( i = O : i < n : i ++ )
{
suma = suma+maci erz[i ] [i ] :
}
. . .
pon 1zszym 1 .
for (i = O : i < n: i++)
{
suma = suma+maci erz[i ][n-i - 1] :
}
Przy adowe 1żÿozwiqzanie - listing 4.5
#i nc I I Zadanie 4.5
l ude
#i ncl ude
ma i n ( )
{
const i nt n = 10 :
i nt i , j , suma , maci erz[n][n] :
cout << "Wpi sywani e do tabl i cy l i czb 1 i O oraz i ch wyswi etl eni e. " <<
żÿendl :
cout << endl :
for ( i - O : i < n: i++)
{
for ( j - O : < n: j++ )
J
{
i f ( n == i + j + 1 )
-
maci erz[i ][j] 1:
el se
maci erz[i ][j] - O :
}
}
I I wyswietlenie zawartosci tablicy
for ( i - O : i < n: i++)
{
for ( j - O : < n: j++ )
J
{
'' 11 "
cout << maci erz[i ][j] <<
,
Rozdzi ał 4. " Ta bl i ce 69
}
cout << endl :
}
I I obliczanie sumy liczb wyroznionych w zadaniu
suma = O:
cout << endl :
for ( i = O : i < n: i++)
{
suma = suma+maci erz[ i ] [n-i - 1] :
}
cout << "Suma wyrozni onych w zadani u el ementow wynosi " << suma << " "
żÿ<< endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania p1,ogram11 można zobaczyć na I'ysunk11 4. 5.
Wpisywanie do tablicy liczb 1 i O oraz ich wyswietlenie.
0000000001
00000 0 0 0 1 0
00000 0 0 1 00
000000 1 000
000001 0 000
00001 0 0000
0001 000000
00 1 0000000
0 1 00000000
1 000000000
Suma wyroznionych w zadaniu elementow wynosi 10.
Rysunek 4. 5. Efe dziaÅ‚ania prog1żÿa111u Zadanie 4.5
ZADANIE
Napisz p1,ogram, który w zadeklarowanej tablicy dwuwymia­
rowej 10X10 o nazwie maci erz Uej interpretacja graficzna po­
niżej) t1mieszcza liczby od O do 9. Program powinien dodat­
kowo obliczać s11mę wyróżnionych elementów.
70 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
o o o o o o o o o o
o o o o o o o o 1 o
o o o o o o o 2 o o
o o o o o o 3 o o o
o o o o o 4 o o o o
o o o o 5 o o o o o
o o o 6 o o o o o o
o o 7 o o o o o o o
o 8 o o o o o o o o
9 o o o o o o o o o
Wskazówka
Zadanie to rozwiążemy poprawnie, zamieniając w zadani u 4.5 linijki kodu
i f ( n == i +j+l)
maci erz[i ] [j] - 1:
el se
-
maci erz[i ] [j] O :
na następL1jące:
i f ( n == i +j+l)
maci erz[i ] [j] = i :
el se
maci erz[i ] [j] = O :
Przy adowe rozwiÄ…zanie - listing 4.6
#i ncl ude I I Zadanie 4.6
#i ncl ude
ma i n ( )
{
const i nt n = 10 :
i nt i , j , suma , maci erz[n][n] :
cout << "Wpi sywani e do tabl i cy l i czb od O do 9 i i ch wyswi etl eni e. " <<
żÿendl :
cout << endl :
for ( i - O : i < n: i++)
{
for ( j - O : J < n: j++ )
{
i f ( n == i + j + 1 )
maci erz[i ][j] = i :
el se
Rozdzi ał 4. " Ta bl i ce 7 1
maci erz[i ][j] = O :
}
}
I I wyswietlenie zawartosci tablicy
for ( i = O : i < n: i++)
{
for ( j = O : J < n: j++ )
{
" "
cout << maci erz[i ][j] << .
}
cout << endl :
}
I I obliczanie sumy liczb wyroznionych w zadaniu
suma = O:
cout << endl :
for ( i = O : i < n: i++)
{
suma = suma+maci erz[ i ] [n-i - 1] :
}
cout << "Suma wyrozni onych w tabl i cy el ementow wynosi " << suma << " "
żÿ<< endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania p1,ogram11 można zobaczyć na I'ysunk11 4.6.
Wpisywanie do tablicy liczb od O do 9 i ich wyswietlenie.
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 2 0 0
0 0 0 0 0 0 3 0 0 0
0 0 0 0 0 4 0 0 0 0
0 0 0 0 5 0 0 0 0 0
0 0 0 6 0 0 0 0 0 0
0 0 7 0 0 0 0 0 0 0
0 8 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0
Suma wyroznionych w tablicy elementow wynosi 45.
Rysunek 4. 6. Efe dziaÅ‚ania prog1żÿa111u Zadanie 4. 6
72 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz prog1,am, który w zadeklarowanej tablicy dw11wymia­
rowej 10 x10 11mieszcza w pierwszej koltunnie liczby od O do 9,
w d1,11giej kwadraty tych liczb, natomiast w pozostaÅ‚ych koltun­
nach O (interpretacja graficzna tablicy poniżej). Dodatkowo
p1,ogram powinien obliczać sumę elementów znajdt1jących
siÄ™ w pierwszej kol11mnie 01,az sumÄ™ liczb z kolt1mny drugiej .
o o o o o o o o o o
1 1 o o o o o o o o
2 4 o o o o o o o o
3 9 o o o o o o o o
4 16 o o o o o o o o
5 25 o o o o o o o o
6 36 o o o o o o o o
7 o o o o o o o o
8 64 o o o o o o o o
9 81 o o o o o o o o
Przy adowe 1żÿozwiqzanie - listing 4. 7
#i ncl ude I I Zadanie 4. 7
#i ncl ude
#i ncl ude
ma i n ( )
{
const i nt n = 10 :
i nt i , j , suma . tabl i ca[n][n] :
I I wpisywanie liczb do tablicy
for ( i = O : l < n: i++)
{
for ( j = O : J < n: j++ )
{
i f ( j == O ) tabl i ca [ i [ j = i :
J J
i f ( j == 1) tabl i ca[i ][j] = i *i :
i f ( j > 1) tabl i ca[i ][j ] = O :
}
}
Rozdzi ał 4. " Ta bl i ce 73
I I wyswietlenie zawartosci tablicy
cout << "Za wa rtosc tabl i cy : " << endl :
cout << endl :
for ( i - O : i < n: i++)
{
for ( j - O : J < n: j++ )
{
li li "
cout << setw( 2) << tabl i ca[i ] [j] <<
'
}
cout << endl :
}
suma = O:
for ( i = O : i < n: i++)
{
suma = suma+tabl i ca[i ][OJ :
}
cout << endl :
cout << "Suma l i czb znaj duj acych si e w pi erwszej kol umni e wynosi " <<
żÿsuma << " " << endl :
suma = O:
for ( i = O : i < n: i++)
{
suma = suma+tabl i ca[i ][l] :
}
cout << endl :
cout << "Suma l i czb znaj duj acych si e w drugi ej kol umni e wynosi " << suma
żÿ<< " . " << endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Następ11jące linijki kodu:
for ( i = O : i < n: i++)
{
for ( j = O : j < n: j++ )
{
i f ( j == O ) tabl i ca [i J [ j J = i :
i f (j == 1) tabl i ca[i ][j] = i *i :
i f (j > 1) tabl i ca[i ] [j] = O :
}
}
74 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
sÄ… odpowiedzialne za wpisywanie do tablicy liczb. Do pierwszej ko­
l11mny sÄ… wpisywane liczby od O do 9:
i f ( j == O ) tab l i ca [ i J [ j J = i :
do d1,11giej ich kwadraty:
i f (j == 1) tabl i ca[i ][j ] = i*i :
a do pozostałych kol11mn O:
i f ( j > 1) tabl i ca[i ] [j] = O :
Sumowaniem liczb znajdujÄ…cych siÄ™ w pierwszej kol11mnie zajm11jÄ…
się następujące linijki:
for ( i = O : i < n: i++)
{
suma = suma+tabl ica[i ][OJ :
}
Za s11mowanie liczb z drugiej kol11mny odpowiada następ11jący
fragment kod11 :
for ( i = O : i < n: i++)
{
suma = suma+tabl i ca[i ] [ l] :
}
W programie wykorzystano manipulator setw( i nt n) , który ok1'eśla
szerokość pola n znaków.
cout << setw( 2) << tabl i ca[i ][j] << " " :
Aby mógÅ‚ on f11nkcjonować, należy dodać na poczÄ…tk11 plik nagłów­
kowy:
#i ncl ude
Rez11ltat działania program11 można zobaczyć na rys11nk11 4. 7.
Rozdzi ał 4. " Ta bl i ce 75
Zawartosc tablicy:
0 0 0 0 0 0 0 0 0 0
1 1 o o o o o o o o
2 4 0 0 0 0 0 0 0 0
3 9 0 0 0 0 0 0 0 0
4 16 o o o o o o o o
5 25 o o o o o o o o
636 0 0 0 0 0 0 0 0
749 0 0 0 0 0 0 0 0
864 0 0 0 0 0 0 0 0
9 81 o o o o o o o o
Suma liczb znajdujacych sie w pierwszej kolumnie wynosi 45.
Suma liczb znajdujacych sie w drugiej kolumnie wynosi 285.
Rysunek 4. 7. Efe dzialania p1żÿog1żÿan1u Zadanie 4. 7
ZADANIE
Dane sÄ… dwie tablice dwuwymiarowe 10 X10 o nazwach a i b.
Tablica a zawiera elementy przedstawione poniżej .
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
o 1 2 3 4 5 6 7 8 9
76 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
b
Tablica zawiera same zera. Napisz program, któI'Y przepis11je za­
wartość tablicy a do tablicy b, zamieniajÄ…c kol11mny na wiersze (in­
terpretacja graficzna tablicy wynikowej poniżej).
o o o o o o o o o o
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9
Przy adowe 1żÿozwiqzanie - listing 4.8
#i nc I I Zadanie 4.8
1 ude
#i ncl ude
ma i n ( )
{
const i nt n = 10 :
i nt i , j , a[nJ[nJ . b[nJ[nJ :
I I wpisywanie liczb do tablicy a
= <
for ( i o : i n: i++)
{
for ( j = O : < n: j++ )
J
{
a[i ][j] = j :
}
}
I I przepisywanie liczb z tablicy a do tablicy b
for ( i = O : i < n: i++)
{
for ( j = O : < n: j++ )
J
{
Rozdzi ał 4. " Ta bl i ce 7 7
b[i ][j] = a[j][i ] : li zamiana kolumn na wiersze
}
}
I I wyswietlenie zawartosci tablicy a
11 11
cout << Zawartosc tabl i cy a : << endl :
cout << endl :
for ( i - O : i < n: i++)
{
for ( j - O : < n: j++ )
J
{
11 :
11
cout << a[i ][j] <<
}
cout << endl :
}
cout << endl : I I wyswietlenie pustej linii
li wyswi etl ani e zawa rtosci tabl i cy b
11 11
cout << Zawartosc tabl i cy b : << endl :
cout << endl :
for ( i - O : i < n: i++)
{
for ( j - O : < n: j++ )
J
{
11 :
11
cout << b[i ][j] <<
}
cout << endl :
}
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Następ11jąca linijka kodu:
b[i ][j] = a[j][i ] :
jest odpowiedzialna za zamianÄ™ kolt1mn na wiersze.
Rez11ltat działania p1,ogram11 można zobaczyć na I'ysunk11 4.8.
78 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Zawartosc tablicy a:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
Zawartosc tablicy b:
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4444444444
5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9
Rysunek 4.8. Efe dziaÅ‚ania prog1żÿan1u Zadanie 4.8
ra m
W i11 rozdziale przedstawi1ny powe zadania wraz z przyklado ­
n1i rozwiÄ…zaniami z użycien1 podprogran1ów. U111iejÄ™tność l korzy­
stywania ich w pisanych progran1ach Z kle owocuje szybkin1 przy­
swojenie1n zasad progra111owania obiektowego.
w jÄ™zyku c+ + podprogramy stanowiÄ… pewnÄ… logicznÄ… caÅ‚ość i nazy­
wamy je f11nkcjami. Każda f11nkcja w programie powinna realizować
jakieÅ› ok1'eÅ›lone zadanie, np . obliczać ÅšI'edniÄ… arytmetycznÄ… z okre­
Å›lonych liczb, czytać elementy tablicy lub obliczać nadgodziny za­
tr11dnionego pracownika itd. Gdy p1żÿogram m11si wykonać okreÅ›lone
zadanie, wywoÅ‚11je odpowiedniÄ… f11nkcjÄ™, podajÄ…c jej informacje po­
h'zebne do zrealizowania tego zadania. Komunikacja pomiÄ™dzy funk­
cjami a pozostałą częścią p1,ogram11 odbywa się w ściśle określony
sposób.
W C + + ogólna postać ft1nkcji jest następt1jąca:
typ_wartości nazwa_funkcji ( l i sta_parametrów)
{
dek laracje_zmiennych :
ciÄ…g instrukcji :
}
Każda funkcja stanowi w tym języku spójny, tworzący pewną całość
blok instr11kcji. Jej zawartość należy wyłącznie do niej samej i jest
ona niedostępna dla insh'tlkcji znajd11jących się we wszystkich innych
80 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
f11nkcjach . JedynÄ… możliwoÅ›ciÄ… skorzystania z niej jest jej wywoÅ‚a­
nie. Instrt1kcje, które tworzą główną część funkcji, są 11kryte przed
pozostałą częścią programt1 i jeśli nie korzystają ze zmiennych (lub
danych) globalnych, to nie mają wpływ11 na działanie innych jego
fragmentów; same również nie pozostają pod ich wpływem. Oznacza to,
że instrukcje i dane zdefiniowane w jednej ft1nkcji nie mogÄ… współ­
działać z instr11kcjami i danymi określonymi w innej, ponieważ f11nkcje
mają różny zak1,es. Wszystkie zmienne zdefiniowane wewnątrz nich
nazywamy zmiennymi lokalnymi. Istnieją one tylko w obrębie funkcji
i po wyjściu z nich 11legają zniszczeni11. Dlatego w funkcjach lokalnych
nie można p1,zechowywać wa1,toÅ›ci pomiÄ™dzy ich wywoÅ‚aniami. W jÄ™­
zykt1 C+ + zakres wszystkich ft1nkcji znajduje siÄ™ na tym samym
poziomie. Oznacza to, że nie jest możliwe definiowanie jednej z nich
wewnÄ…trz innej .
ZADANIE
Napisz program obliczajÄ…cy pole prostokÄ…ta . Powinien on
zawierać jeden podprogram: bezparametrową funkcję pol e_
pros tok a ta ( ) , w której zawarty będzie algorytm obliczania pola.
a
Wartości boków i b wprowadzamy z klawiatury. W programie
należy zaÅ‚ożyć, że zmienne a, b 01,az pol e sÄ… typu fl oat (rze­
czywistego) i są one zmiennymi globalnymi. Należy dla nich
p1,zyjąć format wyświetlania ich z dwoma miejscami po kropce.
Przy adowe 1żÿozwiqzanie - listing 5.1
#i ncl ude I I Zadanie 5. 1
#i ncl ude
#i ncl ude
fl oat a . b, pol e:
voi d pol e_prostokata ( ) I I deklaracja i definicja funkcji pole rostokataO
{
cout << "Program obl i cza pol e prostokata . " << endl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
pol e = a*b :
cout << fi xed << setpreci si on(2) :
cout << "Pol e prostokata o boku a = " << a << " i boku b = " << b:
cout << " wynosi " << pol e << " . " << endl :
}
ma i n ( )
Rozdzi ał 5. " Pod pr ogr amy 81
{
pol e_prostokata ( ) : I I wywalanie funkcji pole_yrostokataO
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Zdefiniowane t11 zmienne
fl oat a. pol e:
b .
są zmiennymi globalnymi, czyli są one widoczne w całym programie
i podprogramie.
Funkcja ( ) zawiera algo1,ytm obliczajÄ…cy pole prostokÄ…ta:
pol e_prostokata
voi d pol e_prostokata ( ) I I deklaracja i definicja funkcji pole_yrostokataO
{
cout << "Program obl i cza pol e prostokata . " << eridl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
pol e = a*b :
cout << fi xed << setpreci si on(2) :
cout << "Pol e prostokata o boku a = " << a << " i boku b = " << b:
cout << " wynosi " << pol e << " . " << endl :
}
F11nkcja ta wywołana zostaje w programie głównym.
ma i n ( )
{
pol e_prostokata ( ) : I I wywalanie funkcji pole_yrostokataO
. . . . . . . . . .
}
Jej wywołanie realiz11je algorytm obliczający pole prostokąta.
Rez11ltat działania programt1 można zobaczyć na rys11nkt1 5 . 1.
Program oblicza pole prostokata.
Podaj bok a.
2.01
Podaj bok b.
1.02
Pole prostokata o boku a = 2.01 i boku b = 1.02 wynosi 2.05.
Rysunek 5. 1. Efe dziaÅ‚ania prog1żÿa111u Zadanie 5.1
82 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz p1,ogram obliczajÄ…cy pole prostokÄ…ta. Powinien on za­
wierać jeden podprogram: bezparametrową f11nkcję pol e_
4prostokata, w której zawa1·ty bÄ™dzie algorytm obliczania pola.
Wa1,toÅ›ci boków i b wprowadzamy z klawiat11ry. W progra­
a
mie należy założyć, że zmienne a, b oraz po1 e są typu fl oat
(rzeczywistego) i są zmiennymi lokalnymi. Należy dla nich
przyjąć format wyświetlania ich z dwoma miejscami po kropce.
Przy adowe rozwiÄ…zanie - listing 5.2
#i ncl ude I I Zadanie 5.2
#i ncl ude
#i ncl ude
voi d pol e_prostokata ( ) I I deklaracja i definicja funkcji pole_yrostokataO
{
fl oat a. b, pol e:
cout << "Program obl i cza pol e prostokata . " << endl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
pol e = a*b :
cout << fi xed << setpreci si on(2) :
"
" << b:
cout << "Pol e prostokata o boku a = " << a << i boku b =
cout << " wynosi " << pol e << " . " << endl :
}
ma i n ( )
{
pol e_prostokata ( ) : I /wywalanie funkcji pole_yrostokataO
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
W tym zadaniu zmienne
fl oat a. b , pol e:
zostały zdefiniowane jako zmienne lokalne, więc są one widoczne
tylko w podprogramie. Reszta zadania została rozwiązana jak wyżej .
Rez11ltat działania programt1 można zobaczyć na rys11nkt1 5 . 1.
Rozdzi ał 5. " Pod pr ogr amy 83
ZADANIE
Napisz pI'OgI'am obliczajÄ…cy pole prostokÄ…ta. Powinien on za­
wierać jeden podprogram: f11nkcję po1 e_prostokata C ) , do której
parametry przekazywane sÄ… p1·zez wartość. WartoÅ›ci boków a i b
wprowadzamy z klawiatury. W programie należy założyć, że
zmienne a, b oraz pol e sÄ… typ11 fl oat (rzeczywistego) i sÄ…
zmiennymi globalnymi. Należy dla nich przyjąć fo1,mat wy­
świetlania ich z dwoma miejscami po kropce.
Przy adowe rozwiÄ…zanie - listing 5.3
#i ncl ude I I Zadanie 5.3
#i ncl ude
#i ncl ude
fl oat a. b , pol e:
voi d pol e_prostokata ( fl oat x, fl oat y) I I deklaracja i definicja funkcji
{
pol e = x*y :
cout << fi xed << setpreci sion(2) :
i "
cout << "Pol e prostokata o boku a = " << x << " boku b = << y;
cout << " wynosi " << pol e << " . " << endl :
}
mai n ( )
{
cout << "Program obl i cza pol e prostokata . " << eridl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
pol e_prostokata (a , b) : I I wywalanie funkcji
getch ( ) I I czeka na nacisniecie dowolnego klawisza
:
}
F11nkcja voi d pol e_prostokataC fl oat x, fl oat y) zawiera dwa parame­
try formalne, x i y typt1 fl oat, których 11żywamy tylko do jej opisu.
Cała jej postać jest następt1jąca:
voi d pol e_prostokata ( fl oat x, fl oat y) I I deklaracja i definicja funkcji
{
pol e = x*y :
cout << fi xed << setpreci sion(2) :
84 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
cout << "Pol e prostokata o boku a = " << x << " i boku b = " << y;
cout << " wynosi " << pol e << " . " << endl :
}
WywoÅ‚11jÄ…c tÄ™ f11nkcjÄ™ w programie głównym, wywoÅ‚11jemy jÄ… z pa­
I'ametrami akh1alnymi, któ1,ych wartości wprowadzamy z klawiatm,y:
{
pol e_prostokata (a , b) : I I wywalanie funkcji
}
Rez11ltat działania program11 można zobaczyć na rysunk11 5 . 1.
Aatwo za11ważyć, że wiÄ™kszość zadaÅ„ z prog1,amowania z wyko1,zy­
staniem podpl'OgI'amów można rozwiÄ…zać wedÅ‚11g nastÄ™p11jÄ…cego sche­
matu 1 :
#i ncl ude
#i ncl ude
#i ncl ude
voi d czytaj_dane( ) I I deklaracja i definicja funkcji c taj_daneO
{
. . . . . . . . . .
}
voi d przetworz_dane( ) I I deklaracja i definicja funkcji przetwarz_daneO
{
. . . . . . . . . .
}
voi d wyswi et l _wyni k ( ) I I deklaracja i definicja funkcji wyswietl_wynikO
{
. . . . . . . . . .
}
ma i n ( )
{
czytaj_dane( ) : 11 wywolaniefunkcji c taj_daneO
przetworz_dane( ) : 11 wywolaniefunkcji przetworz_daneO
wyswi et l _wyni k ( ) : I I wywalanie funkcji wyswietl_wynikO
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
1 Schemat ten jest bardzo przydatny w programowaniu strukturalnym, kiedy
operujemy pojęciem podprogramu, oraz w programowaniu obiektowym,
gdzie posługujemy się pojęciem obiektt1 .
Rozdzi ał 5. " Pod pr ogr amy 85
Fl1nkcja czytaj_dane ( ) zajmuje siÄ™ tylko czytaniem danych. Za ich
przetworzenie odpowiedzialna jest ft1nkcja przetworz_dane( ) . Ostatnia
z f11nkcji, wyswi etl _wyni kC ) , wyświetla przetworzone dane (wyniki)
np . na ekranie monitora. Funkcje mogÄ… być z parametrem ll1b bezpa­
rametrowe w zależnoÅ›ci od upodobaÅ„ progI'amisty. Powyższy sche­
mat zilustr11jemy poznanym wcześniej przykładem programu, który
oblicza pole prostokÄ…ta.
ZADANIE
Napisz program, który oblicza pole p1,ostokÄ…ta. Powinien on za­
wierać trzy bezparametrowe funkcje: czytaj_dane( ) , przetworz_
b
4dane ( ) oraz wyswi et1 _wyni k ( ) . WartoÅ›ci boków a i wprowa­
dzamy z klawiatury. W programie należy zaÅ‚ożyć, że zmien­
ne a, b oraz po1 e sÄ… typu fl oat (rzeczywistego) i sÄ… zmien­
nymi globalnymi. Należy dla nich p1,zyjąć format wyświetlania
ich z dwoma miejscami po k1,opce. Fl1nkcja czytaj_
4dane( ) czyta wartości boków a i b, przetworz_dane( ) oblicza pole
prostokÄ…ta, a wyswi et1 _wyni k ( ) prezentl1je wyniki na ekranie
komp11tera.
Przy adowe 1żÿozwiqzanie - listing 5.4
#i ncl ude I I Zadanie 5.4
#i ncl ude
#i ncl ude
fl oat a. b , pol e:
voi d czytaj_dane( ) I I deklaracja i definicja funkcji taj_daneO
{
cout << "Program obl i cza pol e prostokata . " << eridl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
}
voi d przetworz_dane( ) I I deklaracja i definicja funkcji przetworz_daneO
{
pol e = a*b :
}
voi d wyswi et l _wyni k ( ) I I deklaracja i definicja funkcji wyswietl_wynikO
{
86 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
cout << fi xed << setpreci si on(2) :
cout << "Pol e prostokata o boku a = " << a << " i boku b - " << b:
cout << " wynosi " << pol e << " . " << endl :
}
ma i n ( )
{
czytaj_da ne ( ) : I I wywalaniefunkcji czytaj_daneO
przetworz_dane ( ) : 11 wywolaniefunkcji przetworz_daneO
wyswi et l _wyni k ( ) : I I wywalanie funkcji wyswietl_wynikO
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
W naszym p1,ogramie ft1nkcja czytaj_dane( ) :
voi d czytaj_dane( ) I I deklaracja i definicja funkcji c taj_daneO
{
cout << " Program obl i cza pol e prostokata . " << endl :
cout << " Podaj bok a . " << endl :
c1 n >> a :
cout << " Podaj bok b . " << endl :
ci n b:
>>
}
wczytt1je z klawiatt1ry wartość boku a i wartość bokt1 b.
F11nkcja przetworz_daneC ) :
voi d przetworz_dane( ) I I deklaracja i definicja funkcji przetworz_daneO
{
pol e = a*b :
}
=
przetwarza te dane i oblicza pole prostokąta według wzort1 pol e a*b.
Natomiast ft1nkcja wyswi etl _wyni kC ) :
voi d wyswi et l _wyni k ( ) I I deklaracja i definicja funkcji wyswietl_wynikO
{
cout << fi xed << setpreci si on(2) :
cout << "Pol e prostokata o boku a = " << a << " i boku b - " << b:
cout << " wynosi " << pol e << " . " << endl :
}
prezentt1je wartoÅ›ci boków a i b oraz wartość zmiennej pol e w okre­
Å›lonym formacie. W prog1,amie głównym zostajÄ… wywoÅ‚ane wszyst­
kie h'ZY funkcje:
Rozdzi ał 5. " Pod pr ogr amy 87
ma i n ( )
{
czytaj_dane( ) : 11 wywolaniefunkcji czytaj_daneO
przetworz_dane( ) : 11 wywolaniefunkcji przetworz_daneO
wyswi et l _wyni k ( ) : I I wywalanie funkcji wyswietl_wynikO
. . . . . . . . . .
}
Rez11ltat działania p1,ogram11 można zobaczyć na I'ysunk11 5 . 1.
Prawda, że wszystko jest jasne i proste? Następne zadania w tym
I'ozdziale spróbt1jemy I'ozwiązać wedł11g powyższego schematu.
ZADANIE
Napisz program, któI'Y z wykorzystaniem instrukcji wybort1
swi tch . . . case oblicza pie1,wiastki równania kwadratowego
=
ax2+bx+c O, gdzie zmienne a, b oraz to liczby rzeczywiste
c
wprowadzane z klawiat11ry. Dla zmiennych a, b, c, xl oraz x2
należy przyjąć format wyświetlania ich z dwoma miejscami
po kropce. P1,og1,am powinien zawierać trzy bezparameh'owe
funkcje: czytaj_dane( ) , przetworz_dane( )i wyswi etl _wyni k ( ) .
Wskazówka
Funkcja czytaj_dane( ) jest odpowiedzialna za wczytanie danych do
programu oraz obsłużenie sytuacji, kiedy a = O. Funkcja przetworz_dane( )
zaj muje się wykonaniem ni ezbędnych obliczeń, natomiast fu nkcja
wyswi etl_wyni k ( ) jest natomiast odpowiedzialna za pokazanie rezultatów
na ekran ie mon itora.
Przy adowe 1żÿozwiqzanie - listing 5.5
#i ncl ude I I Zadanie 5.5
#i ncl ude
#i ncl ude
fl oat a. b, c. del ta . xl . x2 :
char l i czba_pi erwi astkow :
voi d czytaj_dane( )
{
cout << "Program obl i cza pi erwi astki rownani a kwadratowego << endl :
<<
cout << "dl a dowol nych wspol czynni kow a , b , c. " endl :
cout << "Podaj a . " << endl :
c1 n >> a :
88 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
i f (a == O)
{
cout << "Niedozwol ona wartosc wspol czynni ka . Naci sni j dowol ny kl awi sz . "
żÿ<< endl :
getch ( ) : I I czeka na nacisniecże dowolnego klawisza
exi t( l) : 11 wy;scze zprogramu
}
el se
{
cout << "Podaj b . " << endl :
cin >> b:
cout << "Podaj c. " << endl :
Cl n >> C;
}
}
przetworz_dane( )
{
del ta = b*b - 4*a*c :
i f (delta < 0) l i czba_pi erwi a stkow = O:
i f (delta == 0) l i czba_pi erwi astkow = 1:
i f (delta > 0) l i czba_pi erwi a stkow = 2:
swi tch ( l i czba_pi erwi astkow)
{
case 1 : xl = -bl (2*a) :
break :
case 2 { xl = ( - b-sqrt (delta) ) l (2*a ) :
x2 = ( - b+sqrt(delta ) ) /( 2*a ) :
}
break :
}
}
voi d wyswi etl_wyni k( )
{
" :
cout << "Dl a wprowadzonych l i czb : << endl
li li li
cout << "a = << a << << endl :
li li li
cout << "b = << b << << endl :
li li li
cout << "c = << c << << endl :
swi tch ( l i czba_pi erwi astkow)
{
case O : cout << "brak pi erwi astkow rzeczywi stych . " << endl :
break :
case 1 : cout << "trojmi an ma jeden pi erwi astek podwojny xl = " << xl
żÿ<< " . " << endl :
break :
Rozdzi ał 5. " Pod pr ogr amy 89
11trojmi an ma dwa pi erwi astki : 11 << endl :
case 2 : { cout <<
11
11
=
11
<< 11
xl
cout
<<
xl << << endl :
11
11
= 11 "
11
cout <<
x2
<< x2
<<
<< endl :
}
break :
}
}
ma i n ( )
{
cout << fi xed << setpreci si on(2) :
czytaj_dane( ) :
przetworz_dane ( ) :
wyswi etl_wyni k( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania programu dla a - 1, b - 2 i c - 3 można zobaczyć
na rysunk11 5. 2.
Program oblicza pierwiastki rownania kwadratowego
dla dowolnych wspolczynnikow a, b,
c.
Podaj a.
1
Podaj b.
2
Podaj c.
3
Dla wprowadzonych liczb:
a= 1.00,
b
= 2.00,
c = 3.00,
brak pierwiastkow rzeczywistych.
Rysunek 5. 2. Efe dzialania prog1żÿan1u Zadanie 5.5
90 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz program, któ1żÿy w tablicy 10x10 llmieszcza losowo na
przekÄ…tnej cyfry od O do 9, a poza niÄ… zera. Dodatkowo oblicza
on sl1mÄ™ liczb znajdl1jÄ…cych siÄ™ na p1żÿzekÄ…tnej . Program po­
winien zawierać trzy bezparametrowe funkcje: czytaj_dane ( ) ,
przetworz_dane C ) i wyswi etl _wyni k C ) . Funkcja czytaj_dane C )
trmieszcza dane w tablicy, przetworz_dane( ) oblicza slrmÄ™ liczb
znajd11jÄ…cych siÄ™ na przekÄ…tnej , natomiast funkcja wyswi etl _
wyni kC ) prezentuje zawartość tablicy na ekranie monitora.
Przy adowe 1żÿozwiqzanie - listing 5.6
#i ncl ude I I Zadanie 5. 6
#i ncl ude
#i ncl ude
const i nt rozmi ar = 10:
i nt tabl i ca[rozmi ar][rozmi ar] :
czytaj_dane( )
{
i nt i , j :
randomi ze ( ) :
for ( i = O : i < rozmi ar: i++)
{
for ( j = O : J < rozmi ar: j++ )
{
i f (i == j )
tabl i ca[i ][j] = random( lO ) :
el se
tabl i ca[i ][j] = O :
}
}
}
przetworz_dane( )
{
i nt i , suma=O :
for ( i = O : i < rozmi ar: i++)
{
suma = suma+tabl i ca[i ][i ] :
}
I I' I I
cout << "Suma el ementow na przekatnej wynosi " << suma << << endl :
}
Rozdzi ał 5. " Pod pr ogr amy 91
wyswi et l _wyni k ( )
{
i nt i , j :
11 11
cout << Zawartosc tabl i cy : << endl :
cout << endl :
for ( i = O : i < rozmi ar: i++)
{
for ( j = O : j < rozmi ar: j++ )
{
cout << tabl i ca[i ] [j] << 11 11
}
cout << endl :
}
}
ma i n ( )
{
czytaj_dane( ) :
przetworz_dane ( ) :
wyswi etl_wyni k( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rezultat działania programt1 można zobaczyć na rysunkt1 5. 3.
Suma elementow na przekatnej wynosi 40.
Zawartosc tablicy:
3 0 0 0 0 0 0 0 0 0
0 3 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 9 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 9 0 0 0 0
0 0 0 0 0 0 4 0 0 0
0 0 0 0 0 0 0 2 0 0
0 0 0 0 0 0 0 0 5 0
0 0 0 0 0 0 0 0 0 2
Rysunek 5. 3. Efe dziaÅ‚ania prog1żÿan1u Zadanie 5.6
92 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz p1żÿogIżÿam, który so1'tt1je n liczb wczytanych z klawiatu1,y
(w zadanit1 jest ich sześć). Powinien on zawierać trzy bezpara­
metrowe funkcje: czytaj_dane ( ) , przetworz_dane( ) i wyswi etl _
k (
4Wyni ) . Ft1nkcja czytaj_dane( ) czyta dane wprowadzone
z klawiatt1ry i umieszcza je w tablicy o nazwie l i czby. Ft1nk­
cja przetworz_dane( ) sortt1je je wedłt1g wybranego algo1,ytmt1
(w programie należy zastosować algorytm sortowania bÄ…bel­
k C )
kowego). Ft1nkcja wyswi etl_wyni prezentt1je natomiast za­
wartość poso1,towanej tablicy l i czby na ekranie monitora.
Przy adowe 1żÿozwiqzanie - listing 5.7
#i ncl ude I I Zadanie 5. 7
#i ncl ude
#i ncl ude
const i nt n = 6: li i l osc l i czb
i nt l i czby[n] :
X,
i nt i , j ;
czytaj_dane( )
{
11
11
11
cout << Podaj << n << l i czb cal kowi tych . 11 << endl :
for ( i = O : i <= n- 1: i++)
{
cin >> l i czby[i ] :
}
}
przetworz_dane( ) I I algorytm sortowania babelkowego
{
for ( i = 1: i <= n- 1: i++)
{
for ( j = n-1 : j >= i : j - - )
{
i f ( l i czby[j - 1] > l i czby[j] )
{
x = l i czby[j - 1] :
l i czby[j- 1] = l i czby[j] :
l i czby[j J = x:
}
}
}
}
Rozdzi ał 5. " Pod pr ogr amy 93
wyswi et l _wyni k ( )
{
cout << "Li czby uporzadkowane : " << endl :
for ( i = O : i <= n- 1: i++)
{
cout << l i czby[i ] << " " :
}
cout << endl :
}
ma i n ( )
{
cout << "Program sortuje " << n << " l i czb cal kowitych . " << endl :
czytaj_dane( ) :
przetworz_dane ( ) :
wyswi etl_wyni k( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rezt1ltat działania p1,ogramt1 można zobaczyć na I'ysunkt1 5.4.
Program sortuje 6 liczb calkowitych.
Podaj 6 liczb calkowitych.
5
12
67
456
3
-1 0
Liczby uporzadkowane:
-1 0 3 5 12 67 456
Rysunek 5.4. Efe dziaÅ‚ania prog1żÿamu Zadanie 5. 7
94 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
ZADANIE
Napisz prog1,am, który lost1je n liczb całkowitych (w zadanit1
=
n 10) z przedziaÅ‚u od O do 99, a nastÄ™pnie znajdt1je naj­
mniejszÄ… i najwiÄ™kszÄ… z nich. Powinien on zawierać trzy bezpa­
rametrowe funkcje: czytaj_dane( ) , przetworz_dane( ) i wyswi etl _
wyni k ( ) . Ft1nkcja czytaj_dane( ) lost1je n całkowitych liczb od O
do 99. przetworz_dane( ) po1,ównt1je je ze sobą i t1 stala, która
z nich jest najmniejsza oraz największa. Funkcja wyswi etl _wyni k ( )
prezentuje natomiast najwiÄ™kszÄ… i najmniejszÄ… liczbÄ™ z wylo­
sowanego zbioI'tl.
Przy adowe 1żÿozwiqzanie - listing 5.8
#i ncl ude I I Zadanie 5.8
#i ncl ude
#i ncl ude
const i nt n = 10 : I I ilosc liczb
i nt l i czba , mi ni , maxi :
czytaj_dane( )
{
cout << "Program l osuje " << n << " l i czb cal kowi tych z przedzi alu od O
żÿdo 99 , " << endl :
cout << "a nastepni e znajduje najwi eksza i najmni ejsza l i czbe . " << endl :
żÿrandomi ze ( ) :
mi ni = random( l00 ) :
maxi = mi ni :
cout << "Wyl osowane l i czby : " :
li li "
cout << maxi <<
,
}
przetworz_dane( )
{
i nt i :
for ( i = 1 : i <= n- 1: i++)
{
l i czba = random( lOO ) :
cout << l i czba << " " :
i f (maxi < l i czba ) maxi = l i czba :
i f ( l i czba < mi ni ) mi ni = l i czba :
}
}
wyswi et l _wyni k ( )
{
Rozdzi ał 5. " Pod pr ogr amy 95
cout << endl :
cout << "Najwi eksza l i czba to " << maxi << " . " << endl :
cout << "Najmni ejsza l i czba to " << mi ni << " . " << endl :
}
ma i n ( )
{
czytaj_dane( ) :
przetworz_dane ( ) :
wyswi etl_wyni k( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania p1,ogram11 dla wylosowanych liczb można zobaczyć
na rys11nkt1 5 . 5 .
Program losuje 10 liczb calkowitych z przedzialu od O do
99,
a nastepnie znajduje najwieksza i najmniejsza liczbe.
Wylosowane liczby: 40 21 62 7 74 13 2 75 12 23
Najwieksza liczba to 7 5.
Najmniejsza liczba to 2.
Rysunek 5. 5. Efekt dziaÅ‚ania prog1żÿamu Zadanie 5.8
ZADANIE
Napisz program, który dla x zmieniajÄ…cego siÄ™ od O do 5 z kro­
kiem 0,5 oblicza wartość f11nkcji y = x2+ 1.
Przykładowe rozwiązanie - listing 5.9
#i ncl ude I I Zadanie 5.9
#i ncl ude
#i ncl ude
const n = 10 :
i nt i :
fl oat x = O , y, krok = 0 . 5 :
fl oat obl i cz( fl oat a)
{
fl oat obl i cz:
obl i cz = a*a+l:
96 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
return obl i cz:
}
ma i n ( )
{
11
"
11 \ t 11
11 11
cout << x << << y << endl :
11 11
cout << ============== << endl :
for ( i = O : i <= n: i ++)
{
y = ob l i cz(x) :
cout << fi xed:
cout << setpreci si on ( 2) :
11 11
cout << x << \t << y << endl :
x=x+krok :
}
getch ( ) : I I czeka na nacisniecże dowolnego klawisza
}
Rezt1ltat działania programt1 można zobaczyć na ryst1nkt1 5. 6.
X
y
--------------
--------------
o.oo 1.00
0.50 1.25
1.00 2.00
1.50 3.25
2.00 5.00
2.50 7.25
3.00 10.00
3.50 13.25
4.00 17.00
4.50 21 .25
5.00 26.00
Rysunek 5. 6. Efe dziaÅ‚ania prog1żÿa111u Zadanie 5.9
"
I
W m rozdziale przedstawi1ny t owe zadania wraz z przyklado 1ni
rozwiqzanian1i z korzystaniem zasad progran1owania obiektowego.
Język c+ + pozwala na Pl'OgI'aillOWanie obiektowe (ang. object-oriented
progra1111ning). Jest to taki paradygmat p1,og1,amowania, w którym
p1,ogramy definit1je się za pomocą obiektów elementów łączących
stan (sÄ… to dane nazywane polami) i zachowanie (sÄ… to metody -
w c+ + są nimi ft1nkcje słt1żące do wykonywania na tych danych
określonych zadań, których dekla1,acja występt1je w ramach obiektt1).
w jÄ™zyku c+ + podstawowym pojÄ™ciem prog1,amowania obiektowe­
go jest klasa (ang. class). Klasa definit1je projekt i struktt11'Ä™ obiektu.
Jej schemat ma następt1jącą postać:
cl ass nazwa_klasy
{
I I pola
11 metody
}
Pola słt1żą do przechowywania danych i zmiennych określonych typów
- za1,ówno prostych, jak i obiektowych. Metody słt1żą natomiast do
wykonywania ope1·acji na tych danych . W klasach możemy wyróżnić
między innymi następujące elementy: stałe, zmienne składowe, zmienne
statyc ne, metody, konstrt1ktory i destrt1ktory.
98 C ++. Zadani a z pr og r amowani a z przykł adowymi rozwi qzani ami
Konstruktor jest specjalnÄ… metodÄ… stosowanÄ… przy tworzeni11 obiektu
danej klasy. Jest on 11żywany do inicjalizacji zmiennych składowych
obiektu oraz do przydzielania pamięci potrzebnej do jego działania.
Des uktor to natomiast specjalna metoda wywoływana tuż przed
zwolnieniem obiekt11. Jest on przeciwieństwem konstruktora i jest
11żywany do zwolnienia pamięci zajmowanej p1,zez obiekt.
Jeśli w klasie nie zadeklarowano jawnie konst1't1ktora i dest1't1ktora,
to zostaną one 11tworzone a11tomatycznie przez kompilatOI' i 11żyte
w eh wili tworzenia i niszczenia obiektu.
Język c+ + posiada następujące trzy poziomy dostępu (nadawane
p1,zez modyfikatory 111b specyfikatory) do swoich składników:
O prywatny (ang. private) słowo kluczowe pri vate defini11je
pola i metody klasy dostępne tylko dla jej składników, co oznacza,
że metody w innych klasach nie mają dostęp11 do tak
zadeklarowanych elementów;
O publiczny (ang. public) słowo kluczowe publ i c definiuje pola
i metody dostępne z dowolnego miejsca p1,ogram11, co oznacza,
że metody w innych klasach mają dostęp do składników
zadeklarowanych przy 11życi11 tego modyfikatora;
O chroniony (ang. protected) słowo kl11czowe protected
stosowane jest tylko w przypadk11 dziedziczenia.
Zadania z p1,og1,amowania obiektowego przedstawione w dalszej czÄ™­
ści tej książki będziemy I'ozwiązywali wedł11g poniższego schemat11.
#i ncl ude
cl ass nazwa_klasy
{
publ i c:
dekl aracj a zmi ennych :
czyta j_da ne ( ) : I I proto p metody czytaj_daneO
przetworz_dane( ) : I I proto p metody przetworz_daneO
wyswi et l _wyni k ( ) : I I proto p metody wyswietl_wynikO
} :
nazwa kl asy: : czytaj_dane ( ) I I definicja metody czytaj_daneO
{
. . . . . . . . . . . . . .
}
Rozdzi ał 6. " Progr amowani e obi ektowe 99
nazwa_kl asy: : przetworz_dane ( ) I I definicja metody pr
zetworz_daneO
{
}
nazwa_k lasy: : wyswi et l _wyni k ( ) I I definicja metody wyswietl_wynikO
{
. . . . . . . . . . . . . .
}
ma i n ( )
{
nazwa kl asy zmi enna : I I utworzenie obiektu zmienna
zmi enna . czytaj_da ne ( ) : I I wywalanie metody czytaj_daneO
zmi enna . przetworz_dane ( ) : I I wywalanie metody przetworz_daneO
zmi enna . wyswi et l_wyni k ( ) : I I wywalanie metody wyswietl_wynikO
. . . . . . . . . . . . . . . . . . . . . .
}
:: to operatOI' zasięgl1 identyfikl1jący klasę, do której należy metoda.
Klasa o nazwie nazwa_k l asy zawiera oprócz deklaracji zmiennych tI'ZY
metody. czytaj_dane( ) zajm11je siÄ™ tylko odczytem danych. Za ich
przetwo1'zenie odpowiedzialna jest metoda przetworz_daneC ) . Ostatnia
z metod, wyswi etl _wyni k ( ) , prezentl1je przetwo1,zone dane (wyniki)
np . na ek1,anie monitora. Metody mogÄ… być z pa1,ametrem 111b bezpa­
rametrowe w zależnoÅ›ci od upodobaÅ„ progi,amisty. Powyższy sche­
mat zilush'lijemy p1,zykładem znanego nan1 p1'og1'am11 obliczającego
pole prostokÄ…ta.
ZADANIE
Napisz zgodnie z zasadami programowania obiektowego pro­
gram, który oblicza pole prostokąta. Klasa powinna zawie1'ać
trzy metody:
D czytaj_dane( ) llmożliwia wprowadzenie do programl1
wa1,toÅ›ci boków a i b z klawiatUI'Y· W programie należy
p1,zyjąć, że boki oraz zmienna pol e są typ11 fl oat
(rzeczywistego) .
D przetworz_dane( ) oblicza pole prostokąta wedł11g wzort1
pol e = a*b.
D wyswi etl _wyni kC ) wyświetla wa1,tości boków a i b 01,az
zmiennej pol e w określonym formacie. Dla tych trzech
zmiennych należy przyjąć format w świetlania ich na
ekranie z dwoma miejscami po kropce.
1 0 0 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
Przy adowe 1żÿozwiqzanie - listing 6. 1
#i ncl ude I I Zadanie 6. 1
#i ncl ude
#i ncl ude
cl ass pol e_prostokata I I definicja klasy pole rostokata
{
publ i c:
fl oat a . b . pol e:
czytaj_dane( ) : I I proto p funkcji czytaj_dane
przetworz_dane ( ) : I I proto p funkcji przetworz_dane
wyswi et l _wyni k ( ) : I I proto p funkcji wyswietl_wynik
} :
pol e_prostokata : : czytaj_dane( ) I I definicja metody czytaj_daneO
{
cout << "Program obl i cza pol e prostokata . " << eridl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
}
pol e_prostokata : : przetworz_dane( ) I I definicja metody przetworz_daneO
{
pol e = a*b :
}
pol e_prostokata : : wyswi et l _wyni k ( ) I I definicja metody wyswietl_wynikO
{
cout << "Pol e prostokata o boku a - " :
cout << fi xed:
cout << setpreci si on(2) :
cout << a << " i boku b = " << b:
cout << " wynosi " << pol e << " " << endl :
}
ma i n ( )
{
pol e_prostokata pol e: I I utworzenie obiektu pole
pol e. czytaj_dane( ) : I I wywalanie metody czytaj_daneO
pol e . przetworz_dane( ) : 11 wywalanie metody przetworz_daneO
pol e. wyswi et l _wyni k ( ) : I I wywalanie metody wyswietl_wynikO
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rozdzi ał 6. " Progr amowani e obi ektowe 1 o 1
Definicja klasy pol e_prost kata jest następująca :
cl ass pol e_prostokata I I definicja klasy pole rostokata
{
publ i c:
fl oat a. b, pol e:
czytaj_dane( ) : I I proto p funkcji czytaj_dane
przetworz_dane ( ) : I I proto p funkcji przetworz_dane
wyswi et l _wyni k ( ) : I I proto p funkcji wyswietl_wynik
} :
Klasa jest p11bliczna i zawiera, oprócz trzech rzeczywistych zmiennych,
trzy metody: czytaj_dane C ) , przetworz_daneC ) 01,az wyswi etl _wyni kC ) .
czytaj_daneC ) :
W naszym programie metoda
pol e_prostokata : : czytaj_dane ( ) I I definicja metody czytaj_daneO
{
<<
cout << "Program obl i cza pol e prostokata . " eridl :
cout << "Podaj bok a . " << endl :
c1 n >> a :
cout << "Podaj bok b . " << endl :
cin >> b:
}
wczyt11je z klawiatury wartości boków a i b.
Metoda przetworz_daneC ) :
pol e_prostokata : : przetworz_dane ( ) I I definicja metody przetworz_daneO
{
pol e = a*b :
}
oblicza pole prostokÄ…ta, korzystajÄ…c ze wzor11 pol e - a*b.
Natomiast metoda wyswi etl_wyni kC ) :
pol e_prostokata : : wyswi et l _wyni k ( ) I I definicja metody wyswietl_wynikO
{
cout << "Pol e prostokata o boku a = " :
cout << fi xed:
cout << setpreci si on ( 2) :
cout << a << " i boku b = " << b:
cout << " wynosi " << pol e << " . " << endl :
}
p1,ezent11je wa1,toÅ›ci boków a i b 01,az wa1,tość zmiennej pol e w okre­
ślonym formacie.
1 0 2 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
Linijka kodu
pol e_prostokata pol e: I I utworzenie obiektu pole
pozwala 11tworzyć obiekt o nazwie pol e.
W programie głównym zostają wywołane wszystkie trzy metody:
pol e. czytaj_dane( ) : I I wywalanie metody czytaj_daneO
pol e. przetworz_dane( ) : I I wywalanie metody przetworz_daneO
pol e. wyswi et l _wyni k ( ) : I I wywalanie metody wyswietl_wynikO
Ponieważ wszystkie składowe klasy są pl1bliczne, prog1,am ma do
nich dostęp pl'ZY 11życi11 ope1,atora wyborll składowej oznaczonego
kropką (.). Prawda, że wszystko jest jasne i proste? Następne zadania
w tej książce sp1,óbl1jemy rozwiązać wedł11g powyższego schematl1.
Rez11ltat działania prog1,aml1 można zobaczyć na I'YSl1nkl1 6. 1.
Program oblicza pole prostokata.
Podaj bok a.
3
Podaj bok b.
4
Pole prostokata o boku a= 3.00 i boku b = 4.00 wynosi 12.00.
Rysunek 6. 1. Efe dziaÅ‚ania prog1żÿamu Zadanie 6. 1
ZADANIE
Napisz zgodnie z zasadami programowania obiektowego
p1,ogram, który oblicza pierwiastki równania kwadratowego
ax2+bx+c = O z wykorzystaniem instr11kcji wyborl1 swi tch . . .
case. Klasa powinna zawierać trzy metody:
O czytaj_dane( ) jest odpowiedzialna za wczytanie danych
do p1,ogramu 01,az obsł11żenie sytuacji, kiedy a = O. Zmienne
a, b oraz c to liczby rzeczywiste wprowadzane z klawiatury.
O przetworz_dane( ) odpowiada za wykonanie niezbędnych
obliczeń.
O wyswi etl _wyni k ( ) jest odpowiedzialna za pokazanie
wyników na ek1,anie monitora. Dla zmiennych a, b, c, xl
01,az x2 należy p1,zyjąć fo1,mat wyświetlania ich z dwoma
miejscami po kropce.
Rozdzi ał 6. " Progr amowani e obi ektowe 1 0 3
Przy adowe 1żÿozwiqzanie - listing 6.2
#i ncl ude I I Zadanie 6.2
#i ncl ude
#i ncl ude
cl ass trojmi an I I definicja klasy trojmnian
{
publ i c:
b,
fl oat a. c. del ta . xl . x2 :
char l i czba_pi erwi astkow :
czytaj_dane( ) : I I proto p funkcji czytaj_daneO
przetworz_dane ( ) : I I proto p funkcji przetworz_daneO
wyswi et l _wyni k ( ) : I I proto p funkcji wyswietl_wynikO
} :
trojmi an: : czytaj dane( )
{
<< <<
cout "Program obl i cza pi erwi astki rownani a kwadratowego endl :
cout << "dl a dowol nych wspol czynni kow a . b, c. " << endl :
cout << "Podaj a . " << endl :
c1 n >> a :
i f (a == O)
{
cout << "Niedozwol ona wartosc wspol czynni ka . Naci sni j dowol ny kl awi sz . "
żÿ<< endl :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
exi t ( 1) : I I wyjscie z programu
}
el se
{
cout << "Podaj b . " << endl :
cin >> b:
cout << "Podaj c. " << endl :
Cl n >> C;
}
}
trojmi an: : przetworz_dane ( )
{
del ta = b*b - 4*a*c :
i f (delta < 0) l i czba_pi erwi a stkow = O:
i f (delta == 0) l i czba_pi erwi astkow = 1:
i f (delta > 0) l i czba_pi erwi a stkow = 2:
swi tch ( l i czba_pi erwi astkow)
{
case 1 : xl = -b/( 2*a) :
1 0 4 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
break :
case 2 : { xl = ( - b-sqrt (delta) ) / ( 2*a ) :
x2 = ( - b+sqrt(delta ) ) /( 2*a ) :
}
break :
}
}
trojmi an: :wyswi etl _wyni k ( )
{
cout << "Dl a wprowadzonych l i czb : " << endl :
li li li
cout <<  a = << a << << endl :
li li li
cout << "b = << b << << endl :
li li li
<< c
cout "c = << << << endl :
swi tch ( l i czba_pi erwi astkow)
{
case O cout << "brak pi erwi astkow rzeczywi stych . " << endl :
break :
case 1 : cout << "trojmi an ma jeden pi erwi astek podwojny xl = " << xl
żÿ<< " " << endl :
break :
case 2 : { cout << "trojmi an ma dwa pi erwi astki : " << endl :
cout << endl :
cout << "x2 = " << x2 << " " << endl :
}
break :
}
}
ma i n ( )
{
trojmi an trojmi anl : I I utworzenie obiektu trojmianl
cout << fi xed << setpreci si on(2) :
trojmi anl .czytaj_dane ( ) :
trojmi anl . przetworz_dane ( ) :
trojmi anl .wyswi etl_wyni k ( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rezt1ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1 6. 2.
Rozdzi ał 6. " Progr amowani e obi ektowe 1 0 5
Program oblicza pierwiastki rownania kwadratowego
dla dowolnych wspolczynnikow a, b,
c.
Podaj a.
1.02
Podaj b.
5
Podaj c.
4
Dla wprowadzonych liczb:
a= 1.02,
b = 5.00,
c = 4.00,
trojmian ma dwa pierwiastki:
x1 -3.90,
=
x2 = -1 .01 .
Rysunek 6. 2. Efe dziaÅ‚ania prog1żÿa111u Zadanie 6.2
ZADANIE
Napisz zgodnie z zasadami programowania obiektowego pro­
gram, który w tablicy 1Ox1O limieszcza losowo na przekątnej
liczby od O do 9, a poza niÄ… ze1'a. Dodatkowo oblicza on st1mÄ™
liczb znajdujących się na przekątnej . Klasa powinna zawierać
trzy metody:
umieszcza dane w tablicy;
O czytaj_dane( )
O przetworz_dane( ) oblicza i wyświetla st1mę liczb
znajdt1jÄ…cych siÄ™ na przekÄ…tnej;
( ) pokazuje zawartość tablicy na ek1,anie
O wyswi et l _wyni k
monitora.
Przy adowe 1żÿozwiqzanie - listing 6.3
#i ncl ude I I Zadanie 6.3
#i ncl ude
#i ncl ude
const i nt rozmi ar = 10 :
i nt maci erz[ rozmi ar][rozmi ar] :
cl ass matri x I I definicja klasy matrix
1 0 6 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
{
publ i c:
czytaj_dane ( i nt maci erz[ rozmi ar][rozmi ar] . i nt rozmi ar) :
I I prototyp funkcji czytaj_daneO
przetworz_dane( i nt maci erz[ rozmi arJ[ rozmi arJ . i nt rozmi ar) :
I I prototyp funkcji przetworz_daneO
wyswi etl_wyni k( i nt maci erz[ rozmi ar][ rozmi ar] . i nt rozmi ar) :
I I proto p funkcji wyswietl_wynikO
} :
matri x: : czytaj_dane( i nt tabl ica[rozmi ar][rozmi ar] . i nt rozmi ar)
{
i nt i . j :
randomi ze ( ) :
for ( i - O : i < rozmi ar: i++)
{
for ( j - O : J < rozmi ar: j++ )
{
i f (i == j )
tabl i ca[i ][j] - random( lO ) :
el se
tabl i ca[i ][j] - O:
}
}
}
matri x: : przetworz_dane( i nt tabl ica[rozmi ar][rozmi ar] . i nt rozmi ar)
{
i nt i , suma = O ;
for ( i = O : i < rozmi ar: i++)
{
suma = suma+tabl i ca[i J[i J :
}
<< << " <<
cout "Suma el ementow na przekatnej wynosi " << suma  . endl :
}
matri x: : wyswi etl_wyni k( i nt tabl ica[rozmi ar][rozmi ar] . i nt rozmi ar)
{
i nt i . j :
cout << endl :
cout << "Zawartosc tabl i cy : " << endl :
cout << endl :
for ( i - O : i < rozmi ar: i++)
{
for ( j - O : J < rozmi ar: j++ )
{
cout << tabl i ca[i ] [ j] << " " :
}
cout << endl
:
}
}
Rozdzi ał 6. " Progr amowani e obi ektowe 1 0 7
ma i n ( )
{
i nt tabl i ca[rozmi ar][rozmi ar] :
matri x matri xl : I I utworzenie obiektu matrix]
matri xl . czytaj_dane (tabl i ca , rozmi ar) :
matri xl . przetworz_dane(tabl i ca , rozmi ar) :
matri xl . wyswi etl_wyni k(tabl i ca , rozmi ar) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rezt1ltat działania programu można zobaczyć na rysunku 6 . 3.
Suma elementow na przekatnej wynosi 45.
Zawartosc tablicy:
3 0 0 0 0 0 0 0 0 0
0 9 0 0 0 0 0 0 0 0
0 0 5 0 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 6 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 9 0 0
0 0 0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 0 0 8
Rysunek 6. 3. Efe dziaÅ‚ania prog1żÿan1u Zadanie 6.3
ZADANIE
Napisz zgodnie z zasadami p1,ogramowania obiektowego PI'O­
gram, któI'Y sortt1je n liczb (w zadanit1 jest ich sześć) . Klasa
powinna zawierać tI'ZY metody:
O czytaj_dane( ) odczytuje dane i umieszcza je w tablicy
o nazwie l i czby;
O przetworz_dane( ) sortuje dane, korzystajÄ…c z wybranego
algorytmt1 (w prog1,amie zastosowano algorytm
sortowania bÄ…belkowego);
O wyswi etl _wyni k ( ) prezentuje zawartość posortowanej
tablicy l i czby na eki,anie monitora.
1 0 8 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
Przy adowe 1żÿozwiqzanie - listing 6.4
#i ncl ude I I Zadanie 6.4
#i ncl ude
#i ncl ude
const i nt n = 6:
i nt l i czby[n] :
cl ass sortowani e I I definicja klasy sortowanie
{
publ i c:
czytaj_dane( ) : I I proto p funkcji czytaj_daneO
przetworz_dane ( ) : I I proto p funkcji przetworz_daneO
wyswi et l _wyni k ( ) : I I proto p funkcji wyswietl_wynikO
} :
sortowani e: : czytaj dane( )
{
i nt i :
l i czby [OJ = 5 7 4:
l i czby[l] = 303 :
l i czby[2J = - 134 :
l i czby[3J = 125 :
l i czby [ 4 J = 80 :
l i czby[SJ = 236 :
<< <<
cout "Li czby ni eposortowane : " endl :
for ( i = O : i < n: i++)
{
cout << l i czby[i ] << " :
"
}
cout << endl :
}
sortowani e: : przetworz_dane( ) // algorytm sortowania babelkowego
{
i nt i , J , X;
for ( i = 1: i <= n-1: i++)
{
=
for ( j n- 1: J >= i : - - j )
{
i f ( l i czby[j - 1] > l i czby[j] )
{
x = l i czby[j - 1] :
l i czby[j- 1] = l i czby[j] :
l i czby [j J = x:
}
Rozdzi ał 6. " Progr amowani e obi ektowe 1 0 9
I I J
}
I I i
}
}
sortowani e: : wyswi etl_wyni k( )
{
i nt i :
cout << endl :
cout << "Li czby posortowane : " << endl :
for ( i = O : i < n: i++)
{
cout << l i czby[i ] << " :
"
}
cout << endl :
}
ma i n ( )
{
sortowani e babel ki : I I powstaje obiekt babelki
babel ki . czytaj_dane( ) :
babel ki . przetworz_dane( ) :
babel ki . wyswi etl_wyni k( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rez11ltat działania programt1 można zobaczyć na rys11nkt1 6.4.
Liczby nieposortowane:
574 303 -134 125 80 236
Liczby posortowane:
-1 34 80 125 236 303 574
Rysunek 6.4. Efe dziaÅ‚ania prog1żÿan1u Zadanie 6.4
1 1 O C+ +. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
W m rozdziale przedstawi1ny t owe zadania wraz z przyklado 1ni
rozwiqzanian1i z korzystaniem plików tekstowych.
Pliki tekstowe zawierają informację niezakodowaną, bezpoś1'ednio
czytelną. Są one plikami o dostępie sekwencyjnym.
w języku c+ + plik otwiera się przez połączenie go ze strllmieniem.
IstniejÄ… trzy typy st1't1mieni:
O wejściowe,
O wyjściowe,
O wejściowa-wyjściowe .
War11nkiem wykonywania na plikach operacji wejścia-wyjścia jest
doÅ‚Ä…czenie do program11 plik11 nagłówkowego fstrean1.h. Aby otwo­
I'ZYĆ st1,umień wejściowy, należy zadeklarować go jako obiekt klasy
i fs tream (in file strea1n). Str11mienie wyjściowe są obiektami klasy
ofstream (out file stream). Obiekty klasy fstream to z kolei strtrmienie, na
których będą wykonywane zarówno operacje wejścia, jak i wyjścia.
W jÄ™zyku C+ + operacje wejÅ›cia-wyjÅ›cia dotyczÄ…ce plików sÄ… ana­
logiczne do standardowych ope1,acji tego typ11. Chcąc zapisać dane do
plik11, trzeba utworzyć obiekt str11mienia klasy ofstream reprezentujący
1 1 2 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
dany plik i skorzystać z operatora wstawiania < <. Podobnie, chcÄ…c od­
czytać dane z plikl1, należy utworzyć obiekt strt1mienia klasy i fstream,
a następnie czytać dane za pomocą operatora pobierania > >.
ZADANIE
Napisz zgodnie z zasadami p1,ogramowania obiektowego p1'0-
g1,am, który wczytuje z klawiatt1ry imię i nazwisko, zapist1je
te dane do plikt1 tekstowego dane.txt, a następnie odczytuje je
z niego i wyÅ›wietla na ek1,anie komputera. Klasa powinna za­
wie1'ać tI'ZY metody:
O czytaj_dane( ) wczytl1je z klawiatt1ry imiÄ™ i nazwisko;
O zapi sz_dane_do_pl i ku( ) zapisl1je imiÄ™ i nazwisko do
plikt1 tekstowego dane.txt;
O czytaj_dane_z_pl i ku( ) odczytuje dane z pliku dane.txt
i wyświetla je na ek1,anie kompt1tera.
Przy adowe 1żÿozwiqzanie - listing 7. 1
#i ncl ude I I Zadanie 7. 1
#i ncl ude
#i ncl ude
cl ass pl i k I I definicja klasy plik
{
publ i c:
char dane[20] , danel[20 J :
czytaj_dane ( ) : I I proto p funkcji c taj_daneO
zapi sz_da ne_do_p l i ku ) : I I proto p funkcji zapisz_dane_do_ylikuO
(
czytaj_dane_z_p l i ku ( ) : I I proto p funkcji czytaj_dane_z likuO;
} :
pl i k : : czytaj_dane ( ) I I definicja funkcji czytaj_daneO
{
cout << "Podaj imi e i nazwi sko. " << endl :
ci n. getl i ne( dane . si zeof(dane) ) :
}
pl i k : : za pi sz_dane_do_p l i ku ( ) I I definicja funkcji zapisz_dane_do_ylikuO
{
cout << "Zapi sujemy dane do pl i ku. " << endl :
ofstream pl i k_zapi s ( "dane . txt" ) : I I tworzymy i otwieramy plik
pl i k_zapi s << dane << endl : I I zapisujemy dane do pliku
pl i k_zapi s . cl ose( ) :
}
Rozdzi ał 7. " P l i k i te kstowe 1 1 3
pl i k : : czytaj_dane_z_p l i ku ( ) I I definicja funkcji czytaj_dane_z likuO;
{
cout << "Odczytuj emy danel z pl i ku . " << endl :
i f stream pl i k_odczyt ( "dane . txt " ) : I I otwieramy plik, ktory juz istnieje
whi l e ( ! pl i k_odczyt . eof( ) )
{
pl i k_odczyt >> danel : I I odczytujemy dane] z pliku i wyswietlamy je
cout << danel << " "
}
pl i k_odczyt . cl ose ( ) : I I zamykamy plik
}
ma i n ( )
{
pl i k pl i kl: I I powstaje obiekt pliki
pl i kl. czytaj_dane ( ) ;
pl i kl. zapi sz_dane_do_pl i ku( ) :
pl i kl. czytaj_dane_z_pl i ku( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Zwróćmy 11wagę na to, że w programie zadeklarowano dwie zmienne
łańc11chowe:
char dane [20 ] , danel[20J :
Zmienna o nazwie dane przechowt1je dane p1,zed zapisaniem ich do pli­
kt1 tekstowego, natomiast danel przechowt1je dane odczytane z plik11.
Metoda czytaj_dane( ) :
pl i k : : czytaj_dane ( ) I I definicja funkcji czytaj_daneO
{
cout << "Podaj imi e i nazwi sko. " << endl ;
ci n. getl i ne( dane . si zeof(dane) ) :
}
wczytt1je z klawiattU'Y dane, czyli imiÄ™ i nazwisko. F11nkcja ci n . getl i ne( )
11możliwia wczytanie caÅ‚ej linii tekst11, natomiast zastosowanie ope­
I'atora si zeof( ) gwarantuje poprawność rozmiaI'tl .
1 1 4 C ++. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
Metoda zapi sz_dane_do_pl i ku( ) :
pl i k : : za pi sz_da ne_do_p l i ku ( ) I I definicja funkcji zapisz_dane_do_ylikuO
{
cout << "Zapi sujemy dane do pl i ku. " << endl :
ofstream pl i k_zapi s ( "dane . txt" ) : I I two ymy i otwieramy plik
pl i k_zapi s << dane << endl : I I zapisujemy dane do pliku
pl i k_zapi s . cl ose( ) :
}
zapisuje dane do plikl1 dane.txt.
Ostatnia z metod, czytaj_dane_z_pl i ku( ) :
pl i k : : czytaj_dane_z_p l i ku ( ) I I definicja funkcji c taj_dane_z likuO;
{
cout << "Odczytuj emy danel z pl i ku . " << endl :
i fstream pl i k_odczyt ( "dane . txt " ) : I I otwieramy plik, kto juz istnieje
whi l e ( ! pl i k_odczyt . eof( ) )
{
pl i k_odczyt >> danel : I I odczytujemy dane] z pliku i wyswietlamy je
cout << danel << " " :
}
pl i k_odczyt . cl ose ( ) : I I zamykamy plik
}
odczytuje danel z plik11 i wyświetla je na ekranie monitora. Wszystkie
trzy metody zostają wywołane w programie głównym.
Rez11ltat działania program11 można zobaczyć na rysl1nk11 7 . 1.
Podaj imie i nazwisko.
Jan Kowalski
Zapisujemy dane do pliku.
Odczytujemy dane1 z pliku.
Jan Kowalski
Rysunek 7. 1. Efe dziaÅ‚ania prog1żÿan1u Zadanie 7. 1
ZADANIE
Napisz zgodnie z zasadami prog1,amowania obiektowego pl'O­
gram, który tablicę 10X10 o postaci
Rozdzi ał 7. " P l i k i te kstowe 1 1 5
1 o o o o o o o o o
o 1 o o o o o o o o
o o 1 o o o o o o o
o o o 1 o o o o o o
o o o o 1 o o o o o
o o o o o 1 o o o o
o o o o o o 1 o o o
o o o o o o o 1 o o
o o o o o o o o 1 o
o o o o o o o o o 1
zapist1je do plikt1 tekstowego dane.txt, a nastÄ™pnie zapisane dane od­
czyt11je i wyświetla na ekranie komp11tera. Klasa powinna zawierać
trzy metody:
O czytaj_dane( ) tworzy tablicÄ™ 10x10;
O zapi sz_dane_do_pl i ku( ) zapis11je tablicÄ™ tox 10 do plik11
tekstowego dane.txt;
O czytaj_dane_z_pl i ku( ) odczytt1je tablicÄ™ 1ox10 z plik11
dane.txt i wyświetla ją na ekranie komp11tera.
Przy adowe rozwiÄ…zanie - listing 7.2
#i nc l ude I I Zadanie 7. 2
#i ncl ude
#i ncl ude
const i nt rozmi ar = 10 :
cl ass matri x I I definicja klasy matrix
{
publ i c:
czytaj_dane ( int tabl i ca[rozmi ar] [rozmi ar] . i nt rozmi ar) :
zapi sz_dane_do_pl i ku( i nt tabl i ca[rozmi ar] [rozmi ar] , i nt rozmi ar) :
czytaj_dane_z_pl i ku( i nt tabl i cal[rozmi ar] [rozmi ar] , i nt rozmi ar) :
} :
matri x: : czytaj_dane( i nt tabl ica[rozmi ar][rozmi ar] . i nt rozmi ar)
{
i nt i , J :
for ( i = O: i < rozmi ar : i ++) // two ymy tablice JOxlO
{
j
for (j = O : < rozmi ar: j++ )
1 1 6 C+ +. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
{
i f (i == j )
tabl i ca[i ] [j] - 1:
el se
tabl i ca[i ] [j] - O :
} I I i
} I I i
}
matri x: : zapi sz_dane_do_pl i ku( i nt tabl i ca[rozmi arJ[rozmi arJ . i nt rozmi ar)
{
i nt i , j :
cout << "Zapi sujemy tabl i ce lOxlO do pl i ku . " << endl :
ofstream pl i k_zapi s ( "dane . txt" ) : I I twor my i otwieramy plik do zapisu
for ( i = O: i < rozmi ar : i ++) I I zapisujemy tablice 1 Oxl O
{
for (j = O : j < rozmi ar: j++ )
{
cout << tabl i ca[i ] [j] << " " :
pl i k_zapi s << tabl i ca[i ] [j] :
} I I i
cout << endl :
} I I i
pl i k_zapi s . cl ose ( ) : I I zamykamy plik
}
matri x: : czytaj_dane_z_pl i ku ( int tabl i cal[rozmi ar] [rozmi ar] . i nt rozmi ar)
{
i nt i , j :
cout << endl :
cout << "Odczytuj emy tabl i ce lOxlO z pl i ku. " << endl :
i fstream pl i k_odczyt( "dane .txt" ) : li otwieramy istniejacyplik
for ( i = O : i < rozmi ar : i ++)
{
for (j = O : j < rozmi ar: j++ )
{
pl i k_odczyt >> tabl i cal[i ] [j] : I I odcztujemy tablice z pliku
cout << tabl i cal[i ][j ] << " " :
} I I i
cout << endl
:
} I I i
pl i k_odczyt . cl ose ( ) : I I zamykamy plik
}
ma i n ( )
{
i nt tab[ rozmi ar][rozmi ar] :
Rozdzi ał 7. " P l i k i te kstowe 1 1 7
matri x matri xl : I I powstaje obiekt matrix]
matri xl . czytaj_dane (tab , rozmi ar) :
matri xl . zapi sz_dane_do_pli ku(tab , rozmi ar) :
matri xl . czytaj_dane_z_pl i ku(tab , rozmi ar) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Zwróćmy 11wagę, że w programie zadekla1,owano dwie tablice:
i nt tabl i ca[rozmiar][rozmiar]
oraz
i nt tabl i cal[rozmi ar] [rozmiar]
Tablica o nazwie tab1 i ca [ J [ J przechow11je dane p1,zed zapisaniem ich
do pliku, natomiast tabl i cal[][] przechow11je dane odczytane z niego.
Rez11ltat działania prog1,am11 można zobaczyć na I'ys11nk11 7. 2.
Zapisujemy tablice 10x10 do pliku.
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
Odczytujemy tablice 10x10 z pliku.
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
Rysunek 7. 2. Efe dziaÅ‚ania prog1żÿa111u Zadanie 7.2
1 1 8 C+ +. Zadani a z pr og ra mowa ni a z przykładowymi rozwi ązani ami
ZADANIE
Napisz zgodnie z zasadami programowania obiektowego pro­
gram, który tablicę a o wymiarach 1Ox1 O i postaci
o o o o o o o o o o
1 1 1 1 1 1 1 1 1 1
o o o o o o o o o o
o o o o o o o o o o
o o o o o o o o o o
o o o o o o o o o o
o o o o o o o o o o
o o o o o o o o o o
o o o o o o o o o o
o o o o o o o o o o
p1,zekształca w tablicę b
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
o 1 o o o o o o o o
i zapisl1je wynik do pliku tekstowego dane. txt, a następnie odczytt1je
z niego tablicę i wyświetla ją na ekranie. Klasa powinna zawierać
cztery metody:
Rozdzi ał 7. " P l i k i te kstowe 1 1 9
O czytaj_dane( ) tworzy tablicÄ™ a o wymiarach 10X 10;
O przetworz_dane( ) przepis11je elementy tablicy a o wymia1,ach
10x 10 do tablicy b o tej samej wielkości;
O zapi sz_dane_do_pl i ku( ) zapis11je tablicÄ™ b o wymia1,ach 1ox 10
do plik11;
O czytaj_dane_z_pl i ku( ) odczytuje tablicÄ™ c o wymia1,ach 10X10
z pliku i wyświetla ją na ekranie.
Przy adowe 1żÿozwiqzanie - listing 7.3
#i ncl ude I I Zadanie 7.3
#i ncl ude
#i ncl ude
const i nt n = 10 :
cl ass matri x I I definicja klasy matrix
{
publ i c:
i nt a[n] [n] , b[n] [n] , c[n][n] :
czytaj_dane ( ) : I I proto p funkcji ytaj_daneO
przetworz_dane ( ) : I I proto p funkcji prze orz_daneO
zapi sz_da ne_do_p l i ku ( ) : I I proto p funkcji zapisz_dane_do likuO
czytaj_dane_z_p l i ku ( ) : I I proto p funkcji czytaj_dane_z likuO;
} :
matri x: : czytaj dane( )
{
j
i nt i , :
cout << "Tworzymy tabl i ce a . " << endl :
fo r ( i = O : i < n : i ++ )
{
for (j = O : j < n: j++ )
{
i f (i == 1)
a[i ] [j] = 1:
el se
a[i ] [j] = O :
cout << a[i ][j] << " " :
} I I i
cout << endl :
1 2 0 C ++. Za dani a z pr og ra mowa ni a z przykła d owymi rozwi ązani ami
I I i
}
I I koniec wpisywania
}
matri x: : przetworz_dane( )
{
i nt i , j :
cout << endl :
cout << "Przepi sujemy el ementy z tabl i cy a do tabl i cy b. " << endl :
fo r ( i = O : i < n : i ++ )
{
for (j = O : j < n: j++ )
{
b[i ][j] = a[j][i ] : 11 przepisujemy zawartosc tablicy a do tablicy b
} I I j
I I i
}
}
matri x: : zapi sz_dane_do_pl i ku( )
{
i nt i , j :
cout << "Zapi sujemy tabl ice b do pl i ku dane . txt . " << endl :
ofstream pl i k_zapi s ( "dane . txt" ) : I I two ymy i otwieramy plik do zapisu
fo r ( i = O : i < n : i ++ )
{
for (j = O : j < n: j++ )
{
cout << b[i ] [ j] << " " :
pl i k_zapi s << b [i ] [j] << endl : I I zapisujemy tablice do pliku
} I I j
cout << endl :
I I i
}
I I koniec zapisywania do pliku
pl i k_zapi s . cl ose ( ) : I I zamykamy plik
}
matri x: : czytaj_dane_z_pl i ku( )
{
i nt , j :
i
cout << endl :
cout << "Odczytuj emy tabl i ce c z pl i ku dane . txt i wyswi etl amy ja na
ekrani e. " << endl :
Rozdzi ał 7. " P l i k i te kstowe 1 2 1
i fstream pl i k_odczyt ( "dane . txt " ) : I I otwieramy istniejacy plik
fo r ( i = O : i < n : i ++ )
{
j
for (j = O : < n: j++ )
{
[j] : I I odczytujemy tablice z pliku
>> c[i ]
k_odczyt
pl i
cout << c[i ] [j] << " " :
} I I j
cout << endl :
} I I i
I I koniec odczy wania z pliku
pl i k_odczyt . cl ose ( ) : I I zamykamy plik
}
ma i n ( )
{
matri x matri xl : I I powstaje obiekt matrix]
matri xl . czytaj_dane ( ) :
matri xl .przetworz_dane ( ) :
matri xl . zapi sz_dane_do_pl i ku( ) :
matri xl . czytaj_dane_z_pl i ku( ) :
getch ( ) : I I czeka na nacisniecie dowolnego klawisza
}
Rezt1ltat dziaÅ‚ania programt1 można zobaczyć na ryst1nkt1 7 .3 (1,ysu­
nek p1,zedstawiony na następnej st1,onie).
1 2 2 C ++. Za dani a z pr og ra mowa ni a z przykła d owymi rozwi ązani ami
Tworzymy tablice a.
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Przepisujemy elementy z tablicy a do tablicy b.
Zapisujemy tablice b do pliku dane.txt.
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
Odczytujemy tablice c z pliku dane.txt i wyswietlamy ja na ekranie.
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
Rysunek 7. 3. Efe dziaÅ‚ania prog1żÿamu Zadanie 7.3


Wyszukiwarka

Podobne podstrony:
zadanie programowaine
Turbo Pascal Zadania z programowania z przykladowymi rozwiazaniami tpzada
Java Zadania z programowania z przykładowymi rozwiązaniami
6 2 Zadania programowania liniowego
C Zadania z programowania z przykladowymi rozwiazaniami cshzap
Optymalizacja Cw 3 Zadanie programowania nieliniowego bez ograniczeń algorytmy optymalizacji loka
Java Zadania z programowania z przykladowymi rozwiazaniami javaza
Zadania z Programowania C (1)
C Zadania z programowania z przykladowymi rozwiazaniami cppzad

więcej podobnych podstron