background image

eBook 

PDF 

nia 

z programuwama 

• 

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

_

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

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 

Rozdział 

1. 

Proste operacje wejścia-wyjścia 

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

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

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) 

kompilatora firmy Borland  (C+ + 

)

Mirosław J. Kt1biak 

background image

.  , 

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

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. 

Więcej informacji na ten1at klas  czytelnik znajdzie 

rozdziale 

6. 

background image

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 

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 

wprowadzamy  z  klawiatury.  W  programie  należy p1,zyjąć, 

że zmienne 

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 : 

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

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 :  

t1możliwia zadeklarowanie zmiennych 

a ,   b 

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 

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. 

Podaj  bok b. 

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 

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 

jest typll 

fl oat 

(rzeczywistego). Dla  zmien­

nych 

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 

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. 

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 

języku 

c+ + 

w  przypadku zastosowania operatora dzielenia 

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  

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 

wprowadzanych  z  klawiatt1ry.  W  pro­

gramie  p1·zyjml1jemy,  że liczby 

są  typll 

fl oat 

(1·zeczywi­

stego ). Dla zmiennych 

x, y,  s uma,  rozni ca,  i 1 oczyn 

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 

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. 

Podaj  y. 

Dla 

=  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 

tyn1  rozdziale przedstawimy  typowe  zadania  wraz  z przykladowyn1i 

rozwiqzanian1i z wykorzystanie1n instrukcji warunkowych. 

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

instrt1kcja wart1nkowa 

i f 

.

.

el se, 

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

:  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 

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 ,  

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 

3,  b 

=  4, 

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 

1, 

2,  c 

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 

1 ,   b 

2,  c 

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. 

Podaj  bok b. 

Podaj  bok c. 

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 

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

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

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 

O, 

to  zostanie  wyświetlony  kom11nikat 

Niedozwolona  wartosc 

wspolczynnika a 

. . .  

i prog1,am  zostanie zakończony.  Dla 

różnego  od 

zera  program  będzie  oczekiwał  na  wp1,owadzenie  wa1,tości 

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 

1,  b 

=  4 

wartości pierwiastków równania 

wynoszą odpowiednio 

xl 

=  -4 

x2 

- 1 . 

Dla 

1,  b 

trójmian  ma  z  kolei  jeden  pierwiastek  po­

dwójny 

xl 

- 2 .  

Dla 

1, b 

01,az 

h'ójmian nie ma pierwiastków rzeczywistych. 

Rezt1ltat  działania  programt1  dla 

1 ,   b 

5, 

=  4 

można  zobaczyć 

na rysunkt1 

2 . 2 .  

Program oblicza pierwiastki  rownania kwad ratowego d la 

dowol nych wspolczynnikow a,  b,  c. 

Podaj  a. 

Podaj  b. 

Podaj  c. 

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, 

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 

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

-

1 ,   b 

- 4, 

- 4 

można zobaczyć 

na rysunk11 

2 . 3 .  

Program oblicza pierwiastki  rownania kwad ratowego d la 

dowol nych wspolczynnikow a,  b,  c. 

Podaj  a. 

Podaj  b. 

Podaj  c. 

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

z  równania 

a x+b 

c .  

Wartości 

a ,   b 

należą  do  zbiort1  liczb  rzeczywistych  i  są 

wprowadzane z  klawiatury.  Dodatkowo  należy zabezpieczyć 

program na  wypadek sytuacji, kiedy wprowadzona wartość 

jest równa  zero .  Dla  zmiennych 

a, 

b, 

oraz 

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. 

Podaj  b. 

Podaj  c. 

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 

do 

generowaną przez komputer. 

Wskazówka 

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 

do 

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


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

tyi11  rozdziale przedstawi1ny  typowe  zadania  wraz  z przykladowy1ni 

rozwiqzania111i  z  wykorzystanien1  iteracji,  czyli popularnych pętli. 

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. 

języku  c+ +  istnieją trzy instrukcje iteracyjne: 

for 

(dla), 

do 

.

.

.

 

whi 1 e 

(powtarzaj), 

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 

zmieniających  się  od 

do 

10 

oblicza  wartość 

funkcji 

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 

=  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 

=  "  << 

<<  endl : 

getch 

) :  I I 

czeka na nacisniecie dowolnego klawisza 

pętli 

for  ( x  =  O :  

<= 

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 

(inicjalizacja) do 

10 

(wa1,11nek)  z krokiem 

(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 

zmieniających  się  od 

do 

10 

oblicza  war­

tość f11nkcji 

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 

=  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

11 

<< 

<<  endl : 

x++: 

whi l e   ( x   <=  1 0 ) :  

getch (

:  I I 

czeka na nacisniecie dowolnego klawisza 

Pętla 

do 

.  .  whi l e  

do 

=  3*x : 

cout  <<  " x   = 

11 

<<  x  <<  ' \t '   << 

11

=  11  << 

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

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

<= 

10. 

Zwróćmy  liwagę ,   że  warunek  sprawdzający  .zakończenie 

działania pętli, tzn. 

whi 1 e 

<= 

10) ,  

znajd11je się na jej końcu. 

ZADANIE 

Napisz program, który za pomocą instrukcji 

whi 1 e 

dla danych 

wartości 

zmieniających  się  od 

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

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

<< 

<<  endl : 

x++ : 

Zmienną 

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 

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 

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 

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 

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 

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 

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 

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 

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 

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 

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 

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 

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 

== 

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 

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 

przedziale od 

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 

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 

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

) ) 

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 

do 

1 OO 

odpowiedzialne  są 

następujące linijki kodt1: 

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

i f 

( ! ( 

i % 2  == 

) ) 

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 

przedziale od 

do 

100. 

Wskazówka 

Należy skorzystać z właściwości  operatora  mod 

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 

do  100 . "  

�<<  endl : 

do 

i f  ( 

( i 

% 2 

== 

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 

przedziale od 

do 

100. 

Wskazówka 

Należy skorzystać z właściwości  operatora  mod 

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 

== 

) ) 

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 

liczb losowych  z  p1,ze­

dział11 od 

do 

99 

oraz oblicza ich średnią (w zadaniu 

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  

pierwszej  kolejności w  programie  los11jemy  liczbę  i  przypis11jemy 

jej wartość 

mi n .  

mi n =  random ( l0 0 ) :  

kolejnym krok11 wartości 

max 

nadajemy wartość 

mi 

n .  

max  =  mi n :  

Następnie w pętli pomniejszonej o 

(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 

liczb  loso­

wych  z  p1�zedział11  od 

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 

liczb  losowych  z  prze­

dział11 od 

do 

99 

oraz oblicza ich średnią (w zadani11 

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 

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 0  

1 2  

1 4  

1 6  

1 8  

20 

1 2  

1 5  

1 8  

21 

24 

27 

30 

1 2  

1 6  

20 

24 

28 

32 

36 

40 

1 0  

1 5  

20 

25 

30 

35 

40 

45 

50 

1 2  

1 8  

24 

30 

36 

42 

48 

54 

60 

1 4  

21 

28 

35 

42 

49 

56 

63 

70 

1 6  

24 

32 

40 

48 

56 

64 

72 

80 

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 

Zadanie 

3 . 1 9  

ZADANIE 

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

od 

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 

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 

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 

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 

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

• 

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. 

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. 

ZADANIE 

Napisz  program,  który  w  10-elementowej  tablicy  jednowy­

miarowej  o  nazwie 

dane 

t1mieszcza  liczby  od 

do 

(zobacz 

poniżej jej  reprezentację graficzną) . 

» 

-� 

� 

,.o 

ce 

+-I 

r:J) 

� 

Q,) 

""d 

� 

� 



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   = 

:  i  < 

i ++ )  

dane[ i J  =  i : 

» 

-� 

� 

,.o 

ce 

+-I 

'U 

'r:JJ 

+-I 

� 

ce 

� 

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

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 

do 

(zobacz poniżej 

jej  reprezentację graficzną). 

» 

» 

-� 

� 

-� 

...o 

� 

...o 

ce 

ce 

.+-I 

.+-I 

'U 

r:JJ 

'r:J'J 

� 

.+-I 

Q.) 

� 

"'d 

ce 

� 

� 

� 

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   = 

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

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: 

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 

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 

itd .  Ostatni  element  ta­

blicy ma indeks  równy jej  wymiarowi minus 

1 ,  

czyli 

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 . 

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  o 

o  o 

o  o 

o  o 

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 :  

<  n :   i ++ )   I I 

wpisywanie do  tablicy 

for  ( j  

O :  

<  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 

na p1'zekątnej  i liczby 

poza nią. 

Całość kod11 limieszczającego  w tablicy liczby 

na  przekątnej  i  licz­

by 

poza przekątną znajduje się poniżej . 

for  ( i  

-

o : 

n :  

for  ( j  

-

O :  

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 

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 

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

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

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 

o  o 

o  o 

o  o 

o  o 

o  o 

o  o  o 

o  o 

Wskazówka 

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 :  

<  n :   i ++ )  

for  ( j  

-

O :  

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

<  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 

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 

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  o 

o  o 

o  o 

o  o 

o  o 

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

<  n :   i ++ )  

for  ( j  

-

O :  

<  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 

do 

9, 

w d1,11giej kwadraty tych liczb,  natomiast w pozostałych koltun­
nach 

(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 

4  16 

25 

6  36 

49 

64 

81 

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 :  

<  n :   i ++ )  

for  ( j   =  O :  

<  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 

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 :  

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

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

programie  wykorzystano  manipulator 

setw ( i nt  n ) ,  

który  ok1'eśla 

szerokość pola 

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 

b .  

Tablica 

zawiera elementy przedstawione poniżej . 

o  1 

o  1 

o  1 

o  1 

o  1 

8  9 

o  1 

o  1 

o  1 

8  9 

o  1 

o  1 

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 

zawiera  same  zera.  Napisz  program,  któI'Y  przepis11je  za­

wartość  tablicy 

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 

6  6 

6  6  6 

7  7  7  7  7  7 

8  8 

8  8  8 

9  9 

9  9  9 

Przykładowe 1�ozwiqzanie - listing 

4.8 

#i nc 

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 :  

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

<  n :   j++ ) 

o  o  o  o 

1  1  1 

2  2  2  2 

3  3  3  3 

4  4 

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 

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. 

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 

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

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

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 

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 

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

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, 

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

<<  " 

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 

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 

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 

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

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 

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 

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

boku  b  - "  <<  b :  

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

prezentt1je  wartości boków 

oraz  wartość  zmiennej 

pol e 

w  okre­

ślonym  formacie. 

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 

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 

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 

-

1,  b 

-

-

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. 

Podaj  b. 

Podaj  c. 

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 

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 )  

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 :  

<  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 

liczb  wczytanych  z  klawiatu1,y 

(w  zadanit1  jest ich  sześć).  Powinien  on zawierać  trzy bezpara­

metrowe  funkcje: 

czytaj_dane ( ) ,   przetworz_dane ( ) 

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

1 2  

67 
456 

-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 

liczb  całkowitych  (w  zadanit1 

10)  z  przedziału  od 

do 

99, 

a  następnie  znajdt1je  naj­

mniejszą i największą z nich. Powinien on zawierać trzy bezpa­
rametrowe funkcje: 

czytaj_dane ( ) ,  przetworz_dane ( ) 

wyswi etl _ 

wyn i k  

( ) .  Ft1nkcja 

czytaj_dane ( ) 

lost1je 

całkowitych liczb  od 

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 

�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 

zmieniającego  się  od 

do 

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

1 1  

<<  endl : 

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

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

=  ob l i cz ( x ) : 

cout  <<  fi xed :  

cout  <<  setpreci si on ( 2 ) : 

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

<<  endl : 

x=x+krok : 

getch ( )  :  I I 

czeka na nacisniecże dowolnego klawisza 

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

5 . 6 .  

--------------

--------------

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

• 

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) 

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

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 . 

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: 

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; 

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; 

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: 

czytaj_dane ( ) 

llmożliwia wprowadzenie do programl1 

wa1,tości boków 

z klawiatUI'Y· 

programie należy 

p1,zyjąć, że boki oraz zmienna 

pol e 

są typ11 

fl oat 

(rzeczywistego) .  

przetworz_dane ( ) 

oblicza pole prostokąta wedł11g wzort1 

pol e =  a*b. 

wyswi etl _wyni k C ) 

wyświetla wa1,tości boków 

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

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 

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 

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. 

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. 

Podaj  bok b. 

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 

z  wykorzystaniem  instr11kcji  wyborl1 

swi tch  . . .  

case. 

Klasa powinna zawierać trzy metody: 

czytaj_dane( )  

jest odpowiedzialna za wczytanie danych 

do p1,ogramu 01,az obsł11żenie sytuacji, kiedy 

O .  

Zmienne 

a, b 

oraz 

to liczby rzeczywiste wprowadzane z klawiatury. 

przetworz_dane( ) 

odpowiada za wykonanie niezbędnych 

obliczeń. 

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

„ 

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. 

Podaj  c. 

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 

do 

9, 

a  poza nią ze1'a.  Dodatkowo  oblicza  on  st1mę 

liczb  znajdujących  się  na przekątnej .  Klasa  powinna  zawierać 

trzy metody: 

czytaj_dane ( ) 

umieszcza dane w tablicy; 

przetworz_dane ( ) 

oblicza i wyświetla st1mę liczb 

znajdt1jących się na przekątnej; 

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 

liczb  (w  zadanit1  jest  ich  sześć) .  Klasa 

powinna zawierać tI'ZY metody: 

czytaj_dane ( ) 

odczytuje  dane i umieszcza je w tablicy 

o nazwie 

l i czby; 

przetworz_dane ( ) 

sortuje dane, korzystając z  wybranego 

algorytmt1  (w prog1,amie zastosowano algorytm 
sortowania bąbelkowego); 

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 

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

=  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

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. 

języku  c+ +  plik otwiera  się  przez połączenie go  ze strllmieniem. 

Istnieją trzy typy st1't1mieni: 

wejściowe, 

wyjściowe, 

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: 

czytaj_dane ( ) 

wczytl1je z klawiatt1ry imię  i nazwisko; 

zapi s z_dane_do_pl i k u ( ) 

zapisl1je imię i nazwisko do 

plikt1  tekstowego 

dane.txt; 

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 

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 

zapist1je do plikt1  tekstowego 

dane. txt, 

a następnie zapisane dane od­

czyt11je  i  wyświetla  na  ekranie  komp11tera.  Klasa  powinna  zawierać 

trzy metody: 

czytaj_dane ( ) 

tworzy tablicę 

1 0 x 10; 

zapi s z_dane_do_pl i k u ( ) 

zapis11je tablicę 

t o x  10 

do plik11 

tekstowego 

dane. txt; 

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 

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 

cout  <<  endl : 

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 

cout  <<  endl 

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ę 

o wymiarach 

1 O x 1  O 

i postaci 

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 

p1,zekształca w tablicę 

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 

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 

czytaj_dane ( ) 

tworzy tablicę 

o wymiarach 

1 0 X  1 0 ;  

przetworz_dane ( ) 

przepis11je elementy tablicy 

o wymia1,ach 

1 0 x 1 0  

do tablicy 

o tej  samej wielkości; 

zapi s z_dane_do_pl i k u ( ) 

zapis11je tablicę  b o  wymia1,ach 

1 o x  1 0  

do plik11; 

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 

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 

,  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 

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 

cout  <<  endl : 

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