C Zadania z programowania 9788324637072

background image

eBook

PDF

nia

z programuwama

z

Proste operacje wejścia/wyjścia

Tablice, iteracje oraz podprogramy

Progr

amow

anie obiektowe i pliki tekstowe

zamamt

background image

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ądź 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:

heli

o

n

@

heli

o

n.pl

WWW:

http:

/ !

helion. pl

(księgarnia internetowa, katalog książek)

Drogi Czytelniku!

Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres

http:/

!

heli

o

n. pl/user

/

op

i

nie ?

c

ppzad

_

p

Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Kody wykorzystane w książce można znaleźć pod adresem:

ftp:/

/

ftp.hel

i

on.pl/przykłady/

c

ppzad

.

z

i

p

ISBN:

978-83-246-3707-2

Numer katalogowy:

6900

Copyright

©

Helion

2011

Printed in Poland.

Poleć ksią

ż

kę na Facebook.com

Kup w wersji papierowej

Oceń książkę

Księgarnia internetowa

Lubię to

!

»

Nasza społeczność

background image

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

background image

4

C + + . Z a d an i a z p r o g r a m o w ani a z p rz y k ł a d o w y m i rozw i ą z an i a m i

background image

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 przykladowyn1i

rozw1qzan1a1111.

C + + .

Zadania z progran1owania z przykładowymi rozwiqzanian1i.

Java. Zadania z progran1owania z przykladowyn1i 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.

background image

6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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

background image

. ,

.

SCIO-W

W

tyn1 rozdziale zan1ieszczono proste zadania z przykladowyn1i rozwiq­

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 <i ostream . h>

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.

background image

8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 s i on ( n ) .

Flaga

fi xed

używa do

liczb zmiennoprzecinkowych t1stalonej k1,opki dziesiętnej , natomiast

manipulator

s etp reci s i 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 s i on ( n )

wym

aga włączenia do pro­

gramt1 pliku nagłówkowego:

#i ncl ude <i omani p . h>

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

a

i

b

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.

Przykładowe 1�ozwiqzanie - listing

1 . 1

#i nc l ude <i ostream . h>

I I Zadanie 1 . 1

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n

(

)

{

fl oat a . b, pol e :

cout << " P rogram 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

/

.

background image

}

Ro,z d z i a ł

1.

P ro s t e o p e r a c j e wejści a-wyjśc i a

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 kod 11

fl oat a . b, pol e :

9

t1możliwia zadeklarowanie zmiennych

a , b

i

pol e

(wszystkie zmienne

w p1·og1,amie są typ11 rzecz.ywistego

fl oat).

Inst1,11kcja

cout << " P rogram 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 s i on ( 2 ) :

oznac.za, że liczby te będą wyświetlane na ek1,anie z dokładnością
dwóch miejsc po kropce. Natomiast ft1nkcja

g etch ( ) :

(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

background image

1 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 , 1 4

. . . 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 <math . h>

należy dołączyć do programu.

Przykładowe 1�ozwiqzanie - listing

1 .2

#i nc l ude <i ostream . h>

I I Zadanie 1 . 2

#i ncl ude <i omani p . h>

#i ncl ude <math . h>

#i ncl ude <coni o . h>

ma i n ( )

{

}

cout << " Program wyswi et l a wa rtosc predefi ni owanej stal ej pi " << endl :
cout << " z dokl adnosci a pi eci u mi ejsc po k ropce . " << endl :

cout << "pi

=

" << fi xed << setprec i s i on ( S ) <<

M_PI

<< endl :

getch

( )

: I I czeka na nacisniecie dowolnego klawisza

Rez11ltat działania programt1 można zobaczyć na rysunkt1

1 . 2 .

background image

Ro,z d z i a ł

1.

P ro s t e o p e r a c j e wejści a-wyjśc i a

Program wyswietla wartosc predefi n iowanej stalej pi

z dok lad noscia piec i u miejsc po kropce.

pi =

3.14159

Rysunek 1.2.

Efekt działania prog1�an1u Zadanie

1.2

ZADANIE

1 1

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 funkcji

sqrt( ) .

Funkcja ta znajduje się w pliku nagłówkowym math.h.

Przykładowe 1�ozwiqzanie - listing

1 .3

#i nc l ude <i ostream . h>

I I Zadanie 1.3

#i ncl ude <i omani p . h>

#i ncl ude <math . h>

#i ncl ude <coni o . h>

mai n ( )

{

cout << " Program wyswi etl a pi erwi a stek kwadratowy z pi " :
cout << " z dok l a dnosci a dwoch mi ej sc po k ropce . " << 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 doklad noscia dwoch m iejsc po kropce.
Sqrt(pi) =

1.77

Rysunek 1. 3.

Efekt działania progran1u Zadanie

1 . 3

background image

1 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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

objetos c

należy przyjąć format wyświetlania ich

na ekranie z dokładnością dwóch miejsc po kropce.

Przykladowe rozwiązanie - listing

1 .4

#i nc l ude <i ostream . h> I I

Zadanie 1.4

#i ncl ude <i omani p . h>

#i ncl ude <math . h>

#i ncl ude <coni o . h>

ma i n

( )

{

}

fl oat r . objetosc :

cout << " Program ob l i cza objetosc kul i o promi eni u r . " << endl :
cout <<

11

Podaj promi en r . " << endl :

c1n >> r :

objetosc

=

4*M_PI*r*r*r/3 :

cout << fi xed :

cout << setpreci si on ( 2 ) :

cout << "Objetosc kul i o promi eni u r

=

11

<< 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 prom ien i u r.
Podaj prom ien r.

1

Objetosc kuli o prom ien i u r =

1.00

wynosi

4.19.

Rysunek 1.4.

Efekt dzialania prog1�amu Zadanie

1.4

background image

Ro,z d z i a ł

1.

P ro s t e o p e r a c j 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

=

1 1 .

Wskazówka

w

języku

c+ +

w przypadku zastosowania operatora dzielenia

I

dla liczb

całkowitych reszta wyniku jest pom ijana3.

Przykładowe 1�ozwiqzanie - listing

1 . 5

#i nc l ude <i ostream . h> I I

Zadanie 1.5

#i ncl ude <coni o . h>

ma i n

(

)

{

}

i nt a = 37 :
i nt b =

11:

cout << " Program obl i cza wyni k dzi e l 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 wyn i k dzielenia cal kowitego

dla dwoch liczb cal kowitych.

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,eszty

di v.

background image

1 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ZADANIE

Napisz prog1,am, który oblicza I'esztę z dzielenia całkowitego

dla dwóch liczb całkowitych a

=

3 7

i b

=

1 1 .

Wskazówka

Należy zastosować operator reszty z dzielenia całkowitego modulo, który

oznaczamy w języku

C+ +

symbole1m %. Operator ten umożliwia uzyskan 1ie

tylko reszty z dzielenia, natomiast całkowita wartość liczbowa jest odrzucana.

Przykładowe 1�ozwiqzanie - listing

1 . 6

#i nc l ude <i ostream . h> I I

Zadanie 1.6

#i ncl ude <coni o . h>

ma i 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 dzielen ia calkowitego dwoch liczb

calkowitych.

Dla liczb a = 37 i b = 1 1

37%1 1 =4.

Rysunek 1.6.

Efekt działania prog1�amu Zadanie

1.6

background image

Ro,z d z i a ł

1.

P ro s t e o p e r a c j 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, s uma, 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.

Przykładowe rozwiązanie - listing

1 . 7

#i nc l ude <i ost ream . h> I I

Zadanie 1. 7

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n (

)

{

}

fl oat x . y , suma . rozn1ca . i l oczyn , i l ora z :

cout << " Program obl i cza sume . rozni ce . i l oczyri i i l oraz" << endl :
cout << "dl a dwoch l i czb x

l

y wprowadzanych z kl awi atury . " << endl :

cout << endl :

cout << " Podaj x . " << endl :

Cln >>

X:

cout << " Podaj y . " << endl :

Cl n >>

Y:

suma = x+y :

rozn1ca = x-y :

i l oczyn = x*y :
i l oraz = x/y :

cout << fi xed :

cout << setpreci s i on ( 2 ) :

co ut << "Ol a x = " << x <<

11

i y = " << y << eridl :

cout << endl : I I

wydruk pustej linii

cout << "suma = " << suma << "." << endl :

cout <<

11

rozni ca = " << rozni ca << " . " << endl :

co ut << "i l oczy n = " << i l o czyn << " . " << en dl :
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 .

background image

1 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Program obl icza su me, roznice, i loczyn i iloraz

d la dwoch liczb x i y wprowadzanych z klawiatu ry.

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.

Efekt dzialania prog1�an1u Zadanie

1. 7

background image

mu

w

W

tyn1 rozdziale przedstawimy typowe zadania wraz z przykladowyn1i

rozwiqzanian1i z wykorzystanie1n instrukcji warunkowych.

w

języku c+ + istnieją dwie instrt1kcje wart1nkowe:

D

instrt1kcja wart1nkowa

i f

.

.

.

el se,

D

instrt1kcja wyboru

swi tch . . . case.

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 warunek jest prawdziwy

el se

{

}

I I

instrukcje do wykonania, kiedy warunek jest fał

szywy

background image

1 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Blok

el se

jest opcjonalny i instrukcja war11nkowa w wersji skróconej

ma postać

i f

(warunek )

{

}

I I

instrukcje do wykonania, kiedy warunek jest 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­

stokątny (zakładamy, że

a >

O,

b > O, c >

O) .

Przykładowe 1�ozwiqzanie - listing

2.1

#i nc l ude <i ost ream . h> I I

Zadanie 2. 1

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt a , b , c :

cout << " Program sprawdza . czy boki a , b oraz c tworza troj kat

"+prostokatny . " << endl :

background image

}

R o z d z i a ł

2.

P o d ejmuj e m y d e c y z j e w p r o g r a m i e

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 ) )

{

}

cout << "Boki a = " << a << " , b = " << b <<

11

i c =

11

<< c :

cout << " tworza trojkat prostokatny . " << endl :

el se

{

}

cout << "Boki a =

11

<< a << " , b = " << b <<

11

i c = " << c :

cout << " ni e tworza t roj kata prostokatnego .11 << endl :

getch (

) : I I

czeka na nacisniecie dowolnego klawisza

1 9

Sprawdzenie twierdzenia Pitagorasa dla wczytanych boków

a ,

b

i

c

zostało zawarte w następ11jących linijkach kod 11:

i f ( ( a*a+b*b ) == ( c*c ) )

{

}

cout << "Boki a =

11

<< a << " , b = " << b <<

11

i c = " << c :

cout <<

11

tworza trojkat prostokatny . " << endl :

e l se

{

}

cout << "Boki a =

11

<< a << ", b = " << b <<

11

i c =

11

<< c:

cout << " ni e tworza t roj kata prostokatnego .11 << endl :

Łatwo 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 .

background image

2 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Program sprawdza, czy boki a, b oraz c tworza troj kat
prostokatny.
Podaj bok a.
1
Podaj bok b.

2

Podaj bok c.

3

Boki a = 1 , b = 2 i c = 3 n ie tworza troj kata prostokatnego.

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

a x2+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 nc l ude <i ostream . h>

I I Zadanie 2.2

#i ncl ude <i omani p . h>

#i ncl ude <math.h>

#i ncl ude <coni o . h>

ma i n ( )

{

fl oat a . b , c . delta . xl. x2 :

cout << " Program obl i cza pi erwi a stki 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 . " :

}

e l se

{

cout << " Podaj b . " << endl :
ci n >> b :

cout << " Podaj c . " << endl :
c1n >> c :
cout << fi xed :

cout << setpreci si on ( 2 ) :

background image

}

R o z d z i a ł

2.

P o d ejmuj e m y d e c y z j e w p r o g r a m i e

cout <<

" D l a wprowadzonych

l i czb : "

<<

endl :

cout <<

" a

li

<< a <<

li

li

<< endl :

-

cout <<

li

b

li

<< b <<

li

li

<< endl :

-

cout <<

lic

li

<< c <<

li

li

<< endl :

-

del ta

=

b*b -4*a*c :

i f ( del ta < O )

{

cout << " b ra k pi erwi astkow rzeczywi stych . " << endl :

}

e l se

{

i f ( del ta

==

O )

{

xl =

- b / ( 2*a ) :

cout << " trojmi an ma j eden pi erwi astek podwojny

xl =

" <<

xl

<<

'+<< endl :

}

el se

{

xl =

( - b - sqrt(delta ) ) / ( 2*a ) :

x

2

=

( - b+sq rt ( de l ta ) ) / ( 2*a ) :

cout << " trojmi an ma dwa pi erwi a stki : " << endl :
co ut <<

"xl =

" <<

xl

<< " " << endl :

co ut << " x2

=

" << x2 << " . " << endl :

}

}

}

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

2 1

11

1 I

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 . " :

e l 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

background image

2 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

del ta

=

b*b - 4*a*c :

Jeśli

del ta < O,

to zostanie wyświetlony kom11nikat

brak pierwiastkow

rzeczywistych.

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 ( de l ta ) ) / ( 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 kwad ratowego d la

dowol nych wspolczynnikow a, b, c.

Podaj a.
1
Podaj b.

5

Podaj c.

4

Dla wprowadzonych liczb:

a = 1 .00,

b = 5.00,

c = 4.00,
troj m ian m a dwa pierwiastki :
x1 = -4.00,

x2 = -1 .00.

Rysunek 2.2.

Efekt działania prog1�a111u Zadanie

2.2

background image

R o z d z i a ł

2.

P o d ejmuj e m y d e c y z j e w p r o g r a m i e

2 3

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'illat

wyświetlania ich na ekranie z dokładnością dwóch miejsc po

kropce.

Wskazówka

Należy wprowadzić do programu zmienną pomocn iczą

l i czba_p i erwi as tkow.

Przykładowe 1�ozwiqzanie - listing

2.3

#i nc l ude <i ostream . h>

I I Zadanie 2. 3

#i ncl ude <i omani p . h>

#i ncl ude <math . h>

#i ncl ude <coni o . h>

ma i n

( )

{

fl oat a . b . c . delta , xl , x2 :

char l i czba_pi erwi a stkow :

cout << " Program obl i cza pi erwi a stki 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 << " N i edozwol ona wartosc wspol czynni ka a . Naci sni j dowol ny

'+kl awi s z . " :

}

e l se

{

cout << "Podaj b . " << endl :
ci n >> b :

cout << "Podaj c . " << endl :

Cl n >> C ;

cout

<<

fi xed :

cout <<

setpreci si on(2 ) :

cout <<

" D l a wprowadzonych

cout <<

" a

=

li

<< a <<

li

li

cout <<

'' b

=

li

<< b <<

li

"

cout <<

" c

=

li

<< c <<

li

"

del ta

=

b*b- 4*a*c :

l i czb : " << endl :

<< endl :

<< endl :

<< endl :

background image

2 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

}

i f (delta <

0)

l i czba_pi erwi a stkow

=

O :

i f (delta

==

0 ) l i czba_pi erwi a stkow

= 1 :

i f (delta

>

0)

l i czba_pi erwi a stkow

=

2 :

swi tch ( l i czba_pi erwi a stkow )

{

case O : cout << "b ra k pi erwi a stkow rzeczywi stych . " << endl :

brea k :

case

1

: { xl

=

- b / ( 2*a ) :

}

cout << ··trojmi an ma j eden pi erwi astek podwoj ny " :
cout << •· xl

=

" << xl << " . " << endl :

brea k :

case 2 : { xl

=

( - b - sq rt ( de l ta ) ) / ( 2*a ) :

x2

=

( - b+sqrt ( delta ) ) / ( 2*a ) :

}

cout << "'trojmi an ma dwa pi erwi a stki : " << endl :
cout << •· xl

=

" << xl << 11 " << en dl :

cout << •· x2

=

" << x2 << 11

" << en dl :

brea k :

}

}

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 kwad ratowego d la

dowol nych wspolczynnikow a, b, c.

Podaj a.
1
Podaj b.

4

Podaj c.

4

Dla wprowadzonych liczb:

a = 1 .00,

b = 4.00,

c = 4.00,
troj m ian m a jeden pierwiastek podwoj ny x1 = -2.00.

Rysunek 2.3.

Efekt działania prog1�amu Zadanie

2.3

background image

ZADANIE

R o z d z i a ł

2.

P o d ejmuj e m y d e c y z j e w p r o g r a m i e

2 5

Napisz program, który oblicza wa1,tość

x

z równania

a x+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.

Przykładowe rozwiązanie - listing

2.4

#i nc l ude <i ostream . h> I I

Zadanie 2.4

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n ( )

{

fl oat a , b , c . x :

cout << " Program obl i cza wartosc x z rownan1a l i ni 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 k l awi sz . " :

}

e l se

{

cout << "Podaj b . " << endl :

ci n >> b :

cout << " Podaj c . " << endl :

Cln >> C ;

x = ( c - b ) /a :

cout << fi xed :

cout << setpreci s i on ( 2 ) :

cout << "D l a a = " << a << " , b = "

cout << " wartosc x = " << x <<

}

I I

I I

<< b <<

li

'

c =

li

<< c :

<< endl :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

background image

2 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Rezt1ltat działania programu można zobaczyć na rysunku

2 . 4 .

Program oblicza wartosc x z rownania lin iowego 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ć instrukcję (makro)

r andom() .

Przykładowe 1�ozwiqzanie - listing

2.5

#i ncl ude <i ostream . h>

li

Zadani e 2 . 5

#i ncl ude <math . h>

#i ncl ude <coni o . h>

ma i n

( )

{

i nt l osuj_l i czbe , zgadn i j_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 :

}

e l se

{

background image

}

}

R o z d z i a ł

2.

P o d ejmuj e m y d e c y z j e w p r o g r a m i e

cout << "Ba rdzo mi przykro . a l e wyl osowana l i czba to : " <<

'+ l osuj_l i czbe <<

"

.

" << endl :

getch ( ) : / / czeka na naci sni eci e dowol nego k l awi sza

2 7

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.

Zgad n ij ja.

1
Bardzo m i przykro, ale wylosowana l iczba to: 4.

Rysunek 2.5.

Efekt dzialania prog1�an1u Zadanie

2.5

background image

2 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

background image

W

tyi11 rozdziale przedstawi1ny typowe zadania wraz z przykladowy1ni

rozwiqzania111i z wykorzystanien1 iteracji, czyli popularnych pętli.

O

ile

n1lodzi progran1iści nie n1ajq problen1u z progra1nan1i, w ldórych wyko­

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

j est 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).

background image

3 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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

t rue.

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 lizacj a : 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

(warune k ) :

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.

background image

R o z d z i a ł 3.

I t e r a c j 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

(warune k )

{

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.

Przykladowe 1�ozwiqzanie - listing

3.1

#i nc l ude <i ost ream . h> I I

Zadanie 3. 1

#i ncl ude <coni o . h>

ma i n

( )

{

i nt

X , y;

cout << " P rogram obl i cza wartosc funkcji

y

= 3x dl a x zmi eni ajacego si e

�od O do

10."

<< endl :

for ( x = O : x <=

10:

x++ )

{

y = 3*x :

cout << " x = " << x << ' \t ' <<

"y

= " <<

y

<< endl :

}

getch

(

) : I I

czeka na nacisniecie dowolnego klawisza

}

w

pętli

for ( x = O :

x

<=

10:

x++ )

background image

3 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 fu n kcj 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 y = 9

x = 4 y = 1 2
x = 5 y = 1 5

x = 6 y = 1 8

x = 7 y = 21

x = 8 y = 24
x = 9 y = 27
x = 1 0 y = 30

Rysunek 3. 1.

Efekt 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.

Przykładowe 1�ozwiqzanie - listing

3.2

#i nc l ude <i ost ream . h>

I I Zadanie 3.2

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt X = 0 , Y = 0 :

cout << " P rogram obl i cza wartosc funkcji y = 3x dl a x zmi eni ajacego si e

�od O do 10 . " << endl :

background image

do

{

y

= 3*x :

R o z d z i a ł 3.

I t e r a c j e

cout <<

11

X =

11

<< x << ' \ t ' <<

11

Y

=

11

<<

y

<< endl :

x++:

}

whi l e ( x <= 1 0 ) :

getch (

)

: I I

czeka na nacisniecie dowolnego klawisza

}

Pętla

do

.

. . whi l e

do

{

y

= 3*x :

cout << " x =

11

<< x << ' \t ' <<

11

Y

= 11 <<

y

<< endl :

x++:

}

whi l e ( x <= 1 0 ) :

33

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 .zakoń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

1 0

oblicza wartość

funkcji

y =

3x.

Przykładowe 1�ozwiqzanie - listing

3.3

#i nc l ude <i ostream . h> I I

Zadanie 3.3

#i ncl ude <coni o . h>

ma i n

(

)

{

background image

3 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

i nt x

=

O ,

y =

O :

cout << '' Program obl i cza wartosc funkcji

y =

3x dl a x zmi eni ajacego si e

�od O do 10 . 11 << endl :

whi l e ( x <

=

1 0 )

{

}

y =

3*x :

cout <<

11X =

11 << x << ' \ t ' << 11Y

=

11 <<

y

<< endl :

x++ :

g etch (

)

: 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 <

=

1 0 )

{

y =

3*x :

cout << " x

=

"

<< x << ' \t ' <<

"y =

"

<<

y

<< endl :

x++ :

}

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:

x++ :

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 <= 1 0 ) ,

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.

Przykładowe 1�ozwiqzanie - listing

3.4

#i nc l ude <i ostream . h> I I

Zadanie 3. 4

#i ncl ude <coni o . h>

background image

ma i n (

)

{

i nt i :

R o z d z i a ł 3.

I t e r a c j e

cout << " P rogram wyswi etl a l i czby c a l kowi te od

1

do 20 . " << endl :

for ( i = 1 : i <= 20 : i ++ )

{

i f ( i < 2 0 )

{

cout << i <<

}

e l se

{

}

}

cout << i <<

I I

I I •

I I

11 •

.

'

'

getch

(

) : I I

czeka na nacisniecie dowolnego klawisza

}

Rez11ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1

3 . 2 .

Program wyswietla liczby cal kowite od 1 do 20.
1 , 2, 3, 4, 5, 6, 7, 8, 9, 1 0, 1 1 , 12, 1 3, 1 4, 1 5, 1 6, 1 7, 18, 1 9, 20.

Rysunek 3.2.

Efekt działania prog1�an1u Zadanie

3.4

ZADANIE

35

Napisz program, który za pomocą instrukcji

do

.

. .

whi 1 e

wy­

świetla liczby całkowite od

1

do

20.

Przykładowe rozwiązanie - listing

3.5

#i nc l ude <i ostream . h> I I

Zadanie 3. 5

#i ncl ude <coni o . h>

ma i n ( )

{

i nt i = 1 : I I

ustalenie wartosci poczatkowej

cout << " P rogram wyswi etl a l i czby c a l kowi te od 1 do 20 . " << endl :

do

{

i f ( i < 20 )

background image

3 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

{

cout << i << "

li •

}

el se

{

cout << i <<

}

l ++:

}

ł I

I I •

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.

Przykładowe rozwiązanie - listing

3.6

#i nc l ude <i ost ream . h> I I

Zadanie 3. 6

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt i = 1 : I I

ustalenie wartosci poczatkowej

cout << " P rogram wyswi etl a l i czby c a l kowite od 1 do 20 . " << endl :

whi l e ( i <= 2 0 )

{

i f ( i < 2 0 )

{

cout << i << "

}

e l se

{

l i

cout << i <<

, ,

1 1 •

}

i ++ :

}

.

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

}

background image

R o z d z i a ł 3.

I t e r a c j e

37

ZADANIE

Napisz program, który za pomocą instr1ikcji

for

s11m11je liczby

całkowite od

1

do

1 00.

Przykładowe 1�ozwiqzanie - listing

3. 7

#i nc l ude <i ost ream . h> I I

Zadanie 3. 7

#i ncl ude <coni o . h>

ma i n

( )

{

i nt i , suma = O :

cout << " P rogram 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

s uma

m11si zostać wyzerowana, stąd

zapis

suma =

O :

Rez11ltat działania program11 można zobaczyć na rys11nk11

3 . 3 .

Program s u m uje l iczby cal kowite od 1 do 1 00.

Suma liczb calkowitych od 1 do 1 00 wynosi 5050.

Rysunek 3.3.

Efekt działania prog1�an1u Zadanie

3. 7

background image

3 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ZADANIE

Napisz progi,am, któI'Y za pomocą insh'ukcji

do

.

. . whi l e

sl1-

m11je liczby całkowite od

1

do

100.

Przykładowe 1�ozwiqzanie - listing

3.8

#i nc l ude <i ostream . h> I I

Zadanie 3.8

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt i =

l ,

suma = O : I I

ustalenie wartosci poczatkowych

cout << " P rogram sumuje l i czby cal kowi te od 1 do 100 . " << endl :

do

{

}

suma - suma+1 :

l ++ :

whi l e ( i <= 1 00 ) :

cout << "Suma l i czb cal kowi tych od

1

do 100 wynosi " << suma <<

�endl :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

}

ZADANIE

li

li

<<

Napisz p1,ogram, który za pomocą insh'llkcji

whi l e

s11m11je

liczby całkowite od

1

do

100.

Przykładowe rozwiązanie - listing

3.9

#i nc l ude <i ostream . h> I I

Zadanie 3.9

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt i =

l ,

suma = O : I I

ustalenie wartosci poczatkowych

cout << " P rogram sumuje l i czby cal kowi te od 1 do 100 . " << endl :

whi l e ( i <= 100 )

{

suma = suma+1 :

background image

R o z d z i a ł 3.

I t e r a c j e

39

i ++ ·

}

cout << "Suma l i 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 modu Io %.

Przykładowe 1�ozwiqzanie - listing

3 . 1 O

#i nc l ude <i ost ream . h> I I

Zadanie 3.1 O

#i ncl ude <coni o . h>

ma

i

n (

)

{

i nt i , suma = O :

cout << " P rogram sumuJe l i czby parzyste w przedzi a l 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 pa rzystych z przedzi a l 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 :

}

background image

4 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 urna.

Rezultat działania program11 można zobaczyć na rysunk11

3 .4.

Program s u m uje l iczby parzyste w przedziale od 1 do 1 00.

Suma liczb parzystych z przedzialu od 1 do 1 00 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 modu Io %.

Przykładowe 1�ozwiqzanie - listing

3 . 1 1

#i nc l ude <i ost ream . h> I I

Zadanie 3. 1 1

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt i , suma

=

O :

cout << " P rogram sumuje l i czby parzyste w przedzi a l e od 1 do 100 . " <<
�endl :

do

{

i f ( i %2

==

o )

suma

=

suma+1 :

i ++ ·

'

}

whi l e

(i

<

=

1 00 ) :

cout << "Suma l i czb pa rzystych z przedzi a l u od 1 do 100 wynosi " << suma

�<< " . " << endl :

getch (

)

: I I

czeka na nacisniecie dowolnego klawisza

}

background image

R o z d z i a ł 3.

I t e r a c j e

4 1

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 %.

Przykładowe 1�ozwiqzanie

-

listing

3 . 1 2

#i nc l ude <i ost ream . h> I I

Zadanie 3.12

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt i . suma = O :

cout << " P rogram sumuJe l i czby parzyste w przedzi a l 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 a l 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 modu Io % i oznaczonego

sym bo Iem

!

operatora negacji.

Przykładowe rozwiązanie - listing

3 . 1 3

#i nc l ude <i ost ream . h> I I

Zadanie 3.13

#i ncl ude <coni o . h>

background image

4 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ma i n

( )

{

i nt i , suma = O :

cout << " Program sumuJe l i czby ni epa rzyste w p rzedzi a l 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 a l 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

j est

I'óżna od zera, a więc mamy do czynienia z liczbą nieparzystą, którą

dodajemy do zmiennej

s um a .

Rezt1ltat działania programt1 można zobaczyć na rysunkt1

3 . 5 .

Program sumuje liczby nieparzyste w przedziale od 1 do 1 00.

Suma liczb nieparzystych z przedzialu od 1 do 100 wynosi 2500.

Rysunek 3.5.

Efekt działania p1�og1�an1u Zadanie

3. 1 3

background image

R o z d z i a ł 3.

I t e r a c j e

4 3

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 negacji

! .

Przykładowe 1�ozwiqzanie - listing

3 . 1 4

#i nc l ude <i ost ream . h> I I

Zadanie 3.14

#i ncl ude <coni o . h>

ma i n

(

)

{

i nt i . suma = O :

cout << " P rogram sumuJe l i czby ni epa rzyste w przedzi a l e od

1

do 100 . "

�<< endl :

do

{

i f (

!

( i

% 2

==

o

)

)

suma = suma+1 :

i ++ ·

'

}

whi l e ( i <= 1 00 ) :

cout << "Suma l i czb ni epa rzystych z przedzi a l 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 negacji

! .

Przykładowe 1�ozwiqzanie - listing

3 . 1 5

#i nc l ude <i ost ream . h> I I

Zadanie 3.15

#i ncl ude <coni o . h>

background image

4 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ma i n

(

)

{

i nt i , suma

=

O :

cout << " P rogram sumuJe l i czby ni epa rzyste w przedzi a l 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 a l 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) .

Przykladowe rozwiązanie - listing

3 . 1 6

#i nc l ude <i ost ream . h> I I

Zadanie 3. 1 6

#i ncl ude <math . h>

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

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 << " P rogram 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 wyl osowariych l i czb . ·· << endl :

suma

=

O :

randomi ze ( ) :

background image

R o z d z i a ł 3.

I t e r a c j e

m1 n = random ( l0 0 ) :

cout << endl :

cout << 11Wyl os owano l i czby : 11 << 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 )

{

cout << l i czba << 11 • 11 :

}

e l se

{

cout << l i czba <<

}

11 '' •

.

,

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 :

I I

11 •

,

cout << 11 Najwi eksza l i czba to

11

<< max <<

1 1

11 << endl :

cout << 11 Najmni ej sza l i czba to 11 << mi n << 11 •

1 1

<< endl :

cout << 11 Sredni a wynosi " << fi xed << setpreci s i on ( 2 ) <<
suma / i l osc l i czb << 11 • 11 << endl :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

}

4 5

W

pierwszej kolejności w programie los11jemy liczbę i przypis11jemy

jej wartość

mi n .

mi n = random ( l0 0 ) :

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:

background image

4 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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:

s uma

=

s uma+max

(przed pętlą) i

s uma

=

s uma+ 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 s i 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 d o 99,

a nastepnie znajduje naj m n iejsza i najwieksza oraz
oblicza sred n ia ze wszystkich wylosowanych liczb.

Wylosowano liczby: 93, 76, 6 1 , 1 2, 23.

Najwieksza liczba to 93.
Naj m n iejsza liczba to 12.

Sred nia 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 . 1 7

#i nc l ude <i ost ream . h>

I I Zadanie 3. 1 7

#i ncl ude <math . h>

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

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 :

background image

R o z d z i a ł 3.

I t e r a c j e

4 7

cout << " P rogram 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 e ksza 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 ( l0 0 ) :

cout << endl :

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 )

{

cout << l i czba << "

li •

,

}

e l se

{

cout

<<

l i czba

<<

}

li

l i

.

,

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 :

li •

,

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 s i on ( 2 ) <<

suma /i l osc l i czb << " . " << endl :

g etch ( ) : 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) .

background image

4 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Przykładowe 1�ozwiqzanie - listing

3 . 1 8

#i nc l ude <i ost ream . h>

I I Zadanie 3.18

#i ncl ude <math . h>

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

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 << " P rogram 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 e ksza oraz" << endl :
cout << " obl i cza s redni a ze wszystki eh wyl osowariych l i czb . ·· << endl :

suma = O :

randomi ze ( ) :

mi n = random ( lOO ) :

cout << endl :
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 ( l0 0 ) :

i f ( i <= i l osc l i czb - 2 )

{

cout << l i czba << "

li •

,

}

e l se

{

cout << l i czba <<

}

li

l i

.

,

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 ++ :

}

li •

,

background image

R o z d z i a ł 3.

I t e r a c j e

4 9

cout << endl :

cout << "Ma k symal 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 s i on ( 2 ) << sum a /

�i l osc l i czb <<

11

11

<< 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 .

Przykładowe rozwiązanie - listing

3 . 1 9

#i nc l ude <i ost ream . h> I I

Zadanie 3.19

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n ( )

{

}

const n = 10 :

i nt wi ersze . kol umny :

cout << " Program wyswi etl a tab l i czke mnozeni a d l a l i czb od 1 do 100 . "

�<< endl :

cout << endl :

for (wi ersze =

1 :

wi ersze <= n : wi e rsze++ )

{

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 .

background image

5 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Program wyswietla tabliczke mnozenia d la liczb od 1 do 1 00.

1

2

3

4

5

6

7

8

9

1 0

2

4

6

8

1

o

1 2

1 4

1 6

1 8

20

3

6

9

1 2

1 5

1 8

21

24

27

30

4

8

1 2

1 6

20

24

28

32

36

40

5

1 0

1 5

20

25

30

35

40

45

50

6

1 2

1 8

24

30

36

42

48

54

60

7

1 4

21

28

35

42

49

56

63

70

8

1 6

24

32

40

48

56

64

72

80

9

1 8

27

36

45

54

63

72

81

90

1 0

20

30

40

50

60

70

80

90

1 00

Rysunek 3. 7.

Efekt działania p1�ogra111

u

Zadanie

3 . 1 9

ZADANIE

Napisz program wyświetlający tabliczkę mnożenia dla liczb

od

1

do

1 00

z wykorzystaniem podwójnej pętli

do

.

. .

whi 1 e.

Przykładowe 1�ozwiqzanie - listing

3.20

#i nc l ude <i ostream . h>

I I Zadanie 3.20

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n

(

)

{

const n = 10 :

i nt wi ersze . kol umny :

background image

}

ZADANIE

R o z d z i a ł 3.

I t e r a c j e

5 1

cout << " Program wyswi etl a tab l i czke mnozeni a d l a 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

Napisz program wyświetlający tabliczkę mnożenia dla liczb

od

1

do

1 00

z wyko1�zystaniem podwójnej pętli

whi l e.

Przykładowe rozwiązanie - listing

3 .21

#i ncl ude <i ostream . h> / /

Zadanie 3.21

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n

( )

{

const n = 10 :

i nt wi ersze . kol umny :

cout << " Program wyswi etl a tab l i czke mnozeni a d l a 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 )

{

background image

5 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

}

ZADANIE

}

cout << wi ersze*kol umny << ' \t ' :

kol umny++ :

}

wi ersze++ :

cout << endl :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

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 .

Przykladowe 1�ozwiqzanie - listing

3.22

#i nc l ude <i ostream . h> I I

Zadanie 3.22

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n ( )

{

char zna k :

cout << " Program wyswi etl a duze l i tery a l fabetu od A do Z

i

od Z do A . "

"+<< endl :

cout << endl :

for ( znak = ' A ' : zna k <= ' Z ' : znak++ )

{

i f ( znak < · Z · )

{

cout << znak << "

}

el se

{

li •

,

cout << znak <<

11

I I •

}

}

cout << endl :

.

,

for ( znak = ' Z ' : zna k >= ' A ' : znak - - )

{

i f ( znak > · A · )

{

cout << znak << "

li •

,

background image

}

}

el se

{

}

}

cout << znak <<

11

ł I

R o z d z i a ł 3.

I t e r a c j e

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

Rez11ltat działania prog1,amt1 można zobaczyć na I'YSt1nkt1

3 . 8 .

Program wyswietla d uze litery alfabetu od

A

do Z i od Z do

A.

A,

B, C, D,

E, F, G, H,

I, J, K, L, M , N, O, P, Q, R, S,

T, U,

V,

W, X, Y, Z.
Z, Y, X, W, V,

U, T,

S, R, Q, P, O, N, M, L, K, J, I,

H, G, F, E,

D,

C, B,

A.

Rysunek 3.8.

Efekt działania p1�og1�an1u Zadanie

3.22

ZADANIE

5 3

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 nc l ude <i ostream . h> I I

Zadanie 3.23

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

ma i n

(

)

{

char zna k :

cout << " Program wyswi etl a duze l i tery a l fabetu od A do Z

i

od Z do A . "

"+<< endl :

cout << endl :

znak = ' A ' :

do

{

i f ( znak < · Z · )

{

background image

5 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

}

ZADANIE

}

cout << znak <<

}

el se

{

11

I I •

,

cout << znak << " . " :

}

zna k++ :

whi l e

(

znak <= ' Z ' ) :

cout << endl :

znak = ' Z ' :

do

{

i f ( znak > · A · )

{

cout << znak <<

}

el se

{

11

I I •

'

cout << znak << " . " :

}

zna k - - :

}

whi l e

(

znak >= ' A ' ) :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

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 nc l ude <i ostream . h> I I

Zadanie 3.24

#i ncl ude <i o

m

ani p . h>

#i ncl ude <coni o . h>

ma i n

(

)

{

char zna k :

cout << " Program wyswi etl a duze l i tery a l fabetu od A do Z i od Z do A . "

"+<< endl :

background image

}

cout << endl

:

znak = · A · :

whi l e ( znak <=

'

Z

'

)

{

i f ( znak < · Z · )

{

}

cout << znak <<

1 1

el se

{

R o z d z i a ł 3.

I t e r a c j e

li •

,

cout << znak <<

11

11 •

}

znak++ :

}

cout << endl

:

znak = · Z · :

whi l e ( znak >= ' A ' )

{

i f ( znak > · A · )

{

}

cout << znak <<

11

el se

{

li •

,

cout << znak <<

11

'' •

}

zna k - - :

}

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

5 5

background image

5 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

background image

I

W

tyn1 rozdziale p1·zedstawin1y typowe zadania wraz z rozwiqzanian1i

z wykorzystanien1 tablic jedno- i dwuwymiarowych.

Ta b l ice jed nowym ia rowe

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_tab l icy nazwa_tab l i cy[rozmi ar_tab l icy] :

Przykład poniżej ilustrt1je deklarację tablicy j ednowymiarowej typu

całkowitego o nazwie

dane

zawierającej

10

elementów.

i nt dane

[

1 O J :

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 O J :

background image

5 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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

ZADANIE

1

2

3

4

5

6

7

8

9

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

-�

,.o

ce

+-I

r:J)

Q,)

""d

o

1

2
3

4

5

6

7

8
9

Przykladowe rozwiązanie - listing

4 . 1

#i nc l ude <i ost ream . h>

I I Zadanie 4. 1

#i ncl ude <coni o . h>

mai n ( )

{

const n =

10 :

i nt i , dane [ n ] :

for ( i =

O

: i <

1

O

:

i ++ )

{

dane[ i J = i :

»

u

-�

,.o

ce

+-I

'U

'r:JJ

o

+-I

ce

o

1

2

3

4

5

6

7

8

g

cout << " dane[" << i << " ] = " << dane[i J << endl :

background image

}

R o z d z i a ł

4 .

• T a b l i c e

}

getch ( )

:

1 1

czeka na nacisniecie dowolnego klawisza

5 9

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.

Efekt 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

-�

...o

...o

ce

ce

.+-I

.+-I

'U

r:JJ

'r:J'J

o

.+-I

Q.)

"'d

ce

o

g

1

8

2

7

3

6

4

5

5

4

6

3

7

2

8

1

g

o

background image

6 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Wskazówka

Zadanie to rozwiążemy poprawnie, zamieniając w zadaniu

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 nc l ucie <i ostream . h> I I

Zadanie 4.2

#i ncl ude <coni o . h>

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

background image

R o z d z i a ł

4 .

• T a b l i c e

6 1

Ta b l ice dwuwym ia rowe

Tablice dw11wymiarowe deklar11jemy w języku C+ + podobnie j ak

jednowymia1,owe. Ogólna postać deklaracji takiej tablicy i związanej

z nią zmiennej jest następt1jąca:

typ_tab l icy nazwa_tab l i cy[rozmi ar_tab l icy] [ rozmi ar_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

1 0 X 10

typ11 całkowitego .

i nt dane [ lO J [ lO J :

Tablicę dwuwymiarową, jako prod11kt o wymiarach

1 0 X 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

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

7

Wartości liczbowe możemy wpisywać do tablicy wierszami lub ko­
lumnami. Pierwszy element tablicy

dane [ O J [ O J

jest I'ówny

1,

element

dane [ O J [ l ]

to

2,

element

dane [ l ] [ O J

wynosi

3

itd . Ostatni element ta­

blicy ma indeks równy jej wymiarowi minus

1 ,

czyli

9

w naszym

przypadk11

dane [ 9 J [9]

= 7 .

background image

6 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ZADANIE

Napisz program, któI'Y w zadeklarowanej tablicy dwl1wymia­
rowej

1O x 1 O

o nazwie

maci erz

tlillieszcza 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

1

o

o

o

o

o

1

o

o

o

o o

1

o

o

o

o

o

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

Przykładowe 1�ozwiqzanie - listing

4.3

#i nc l ude <i ostream . h> I I

Zadanie 4.3

#i ncl ude <coni o . h>

ma i n

( )

{

const i nt n

=

10 ;

i nt i , j , suma , maci erz [ n ] [ n ] :

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

1

o

o

o o

o

1

o

o o

o o

1

o o

o o

o

1

o

o o

o

o

1

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 :

e l se

maci erz[i ] [ j ]

=

O

:

background image

R o z d z i a ł

4 .

• T a b l i c e

I I

wyswietlenie zawartosci tablicy

for ( i

-

O : i

<

n : i ++ )

{

for ( j

-

O :

J <

n : j++ )

{

cout

<<

maci erz[i ] [ j ]

<<

l i

li •

,

}

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 :

}

cout

<<

"Suma el ementow na przekatnej wynosi

"

<<

suma

<<

getchO;

li

czeka na nacisniecie dowolnego klawisza

}

lf'

' '

<<

endl :

6 3

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 :

{

for ( j

-

O :

J

<

n :

{

i f ( i

== j )

maci erz[i ] [ j ]

-

}
}

e l se

maci erz[i ] [ j ]

-

i ++ )

j++ )

1 :

o :

I I

wpisywanie do tablicy

background image

6 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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ą

s uma

trzeba wcześniej wyze1�ować:

suma = O :

Rez11ltat działania program11 można zobaczyć na rysunk11 4 . 3 .

Wpisywanie do tablicy l iczby

1

na przekatnej , a O poza n ia.

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

Suma elementow na przekatnej wynosi

10.

Rysunek 4. 3.

Efekt działania prog1�amu Zadanie

4.3

background image

R o z d z i a ł

4 .

• T a b l i c e

6 5

ZADANIE

Napisz prog1,am, który w zadeklarowanej tablicy dw11wymia­
rowej

10 x 1 0

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 zadaniu

4.3

linijkę kodu

maci erz[i ] [j ] = 1 :

na następL1jącą:

maci erz[i ] [j ] = i :

Przykładowe rozwiązanie - listing

4.4

#i nc l ude <i ostream . h>

I I Zadanie 4.4

#i ncl ude <coni o . h>

ma i n

(

)

{

const i nt n = 10 :

i nt i , j , suma , maci erz [ n J [ n J :

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 :

background image

6 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

for ( i - O : i

<

n : i ++ )

{

for ( j - O :

J <

n : 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 :

J <

n : j++ )

{

cout

<<

maci erz[i ] [ j ]

<<

l i

li •

,

}

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 :

}

cout

<<

"Suma l i czb na p rzekatnej wynosi

" <<

suma

<<

getch

(

) : I I

czeka na nacisniecie dowolnego klawisza

}

I I

I I

<<

endl :

Rezt1ltat działania p1,ogramt1 można zobaczyć na I'ysunkt1 4.4.

Z A D A NIE

Napisz p1,ogram, który w zadeklarowanej tablicy dwuwymia­

rowej

1 0 x 10

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.

background image

R o z d z i a ł

4 .

• T a b l i c e

Wpisywanie do tablicy l iczb od O do 9 na przekatnej, a O

poza n 1a.

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.

Efekt działania prog1�an1u Zadanie

4.4

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

1

o

o

o

o

o

o

o

1

o

o

o

o o o

o

1

o

o

o

o

o o o

1

o o

o

o

o

o o

1

o

o o

o

o

o

o

1

o

o

o o

o

o

o

1

o

o

o

o o

o

o

1

o o o

o

o o

o

o

Wskazówka

1

o

o

o

o

o

o

o

o

o

6 7

Zadanie to rozwiążemy poprawnie, zamieniając w zadaniu

4.3

linijki kodu

i f ( i

==

j )

maci erz[i ] [j ]

=

1 :

el se

maci erz[i ] [j ]

=

O :

background image

6 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 linij ki

f o r ( i = O : i < n : i ++ )

{

suma = suma+maci erz[i ] [i ] :

}

. .

.

pon 1zszym1.

for ( i = O : i < n : i ++ )

{

suma = suma+maci erz[i ] [ n - i - 1] :

}

Przykładowe 1�ozwiqzanie - listing

4.5

#i nc l ude <i ostream . h> I I

Zadanie 4.5

#i ncl ude <coni o . h>

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 :

J

< n : j++ )

{

}
}

i f ( n == i + j + 1 )

maci erz[i ] [ j ] - 1 :

e l se

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 ] <<

' '

1 1 •

,

background image

R o z d z i a ł

4 .

• T a b l i c e

}

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.

0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0 0

Suma wyrozn ionych w zadan i u elementow wynosi

10.

Rysunek 4. 5.

Efekt działania prog1�a111u Zadanie

4.5

ZADANIE

6 9

Napisz p1,ogram, który w zadeklarowanej tablicy dwuwymia­

rowej

10 X 10

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.

background image

7 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 zadaniu

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 :

Przykładowe rozwiązanie - listing

4.6

#i nc l ude <i ostream . h>

I I Zadanie 4.6

#i ncl ude <coni o . h>

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

background image

}
}

maci erz[i ] [ j ] = O :

R o z d z i a ł

4 .

• T a b l i c e

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 wyrozn ionych w tablicy elementow wynosi 45.

Rysunek 4. 6.

Efekt działania prog1�a111u Zadanie

4.6

7 1

background image

7 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ZADANIE

Napisz prog1,am, który w zadeklarowanej tablicy dw11wymia­
rowej

10 x 10

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 kol 11mnie 01,az sumę liczb z kolt1mny drugiej .

o o

o

o

o

1

1

o

o

o

2

4

o

o

o

3

9

o

o

o

4 16

o

o

o

5

25

o

o

o

6 36

o

o

o

7

49

o

o

o

8

64

o

o

o

9

81

o

o

o

Przykladowe 1�ozwiqzanie - listing

4.7

#i nc l ude <i ost ream . h> I I

Zadanie 4. 7

#i ncl ude <coni o . h>

#i ncl ude <i omani p . h>

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 ) tab l 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 :

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

background image

R o z d z i a ł

4 .

• T a b l i c e

I I

wyswietlenie zawartosci tablicy

c o ut << " Za wa rtosc tabl i cy : " << en dl :
cout << endl :

for ( i - O : i < n : i ++ )

{

for ( j - O :

J

< n : j++ )

{

cout << setw ( 2 ) << tabl i ca [ i ] [j ]

<<

li

l i •

'

}

cout << endl :

}

suma = O :

for ( i = O : i < n : i ++ )

{

suma = suma+tabl i ca [ i ] [ O J :

}

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 :

7 3

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 :

background image

7 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

są odpowiedzia lne 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+tab l i ca [ i ] [ O J :

}

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 <i omani p . h>

Rez11ltat działania program11 można zobaczyć na rys11nk11 4 . 7 .

background image

R o z d z i a ł

4 .

• T a b l i c e

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 1 6

o o o o o o o o

5 25

o o o o o o o o

6 36 0 0 0 0 0 0 0 0
7 49 0 0 0 0 0 0 0 0
8 64 0 0 0 0 0 0 0 0
9 81

o o o o o o o o

Suma liczb znajdujacych sie w pierwszej kolu mnie wynosi 45.

Suma liczb znajdujacych sie w drugiej kolum nie wynosi 285.

7 5

Rysunek 4. 7.

Efekt dzialania p1�og1�an1u Zadanie

4. 7

ZADANIE

Dane są dwie tablice dwuwymiarowe

10 X 10

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

background image

7 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

Tablica

b

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

1 1 1 1 1 1

2 2 2 2 2 2

3 3 3 3 3 3

4 4

4 4

4 4

5

5 5 5

5 5

6 6

6

6 6 6

7 7 7 7 7 7

8 8

8

8 8 8

9 9

9

9 9 9

Przykładowe 1�ozwiqzanie - listing

4.8

#i nc

1

ude <i ostream . h> I I

Zadanie 4.8

#i ncl ude <coni o . h>

ma i n (

)

{

const i nt n = 10 :

i nt i , j , a [ n J [ n J . b [ n J [ n J :

I I

wpisywanie liczb do tablicy a

for ( i =

o :

i < n : i ++ )

{

for ( j = O :

J

< n : j++ )

{

a [ i ] [ j ] = j :

}
}

I I

przepisywanie liczb z tablicy a do tablicy b

for ( i = O : i < n : i ++ )

{

for ( j = O :

J

< n : j++ )

{

o o o o

1 1 1

1

2 2 2 2

3 3 3 3

4 4

4

4

5

5

5

5

6 6 6 6

7 7 7 7

8 8 8 8

9 9 9 9

background image

}
}

R o z d z i a ł

4 .

• T a b l i c e

b [ i ] [ j ]

=

a [ j ] [i ] :

li

zamiana kolumn na wiersze

I I

wyswietlenie zawartosci tablicy a

cout

<<

11 Zawartosc tabl i cy a : 11

<<

endl :

cout

<<

endl :

for ( i

-

O :

i <

n : i ++ )

{

for ( j

-

O :

J <

n : j++ )

{

}

}

cout

<<

a [ i ] [ j ]

<<

11

1 1

:

cout

<<

endl :

cout

<<

endl : I I

wyswietlenie pustej linii

li

wyswi etl a ni e zawa rtosci tabl i cy b

cout

<<

11 Zawartosc tabl i cy b : 11

<<

endl :

cout

<<

endl :

for ( i

-

O :

i <

n : i ++ )

{

for ( j

-

O :

J <

n : j++ )

{

}

}

cout

<<

b [ i ] [ j ]

<<

11

1 1

:

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 .

7 7

background image

7 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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
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

Rysunek 4.8.

Efekt działania prog1�an1u Zadanie

4.8

background image

ra m

W

tyi11 rozdziale przedstawi1ny typowe zadania wraz z przykladowy­

n1i rozwiązaniami z użycien1 podprogran1ów. U111iejętność lil01korzy­
stywania ich w pisanych progran1ach ZM01kle 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 :

c i ą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 j est

ona niedostępna dla insh'tlkcji znajd11jących się we wszystkich innych

background image

8 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 j ednej z nich

wewnątrz innej .

ZADANIE

Napisz program obliczający pole prostokąta . Powinien o n

zawierać jeden podprogram: bezparametrową funkcję

pol e_

'+pros tok a ta

( )

, w której zawarty będzie algorytm obliczania pola.

Wartości boków

a

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.

Przykładowe 1�ozwiqzanie - listing

5.1

#i nc l ude <i ost ream . h> I I

Zadanie 5. 1

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

fl oat a . b , pol e :

voi d po l e_prostokata ( ) I I

deklaracja i definicja funkcji pole _yrostokataO

{

cout << " P rogram obl i cza pol e prostokata . " << endl :
cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> b :

pol e = a*b :

cout << fi xed << setpreci si o n ( 2 ) :

cout << " Pol e prostokata o boku a = " << a <<

"

i

boku b = " << b :

cout << " wynosi " << pol e << " . " << endl :

}

ma i n ( )

background image

Ro z d z i a ł

5 .

P o d p r o g r a m y

{

po l e_prostokata ( ) : I I

wywalanie funkcji pole _yrostokataO

getch ( ) : I I czeka

na nacisniecie dowolnego klawisza

}

Zdefiniowane t11 zmienne

fl oat a . b . pol e :

8 1

są zmiennymi globalnymi, czyli są one widoczne w całym programie

i podprogramie.

Funkcja

po l e_prostokata

( )

zawiera algo1,ytm obliczający pole prostokąta:

voi d po l e_prostokata ( ) I I

deklaracja i definicja funkcji pole _yrostokataO

{

cout << " P rogram obl i cza pol e prostokata . " << eridl :
cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> b :

pol e = a*b :

cout << fi xed << setpreci si o n ( 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 ( )

{

po l 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.

Efekt działania prog1�a111u Zadanie

5.1

background image

8 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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

a

i

b

wprowadzamy z klawiat11ry. W progra­

mie należy założyć, że zmienne

a, b

oraz

po 1 e

są typu

fl oat

(rzeczywistego) i są zmiennymi lokalnymi. Należy dla nich

przyjąć format wyświetlania ich z dwoma miejscami po kropce.

Przykładowe rozwiązanie - listing

5.2

#i nc l ude <i ostream . h> I I

Zadanie 5.2

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

voi d po l e_prostokata (

)

I I

deklaracja i definicja funkcji pole _yrostokataO

{

fl oat a . b , pol e :

cout << " P rogram obl i cza pol e prostokata . " << endl :

cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> b :

pol e = a*b :

cout << fi xed << setpreci si o n ( 2 ) :

cout << " Pol e prostokata o boku a = " << a <<

" i

boku b = " << b :

cout << " wynosi " << pol e << " . " << endl :

}

ma i n ( )

{

po l e_prostokata ( ) : I

/wywalanie funkcji pole _yrostokataO

g etch (

)

: 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 .

background image

Ro z d z i a ł

5 .

P o d p r o g r a m y

8 3

ZADANIE

Napisz pI'OgI'am obliczający pole prostokąta. Powinien on za­
wierać jeden pod program: f11nkcję

po 1 e_p rostokata

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.

Przykładowe rozwiązanie - listing

5.3

#i nc l ude <i ostream . h> I I

Zadanie 5.3

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

fl oat a . b , pol e :

voi d po l e_prostokata ( fl oat x , fl oat y ) I I

deklaracja i definicja funkcji

{

}

pol e

=

x*y :

cout << fi xed << setpreci s i on ( 2 ) :

cout << " Pol e prostokata o boku a

=

" << x <<

"

i

boku b

=

" << y ;

cout << " wynosi " << pol e << " . " << endl :

ma i n ( )

{

cout << " P rogram obl i cza pol e prostokata . " << eridl :
cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> b :

po l e_prostokata ( a , b ) : I I

wywalanie funkcji

g etch (

)

: I I

czeka na nacisniecie dowolnego klawisza

}

F11nkcja

voi d pol e_prostok a ta C 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 po l e_prostokata ( fl oat x , fl oat y ) I I

deklaracja i definicja funkcji

{

pol e

=

x*y :

cout << fi xed << setpreci s i on ( 2 ) :

background image

8 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

}

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:

{

}

po l e_prostokata ( a , b )

:

I I

wywalanie funkcji

Rez11ltat działania program11 można zobaczyć na rysunk11

5 . 1 .

Łatwo 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 o stream . h>
#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

voi d czytaj_dane( ) I I

deklaracja i definicja funkcji czytaj_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 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

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.

background image

Ro z d z i a ł

5 .

P o d p r o g r a m y

8 5

Fl1nkcja

czytaj_da ne ( )

zajmuje się tylko czytaniem danych. Za ich

przetworzenie odpowiedzialna jest ft1nkcja

przetworz_dane ( ) .

Ostatnia

z f11nkcji,

wyswi etl _wyni k C ) ,

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_

4dane ( )

oraz

wyswi et 1 _wyni k ( )

. Wartości boków

a

i

b

wprowa­

dzamy z klawiatury. W programie należy założyć, że zmien­

ne

a , b

oraz

po 1 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 et 1 _wyni k

( ) prezentl1je wyniki na ekranie

komp11tera.

Przykładowe 1�ozwiqzanie - listing

5.4

#i nc l ude <i ostream . h> I I

Zadanie 5.4

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

fl oat a . b , pol e :

voi d czytaj_dane ( ) I I

deklaracja i definicja funkcji czytaj_daneO

{

cout << " P rogram obl i cza pol e prostokata . " << eridl :
cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> 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

{

background image

8 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

cout << fi xed << setpreci si o n ( 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

wywalanie funkcji 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 czytaj_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

przetwor z_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 k C ) :

voi d wyswi et l _wyni k ( ) I I

deklaracja i definicja funkcji wyswietl_wynikO

{

cout << fi xed << setpreci si o n ( 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:

background image

Ro z d z i a ł

5 .

P o d p r o g r a m y

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

. . .

.

. .

.

. .

.

}

8 7

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

c

to liczby rzeczywiste

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( )

zajmuje się wykonaniem niezbędnych obliczeń, natomiast fu nkcja

wyswi etl _wyni k

( ) jest natomiast odpowiedzialna za pokazanie rezultatów

na ekran ie monitora.

Przykładowe 1�ozwiqzanie - listing

5.5

#i nc l ude <i ostream . h> I I

Zadanie 5.5

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

fl oat a . b , c . del ta . xl . x2 :

char l i czba_pi erwi astkow :

voi d czytaj_dane ( )

{

cout << " P rogram obl i cza pi erwi a stki rownani a kwadratowego„ << endl :
cout << " dl a dowol nych wspol czynni kow a , b , c . " << endl :

cout << " Podaj a . " << endl :

c1 n >> a :

background image

8 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

i f ( a

==

O )

{

cout << " N i e dozwol ona wartosc wspol czynni ka . Naci sni j dowol ny k l awi sz . "

�<< endl :

getch

(

) : I I

czeka na nacisniecże dowolnego klawisza

exi t ( l ) :

11

wy;scze zprogramu

}

e l se

{

cout << " Podaj b . " << endl :
c i n >> 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 a stkow

=

1 :

i f (delta > 0 ) l i czba_pi e rwi a stkow

=

2 :

swi tch ( l i czba_pi erwi a stkow)

{

case 1 : xl

=

- b l ( 2*a ) :

brea k :

case 2

{ xl

=

( - b - sq rt (delta ) ) l ( 2*a ) :

x2

=

( - b+sqrt ( de l ta ) ) / ( 2*a ) :

}

}
}

brea k :

voi d wyswi etl_wyni k ( )

{

cout <<

"Dl a wprowadzonych

cout <<

" a

=

li

<< a <<

l i

li

cout <<

"b

=

li

<< b <<

l i

li

cout <<

" c

=

li

<< c <<

l i

li

swi tch ( l i czba_pi erwi a stkow)

{

l i czb : "

<< endl :

<< endl :

<< endl :

<< endl :

case O : cout << "brak pi erwi a stkow rzeczywi stych . " << endl :

brea k :

case 1 :

cout << "trojmi a n ma

" . " << endl :

�<<

brea k :

j eden pi erwi astek podwojny xl

=

" << xl

background image

Ro z d z i a ł

5 .

P o d p r o g r a m y

case 2

:

{ cout << 11trojmi an ma dwa pi erwi astki

:

11 << endl :

cout <<

1 1

xl

=

1 1

<< x l << 11 11 << endl :

}
}

ma i n

(

)

{

}

cout <<

1 1

x2

=

1 1

<< x2 <<

1 1 •

11 << endl :

brea k :

cout << fi xed << setpreci si o n ( 2 ) :
czytaj_dane( ) :

przetworz_dane ( ) :

wyswi etl_wyni k ( ) :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

}

8 9

Rez11ltat działania programu dla

a

-

1, b

-

2

i

c

-

3

można zobaczyć

na rysunk11

5 . 2 .

Program oblicza pierwiastki rownania kwad ratowego

d la dowol nych wspolczyn n i kow 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.

Efekt dzialania prog1�an1u Zadanie

5.5

background image

9 0

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

ZADANIE

Napisz program, któ1�y w tablicy

1 0 x 1 0

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 ( ) ,

przetwo r z_dane C )

i

wyswi et l _wy n i 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 k C )

prezentuje zawartość tablicy na ekranie monitora.

Przykładowe 1�ozwiqzanie - listing

5.6

#i nc l ude <i ost ream . h>

I I Zadanie 5. 6

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

const i nt rozmi a r =

10:

i nt tabl i ca [ rozmi a r ] [ rozmi a r ] :

czytaj_dane( )

{

i nt i , j :

randomi ze ( ) :

for ( i = O : i < rozmi a r : i ++ )

{

for ( j = O :

J

< rozmi a r : j++ )

{

i f ( i == j )

tabl i ca [ i ] [ j ] = random ( lO ) :

e l se

tabl i ca [ i ] [ j ] = O :

}
}
}

przetworz_dane ( )

{

i nt i , suma=O :

for ( i = O : i < rozmi a r : i ++ )

{

suma = suma+tabl i ca [ i ] [i ] :

}

cout << "Suma el ementow na przekatnej wynosi " << suma <<

}

I I'

I I

<< endl :

background image

wyswi et l _wyni k

( )

{

i nt i , j :

Ro z d z i a ł

5 .

P o d p r o g r a m y

c out

<<

11 Zawartosc tabl i cy :

11 <<

endl :

cout << endl :

for ( i

=

O : i < rozmi a r : i ++ )

{

for ( j

=

O : j < rozmi a r : 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.

Efekt działania prog1�an1u Zadanie

5.6

9 1

background image

9 2

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 _

4Wyni

k (

)

. Ft1nkcja

czytaj_d a ne ( )

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­

kowego ) . Ft1nkcja

wyswi etl_wyni

k C )

prezentt1je natomiast za­

wartość poso1,towanej tablicy

l i czby

na ekranie monitora.

Przykladowe 1�ozwiqzanie - listing

5.7

#i nc l ude <i ost ream . h> I I

Zadanie 5. 7

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

const i nt n =

6 : li

i l osc l i czb

i nt l i czby[n] :

i nt

X ,

i , j ;

czytaj_dane( )

{

cout << 11 Podaj 11 << n <<

11

l i czb cal kowi tych . 11 << endl :

for ( i = O : i <= n - 1 : i + + )

{

c i n >> 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 :

}
}
}
}

background image

wyswi et l _wyni k ( )

{

Ro z d z i a ł

5 .

P o d p r o g r a m y

cout << " Li czby uporzadkowane : " << endl :

for ( i = O : i <= n - 1 : i + + )

{

cout << l i czby [ i ] << " " :

}

cout << endl :

}

ma i n (

)

{

cout << " P rogram 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 cal kowitych.

5

1 2

67
456

3

-1 0

Liczby u porzad kowane:

-1 0 3 5 1 2 67 456

Rysunek 5.4.

Efekt działania prog1�amu Zadanie

5. 7

9 3

background image

9 4

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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 _

wyn i k

( ) . Ft1nkcja

czytaj_dane ( )

lost1je

n

całkowitych liczb od

O

do

9 9 .

pr zetworz_d a ne ( )

po1,ównt1je je ze sobą i t1 stala, która

z nich jest najmniejsza oraz największa. Funkcja

wyswi et l _wyni k ( )

prezentuje natomiast największą i najmniejszą liczbę z wylo­

sowanego zbioI'tl.

Przykladowe 1�ozwiqzanie - listing

5.8

#i nc l ude <i ostream . h>

I I Zadanie 5.8

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

const i nt n = 10 :

I I ilosc liczb

i nt l i czba , mi ni , maxi :

czytaj_dane( )

{

cout << " P rogram l osuje " << n << " l i czb cal kowi tych z przedzi a l u 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 : " :

cout << maxi

<<

li

li •

,

}

przetworz_dane ( )

{

i nt i :

for ( i = 1 : i <= n - 1 : i + + )

{

l i czba = random ( lO O ) :
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 ( )

{

background image

Ro z d z i a ł

5 .

P o d p r o g r a m y

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

}

9 5

Rez11ltat działania p1,ogram11 dla wylosowanych liczb można zobaczyć

na rys 11nkt1

5 . 5 .

Program losuje 1 0 liczb calkowitych z przedzialu od O do 99,

a nastepnie znajduje najwieksza i naj m n iejsza liczbe.

Wylosowane liczby: 40 21 62 7 74 1 3 2 75 1 2 23

Najwieksza liczba to 7 5.
Naj m n iejsza 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 nc l ude <i ostream . h> I I

Zadanie 5.9

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

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 :

background image

9 6

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

return obl i cz :

}

ma

i n ( )

{

c o ut << 11 x 11 << 11

\

t 11 <<

"

y

1 1

<< endl :

cout << 11==============11 << endl :

for ( i = O : i <= n : i ++ )

{

y

= ob l i cz ( x ) :

cout << fi xed :

cout << setpreci si on ( 2 ) :

cout << x << 11 \ t 11 <<

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 1 0.00
3.50 1 3.25
4.00 1 7.00
4.50 21 .25

5.00 26.00

Rysunek 5. 6.

Efekt działania prog1�a111u Zadanie

5.9

background image

I

W

tym rozdziale przedstawi1ny typowe zadania wraz z przykladowy1ni

rozwiqzanian1i z wykorzystaniem 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_kl a sy

{

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.zne, metody, konstrt1ktory i destrt1ktory.

background image

9 8

C + + . Z a d a n i a z p r o g r a m ow a n i a z p rz y k ł a d o w y m i rozw i q z a n i a m i

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.

Destruktor

to natomiast specjalna metoda wywoływana tuż przed

zwolnieniem obiekt11. Jest on przeciwieństwem konstruktora i j est

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 v ate

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 <i ostream . h>

c l a s s nazwa_kl a sy

{

} :

publ i c :

dekl a racj a zmi ennych :

czyta j_da ne ( ) : I I

prototyp metody czytaj_daneO

przetworz_dane( ) : I I

prototyp metody przetworz_daneO

wyswi et l _wyni k ( ) : I I

prototyp metody wyswietl_wynikO

nazwa kl a sy : : czytaj_dane ( ) I I

definicja metody czytaj_daneO

{

.

.

.

.

.

.

.

.

.

.

.

.

.

.

}

background image

R o z d z i a ł

6 .

P ro g r a m o w a n i e o b i e ktowe

nazwa_kl a sy : : przetworz_dane ( ) I I

definicja metody przetworz_daneO

{

}

nazwa_k l a sy : : wyswi et l _wyni k ( ) I I

definicja metody wyswietl_wynikO

{

. .

.

.

.

.

.

.

.

.

.

.

.

.

}

ma i n

(

)

{

}

nazwa kl a sy zmi enna : I I

utworzenie obiektu zmienna

zmi enna . c zytaj_da ne

(

) : I I

wywalanie metody czytaj_daneO

zmi enna . p rzetworz_dane

(

)

:

I I

wywalanie metody przetworz_daneO

zmi enna . wyswi et l _wyni k

(

)

:

I I

wywalanie metody wyswietl_wynikO

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9 9

:: 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_dane C ) .

Ostatnia

z metod,

wyswi et l _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 k C )

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.yświetlania ich na
ekranie z dwoma miejscami po kropce.

background image

1 0 0

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

Przykładowe 1�ozwiqzanie - listing

6. 1

#i nc l ude <i ost ream . h> I I

Zadanie 6. 1

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

c l a s s po l e_p rostokata I I

definicja klasy pole _yrostokata

{

publ i c :

fl oat a . b . pol e :

czytaj_dane( ) : I I

prototyp funkcji czytaj_dane

przetworz_dane ( ) : I I

prototyp funkcji przetworz_dane

wyswi et l _wyni k ( ) : I I

prototyp funkcji wyswietl_wynik

} :

po l e_prostokata : : czytaj_dane( ) I I

definicja metody czytaj_daneO

{

cout << " P rogram obl i cza pol e prostokata . " << eridl :
cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> b :

}

po l e_prostokata : : przetworz_dane( ) I I

definicja metody przetworz_daneO

{

pol e

=

a*b :

}

po l 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 o n ( 2 ) :

cout << a << " i boku b

=

" << b :

cout << " wynosi " << pol e << " " << endl :

}

ma i n

( )

{

po l e_prostokata pol e : I I

utworzenie obiektu pole

pol e . czytaj_dane( ) : I I

wywalanie metody czytaj_daneO

pol e . przetworz_dane( ) :

1 1

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

}

background image

R o z d z i a ł

6 .

P ro g r a m o w a n i e o b i e ktowe

Definicja klasy

pol e_prosto,kata

jest następująca :

c l a s s po l e_p rostokata I I

definicja klasy pole _yrostokata

{

publ i c :

fl oat a . b , pol e :

czytaj_dane( ) : I I

prototyp funkcji czytaj_dane

przetworz_dane ( ) : I I

prototyp funkcji przetworz_dane

wyswi et l _wyni k ( ) : I I

prototyp funkcji wyswietl_wynik

} :

1 o 1

Klasa jest p11bliczna i zawiera, oprócz trzech rzeczywistych zmiennych,

trzy metody:

czytaj_dane C ) , przetworz_dane C )

01,az

wyswi etl _wyni k C ) .

W

naszym programie metoda

czytaj_dane C ) :

po l e_prostokata : : czytaj_dane

(

) I I

definicja metody czytaj_daneO

{

cout << " P rogram obl i cza pol e prostokata . " << eridl :
cout << " Podaj bok a . " << endl :

c1 n >> a :

cout << " Podaj bok b . " << endl :
c i n >> b :

}

wczyt11je z klawiatury wartości boków

a

i

b.

Metoda

przetworz_daneC ) :

po l 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 _wyn i k C ) :

po l 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.

background image

1 0 2

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

Linijka kodu

po l 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 1 2.00.

Rysunek 6. 1.

Efekt działania prog1�amu Zadanie

6. 1

ZADANIE

Napisz zgodnie z zasadami programowania obiektowego

p1,ogram, który oblicza pierwiastki równania kwadratowego

a x2+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 et l _wyni k ( )

jest odpowiedzialna za pokazanie

wyników na ek1,anie monitora. Dla zmiennych

a, b, c, x l

01,az

x 2

należy p1,zyjąć fo1,mat wyświetlania ich z dwoma

miejscami po kropce.

background image

R o z d z i a ł

6 .

P ro g r a m o w a n i e o b i e ktowe

Przykładowe 1�ozwiqzanie - listing

6.2

#i nc l ude <i ostream . h> I I

Zadanie 6.2

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

c l a s s trojmi a n I I

definicja klasy trojmnian

{

publ i c :

fl oat a . b , c . del ta . xl . x2 :

char l i czba_pi erwi astkow :

czytaj_dane( ) : I I

prototyp funkcji czytaj_daneO

przetworz_dane ( ) : I I

prototyp funkcji przetworz_daneO

wyswi et l _wyni k ( ) : I I

prototyp funkcji wyswietl_wynikO

} :

t rojmi a n : : czytaj dane ( )

{

cout << " P rogram obl i cza pi erwi a stki rownani a kwadratowego „ << endl :
cout << " dl a dowol nych wspol czynni kow a . b , c . " << endl :
c o ut << " Podaj a . " << endl :

c1 n >> a :

i f ( a

==

O )

{

1 0 3

cout << " N i e dozwol ona wartosc wspol czynni ka . Naci sni j dowol ny k l awi sz . "

�<< endl :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

exi t

(

1 ) : I I

wyjscie z programu

}

e l se

{

cout << " Podaj b . " << endl :
c i n >> b :

cout << " Podaj c . " << endl :

Cl n >> C ;

}
}

t rojmi a n : : przetworz_dane ( )

{

del ta

=

b*b - 4*a*c :

i f (delta < 0 ) l i czba_pi e rwi a stkow

=

O :

i f (delta

==

0 ) l i czba_pi erwi a stkow

=

1 :

i f (delta > 0 ) l i czba_pi erwi a stkow

=

2 :

swi tch ( l i czba_pi erwi a stkow)

{

case 1

:

xl

=

- b / ( 2*a ) :

background image

1 0 4

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

b reak :

case 2

:

{ xl

=

( - b - sq rt (delta ) ) / ( 2*a ) :

x2

=

( - b+sqrt ( de l ta ) ) / ( 2*a ) :

}

b reak :

}
}

t rojmi a n : : wyswi etl

_wyni k ( )

{

cout <<

"Dl a wprowadzonych

cout <<

a

=

li

<< a <<

l i

li

cout <<

"b

=

li

<< b <<

l i

li

cout <<

" c

=

li

<< c <<

l i

li

swi tch ( l i czba_pi erwi a stkow)

{

l i czb : "

<<

endl :

<<

endl :

<<

endl :

<<

endl :

case O

cout << "brak pi erwi a stkow rzeczywi stych . " << endl :

b reak :

case 1

:

cout << "trojmi an ma jeden pi erwi astek podwoj ny x l

=

" << xl

�<< " " << endl :

b reak :

case 2

:

{ cout << "trojmi an ma dwa pi erwi astki : " << endl :

b reak :

}
}

ma i n (

)

{

}

cout <<

11

xl

= 11

<< xl <<

1 1

11

<< endl :

cout << " x2

=

" << x2 << " " << endl :

t rojmi an trojmi anl : I I

utworzenie obiektu trojmianl

cout << fi xed << setpreci si o n ( 2 ) :

t rojmi anl . c zytaj_dane ( ) :
t rojmi anl . przetworz_dane ( ) :
t rojmi 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 .

background image

R o z d z i a ł

6 .

P ro g r a m o w a n i e o b i e ktowe

Program oblicza pierwiastki rownania kwad ratowego

d la dowol nych wspolczyn n i kow 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,
troj m ian m a dwa pierwiastki :
x1

=

-3.90,

x2 = -1 .01 .

Rysunek 6.2.

Efekt działania prog1�a111u Zadanie

6.2

ZADANIE

1 0 5

Napisz zgodnie z zasadami programowania obiektowego pro­

gram, który w tablicy

1O x 1 O

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:

O

czytaj_dane ( )

umieszcza dane w tablicy;

O

przetworz_dane ( )

oblicza i wyświetla st1mę liczb

znajdt1jących się na przekątnej;

O

wyswi et l _wyni k ( )

pokazuje zawartość tablicy na ek1,anie

monitora.

Przykładowe 1�ozwiqzanie - listing

6.3

#i nc l ude <i ostream . h>

I I Zadanie 6.3

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

const i nt rozmi a r = 10 :

i nt maci erz[ rozmi a r ] [ rozmi a r ] :

c l a s s matri x

I I definicja klasy matrix

background image

1 0 6

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

{

publ i c :

czytaj_dane ( i nt maci erz[ rozmi a r ] [ rozmi a r ] . i nt rozmi a r ) :

I I

prototyp funkcji czytaj_daneO

przetworz_dane ( i nt maci erz[ rozmi a r J [ rozmi a r J . i nt rozmi a r ) :

I I

prototyp funkcji przetworz_daneO

wyswi etl_wyni k ( i nt maci erz[ rozmi a r ] [ rozmi a r ] . i nt rozmi a r ) :

I I

prototyp funkcji wyswietl_wynikO

} :

matri x : : czytaj_dane ( i nt tab l i ca [ rozmi a r ] [ rozmi a r ] . i nt rozmi a r )

{

i nt i . j :

randomi ze ( ) :

for ( i - O : i < rozmi a r : i ++ )

{

for ( j - O : J < rozmi a r : 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 tab l i ca [ rozmi a r ] [ rozmi a r ] . i nt rozmi a r )

{

i nt i , suma = O ;

for ( i = O : i < rozmi a r : 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 tab l i ca [ rozmi a r ] [ rozmi a r ] . i nt rozmi a r )

{

i nt i . j

:

cout << endl :
cout << " Zawartosc tabl i cy : " << endl :
cout << endl :

for ( i - O : i < rozmi a r : i ++ )

{

for ( j - O : J < rozmi a r : j++ )

{

cout << tabl i ca [ i ] [ j ] << " " :

}

cout << endl :

}
}

background image

R o z d z i a ł

6 .

P ro g r a m o w a n i e o b i e ktowe

ma i n

( )

{

i nt tabl i ca [ rozmi a r ] [ rozmi a r ] :

matri x matri xl : I I

utworzenie obiektu matrix]

matri xl . czytaj_dane ( tabl i ca , rozmi a r ) :
matri xl . p rzetworz_dane(tabl i ca , rozmi a r ) :
matri xl . wyswi etl_wyni k ( tabl i ca , rozmi a r ) :

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.

Efekt działania prog1�an1u Zadanie

6.3

ZADANIE

1 0 7

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.

background image

1 0 8

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

Przykładowe 1�ozwiqzanie - listing

6.4

#i nc l ude <i ostream . h> I I

Zadanie 6.4

#i ncl ude <i omani p . h>

#i ncl ude <coni o . h>

const i nt n = 6 :
i nt l i czby[n] :

c l ass sortowani e I I

definicja klasy sortowanie

{

publ i c :

czytaj_dane( ) : I I

prototyp funkcji czytaj_daneO

przetworz_dane ( ) : I I

prototyp funkcji przetworz_daneO

wyswi et l _wyni k ( ) : I I

prototyp funkcji wyswietl_wynikO

} :

s ortowani e : : czytaj dane ( )

{

i nt i :

l i czby [ O J = 5 7 4 :
l i czby [ l ] = 303 :
l i czby [ 2 J

=

- 134 :

l i czby [ 3 J = 125 :
l i czby [ 4 J = 80 :
l i czby [ S J = 236 :

cout << " Li czby ni eposortowane : " << endl :

for ( i = O : i < n : i ++ )

{

cout << l i czby [ i ] << "

"

:

}

cout << endl :

}

s ortowani 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 :

}

background image

}

I I J

}

I I i

}

R o z d z i a ł

6 .

P ro g r a m o w a n i e o b i e ktowe

s ortowani 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 ( )

{

s ortowani e babe l 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 n ieposortowane:

574 303 -134 1 25 80 236

Liczby posortowane:

-1 34 80 1 25 236 303 574

Rysunek

6.4.

Efekt działania prog1�an1u Zadanie

6.4

1 0 9

background image

1 1 O

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

background image

W

tym rozdziale przedstawi1ny typowe zadania wraz z przykladowy1ni

rozwiqzanian1i z wykorzystaniem 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

of stream

(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

of stream

reprezentujący

background image

1 1 2

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

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 s z_dane_do_pl i k u ( )

zapisl1je imię i nazwisko do

plikt1 tekstowego

dane.txt;

O

czytaj_dane_z_pl i k u ( )

odczytuje dane z pliku

dane.txt

i wyświetla je na ek1,anie kompt1tera.

Przykładowe 1�ozwiqzanie - listing

7. 1

#i nc l ude <i ost ream . h> I I

Zadanie 7. 1

#i ncl ude <fstream . h>

#i ncl ude <coni o . h>

c l a s s pl i k I I

definicja klasy plik

{

publ i c :

char dane[20 ] , danel[20 J :

czytaj_dane ( ) : I I

prototyp funkcji czytaj_daneO

za pi

s

z

_

da ne_do_p l i ku

(

) : I I

prototyp funkcji zapisz_dane_do _ylikuO

czytaj_dane_z_p l i ku ( ) : I I

prototyp funkcji czytaj_dane_z_ylikuO;

} :

pl i k : : czytaj_dane ( ) I I

definicja funkcji czytaj_daneO

{

}

cout << "Podaj imi e i nazwi s ko . " << 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 :

o f stream 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( ) :

background image

Rozd z i a ł 7 .

P l i k i te k s t o w e

pl i k : : czytaj_dane_z_p l i ku ( ) I I

definicja funkcji czytaj_dane_z_ylikuO;

{

}

cout << "Odczytuj emy danel z pl i ku . " << endl :

i f stream pl i k_odczyt ( " da ne . 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 k l : 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

1 1 3

Zwróćmy 11wagę na to, że w programie zadeklarowano dwie zmienne
łańc11chowe:

char dane [20 ] , danel[20 J :

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 s ko . " << 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

s i zeof( )

gwarantuje poprawność rozmiaI'tl .

background image

1 1 4

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

Metoda

zapi sz_dane_do_pl i k u ( ) :

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 :

o f stream 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( ) :

zapisuje dane do plikl1

dane.txt.

Ostatnia z metod,

czytaj_dane_z_pl i k u ( ) :

pl i k : : czytaj_dane_z_p l i ku

(

) I I

definicja funkcji czytaj_dane_z _ylikuO;

{

}

cout << "Odczytuj emy danel z pl i ku . " << endl :

i fstream pl i k_odczyt ( " da ne . 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

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.

Efekt działania prog1�an1u Zadanie

7. 1

ZADANIE

Napisz zgodnie z zasadami prog1,amowania obiektowego pl'O­

gram, który tablicę

1 0 X 10

o postaci

background image

Rozd z i a ł 7 .

P l i k i te k s t o w e

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ę

1 0 x 10;

O

zapi s z_dane_do_pl i k u ( )

zapis11je tablicę

t o x 10

do plik11

tekstowego

dane. txt;

O

czytaj_dane_z_pl i k u ( )

odczytt1je tablicę

1 o x 1 0

z plik11

dane. txt

i wyświetla ją na ekranie komp11tera.

Przykładowe rozwiązanie - listing

7.2

#i nc l ude <i ostream . h> I I

Zadanie 7. 2

#i ncl ude <fstream . h>

#i ncl ude <coni o . h>

const i nt rozmi a r = 10 :

c l a s s matri x I I

definicja klasy matrix

{

publ i c :

czytaj_dane ( i nt tabl i ca [ rozmi a r ] [ rozmi a r ] . i nt rozmi a r ) :
zapi sz_dane_do_pl i ku ( i nt tabl i ca [ rozmi a r ] [ rozmi a r ] , i nt rozmi a r ) :
czytaj_dane_z_pl i ku ( i nt tabl i ca l [ rozmi a r ] [ rozmi a r ] , i nt rozmi a r ) :

} :

matri x : : czytaj_dane ( i nt tab l i ca [ rozmi a r ] [ rozmi a r ] . i nt rozmi a r )

{

i nt i ,

J :

for ( i = O : i < rozmi a r : i ++ ) / /

tworzymy tablice JOxlO

{

for ( j = O : j < rozmi a r : j++ )

background image

1 1 6

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

}

{

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 s z_dane_do_p l i ku ( i nt tab l i ca [ rozmi a r J [ rozmi a r J . i nt rozmi a r )

{

}

i nt i , j :

cout << " Zapi sujemy tabl i ce lOxlO do pl i ku . " << endl :

o f stream pl i k_zapi s ( "dane . txt " ) : I I

tworzymy i otwieramy plik do zapisu

for ( i = O : i < rozmi a r : i ++ ) I I

zapisujemy tablice 1 Oxl O

{

for ( j = O : j < rozmi a r : 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 ( i nt tabl i cal[ rozmi ar] [ rozmi ar] . i nt rozmi a r )

{

}

i nt i , j :

cout << endl :
cout << "Odczytuj emy tabl i ce lOxlO z pl i ku . " << endl :

i fstream pl i k_odczyt ( " da ne .txt " ) :

li

otwieramy istniejacyplik

for ( i = O : i < rozmi a r : i ++ )

{

for ( j

=

O : j

<

rozmi a r : 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 os e ( ) : I I

zamykamy plik

ma i n

( )

{

i nt tab[ rozmi a r ] [ rozmi a r ] :

background image

Rozd z i a ł 7 .

P l i k i te k s t o w e

matri x matri xl : I I

powstaje obiekt matrix]

matri xl . czytaj_dane ( tab , rozmi a r ) :
matri xl . zapi sz_dane_do_p l i k u ( tab , rozmi a r ) :
matri xl . czytaj_dane_z_p l i k u ( tab , rozmi a r ) :

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 ca l [ rozmi ar] [ rozmiar]

1 1 7

Tablica o nazwie

tab 1 i ca [ J [ J

przechow11je dane p1,zed zapisaniem ich

do pliku, natomiast

tabl i ca l [ ] [ ]

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.

Efekt działania prog1�a111u Zadanie

7.2

background image

1 1 8

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

ZADANIE

Napisz zgodnie z zasadami programowania obiektowego pro­

gram, który tablicę

a

o wymiarach

1 O x 1 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:

background image

Ro z d z i a ł 7 .

P l i k i te k s t o w e

1 1 9

O

czytaj_dane ( )

tworzy tablicę

a

o wymiarach

1 0 X 1 0 ;

O

przetworz_dane ( )

przepis11je elementy tablicy

a

o wymia1,ach

1 0 x 1 0

do tablicy

b

o tej samej wielkości;

O

zapi s z_dane_do_pl i k u ( )

zapis11je tablicę b o wymia1,ach

1 o x 1 0

do plik11;

O

czytaj_dane_z_pl i k u ( )

odczytuje tablicę c o wymia1,ach

1 0 X 1 0

z pliku i wyświetla ją na ekranie.

Przykładowe 1�ozwiqzanie - listing

7.3

#i nc l ude <i ostream . h>

I I Zadanie 7.3

#i ncl ude <fstream . h>

#i ncl ude <coni o . h>

const i nt n = 10 :

c l a s s 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 prototyp funkcji czytaj_daneO

przetworz_dane

( ) : I I prototyp funkcji przetworz_daneO

za pi sz_da ne_do_p l i ku

( ) : I I prototyp funkcji zapisz_dane_do _ylikuO

czytaj_dane_z_p l i ku

( ) : I I prototyp funkcji czytaj_dane_z_ylikuO;

} :

matri x : : czytaj dane ( )

{

i nt i , j :

cout << "Tworzymy tabl i ce a . " << endl :

f o 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 :

background image

1 2 0

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

}

I I i

I I koniec wpisywania

}

matri x : : p rzetworz_dane( )

{

}

i nt i , j :

cout << endl :

cout << " Przepi sujemy e l ementy z tabl i cy a do tabl i cy b . " << endl :

f o 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_p l i ku ( )

{

i nt i , j :

cout << "Zapi sujemy tab l i ce b do pl i ku dane . txt . " << endl :

o f stream pl i k_zapi s ( "dane . txt " ) :

I I tworzymy i otwieramy plik do zapisu

f o 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

i

, j :

cout << endl :

cout << "Odczytuj emy tabl i ce c z pl i ku dane . txt i wyswi etl amy ja na

"+ek rani e . " << endl :

background image

Ro z d z i a ł 7 .

P l i k i te k s t o w e

i fstream pl i k_odczyt ( " da ne . txt " ) : I I

otwieramy istniejacy plik

f o r ( i

=

O

:

i < n : i ++ )

{

for ( j

=

O : j < n : j++ )

{

pl i k_odczyt >> c[i ] [ j ] : I I

odczytujemy tablice z pliku

cout << c [ i ] [j ] << "

"

:

} I I

j

cout << endl :

}

I I

i

I I

koniec odczytywania 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 . p rzetworz_dane ( ) :
matri xl . zapi sz_dane_do_pl i ku ( ) :
matri xl . czytaj_dane_z_p l i ku ( ) :

getch ( ) : I I

czeka na nacisniecie dowolnego klawisza

}

1 2 1

Rezt1ltat działania programt1 można zobaczyć na ryst1nkt1

7 .3

(1,ysu­

nek p1,zedstawiony na następnej st1,onie).

background image

1 2 2

C + + . Z a d a n i a z p r o g r a m o w a n i a z p rz y k ł a d o w y m i rozw i ą z a n i a m i

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.

Efekt działania prog1�amu Zadanie

7.3


Wyszukiwarka

Podobne podstrony:
zadanienia-programowanie, smf, , programowanie
ZADANIA Z PROGRAMOWANIA
Java Zadania z programowania z przykładowymi rozwiązaniami
6 2 Zadania programowania liniowego
AM, Liniowe zadanie decyzyjne, Model matematyczny zadania programowania liniowego
Browary, Zadania programowania kwadratowego
C++ Zadania z programowania z przykładowymi rozwiązaniami [PL]
Zadanie PROGRAMOWANIE, Informatyka
tp-zadania cz3, Szkoła, Programowanie, C++, Zadania z programowania cz.3
C Zadania z Programowania
Stroop.eksp.zadanie, Programowanie procedur badawczych
Algorytmy-zadania, Programowanie, wykłady C++
27.2 wskazniki - zadania, Programowanie, Klasa III
Optymalizacja Cw 3 Zadanie programowania nieliniowego bez ograniczeń algorytmy optymalizacji lokaln
mathcad, Podstawy Informatyki - zadania z programu Mathcad
zadania z programowania, szkola, programowanie
27.4 - zadanie, Programowanie, Klasa III
Zadania z programowania w Turbo Pascalu na ocenę 5, Informatyka

więcej podobnych podstron