The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Duke No.1, 2020-10-09 08:23:19

C++ za apsolutne pocetnike

Cpp_za_apsolutne_pocetnike

Keywords: c++ programiranje

C++ programiranje za apsolutne početnike

Pogledamo podrobnije dio programa u kojem se vrši sortiranje. Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Sortiranje se odvija u do ... while pet- Na početku ispitivanja u varija- program
lji. Petlja se ponavlja tako dugo dok je blu zamjena stavlja se broj 0.
varijabla zamjena jednaka broju 1. Ako ne bude potrebno vršiti odluke
nikakve zamjene u polju, varija-
do bla zamjena ostat će jednaka Polja
nuli i izvođenje do ... while pet-
{ lje će se zaustaviti. Sažimanje Veliki pro- Objekti Obrada teksta
zamjena = 0;
U for petlji čita se cijelo polje, s
for (x = 0; x < 4; x = x + 1) time da se varijabla petlje mije-
{ nja za jedan manje od veličine
petlje; dakle u našem slučaju ne
if (p[x] < p[x+1]) ide do 4 nego, do 3.

{ If naredbom ispitujemo je li broj
privremeni = p[x]; u nekoj ćeliji polja (p[x]) manji
p[x] = p[x+1]; od broja u sljedećoj ćeliji (p
p[x+1] = privremeni; [x+1]. Ako nije, znači da imamo
zamjena = 1; prvo veći broj, a zatim manji.
To je ono što želimo i petlja se
} vrti dalje.

} Ako jest, znači da imamo prvo
manji, a zatim veći broj, pa ih
} treba zamijeniti.

while (zamjena ==1); U tom slučaju u ovom dijelu će
se izvršiti zamjena.

Na kraju zamjene u varijablu zamjena stavit će se broj 1. grami

Zbog toga do ... while petlja će cijeli postupak ponavljati tako dugo dok više koda
ne bude obavljena ni jedna zamjena i varijabla zamjena ostane jednaka nuli.

To znači da nije pronađen ni jedan slučaj da je neki broj manji od sljedećeg
tj. da je sortiranje od većeg prema manjem završeno.

PRO - MIL 201

Polja

Pogledajmo kako funkcioni- Za zamjenu sadržaja dviju susjednih ćelija
ra zamjena sadržaja ćelija. u polju treba nam pomoćna varijabla; u
našem slučaju to je varijabla privremeni.
privremeni = p[x];
Zašto?

Da smo odmah napravili drugu naredbu,
naredbu p[x] = p[x+1]; onda bi se broj koji
se nalazi u p[x+1]; nalazio i u p[x], a broj
koji se je do tada nalazio u p[x] bi nestao.

Da broj koji se nalazi u p[x] ne bi nestao,
privremeno ga spremamo u varijabli priv-
remeni.

p[x] = p[x+1]; Nakon što smo u prethodnom koraku sadr-
p[x+1] = privremeni; žaj ćelije p[x] spremili u varijablu privremeni,
sadržaj ćelije p[x+1] spremamo u ćeliju p[x].

Budući da p[x] uspoređujemo sa p[x+1], x
mora bit za jedan manji od broja ćelija.

Sadržaj varijable privremeni sada vraćam u
polje, ali ne u ćeliju p[x] u kojoj se taj sadr-
žaj do sada nalazio, nego u sljedeću ćeliju,
u ćeliju p[x+1].

Time smo sadržaje ćelija p[x] i p[x+1] zami-
jenili.

zamjena = 1; Na kraju zamjene u varijablu zamjena stav-
ljamo broj jedan.

Time smo obavijestili računalo da je bilo
potrebno vršiti zamjene u polju, tj. da polje
nije bilo sortirano po redu, te da do ... while
petlja mora još jednom provjeriti je li polje
sortirano. Kad se ni u jednom slučaju neće
dogoditi da je neka ćelija manja od sljede-
će, sortiranje je završeno.

202 PRO - MIL

C++ programiranje za apsolutne početnike

Između polja mogu se vršiti matematičke ope- Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
racije kao i između varijabli.

#include <cstdlib> Ovaj program će zbrojiti sadržaje polja po1 i
#include <iostream> polja po2, a rezultat spremiti u polje po3 i zatim
ga ispisati na zaslon računala.

using namespace std; program

int main() odluke
{

int po1[5] = {10, 15, 20, 25, 30};
int po2[5] = {35, 40, 35, 50, 55};
int po3[5];
int a;
for (a = 0; a < 5; a = a +1)
{

po3[a] = po1[a] + po2[a];
cout << po1[a] << " + " << po2[a] << " = " << po3[a] << endl;
}
system("PAUSE");
return 0;
}

Polja

Sažimanje Veliki pro- Objekti Obrada teksta

Pokušajmo napisati slične programe koji će vršiti neke operacije između po- grami
lje; npr. programe koji će množiti ili dijeliti članove dvaju polja i rezultat spre-
mati u treće polje. koda

Program koji će uspoređivati pojedine ćelije dvaju polja, a zatim će u treće
polje spremiti vrijednost one ćelije koja sadrži veći broj ili manji broj.

Program koji će brojiti koliko puta se neki broj pojavljuje u nekom polju.

PRO - MIL 203

Polja

Spremanje brojeva u datoteku

Postavlja se pitanje na
koji način bismo mogli
podatke umjesto preko
tipkovnice unijeti u po-
lje iz neke datoteke. U
tu svrhu otvorit ćemo
Nopetad (u hrvatskoj
inačici Blok za pisanje)
i unijet ćemo osam raz-
ličitih brojeva koji će biti
odvojeni praznim mjes-
tima.

Važno je napomenuti
da to moramo učiniti
tim programom, a nipo-
što Wordom ili nekim
sličnim programom.

Te brojeve, odnosno taj tekst spre-
mit ćemo pod imenom podaci.txt u
onu istu mapu u kojoj se nalazi
naš program.

U našem slučaju to je mapa Radni
na C: disku.

Ako smo program spremili u neku
drugu mapu, u tu istu mapu spre-
mimo i ovaj tekst.

204 PRO - MIL

C++ programiranje za apsolutne početnike

Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program

Ako je sve u redu, u onom istom
prostoru u kojem se nalazi naš
projekt i naš program morala bi se
nalaziti i datoteka podaci.txt.

odluke

Jasno je da možemo staviti i Int tip u slučaju da koristimo Polja
neke druge brojeve, a možemo Dev-C++ može biti od –
ih staviti više ili manje nego u 2147483648 do 2147483647. Sažimanje Veliki pro- Objekti Obrada teksta
našem primjeru.
Float tip može imati najveću grami
Ako mijenjamo količinu brojeva, vrijednost od 3.40282 * 10-38. To
onda u programu koji će ih čitati se u programu piše kao koda
moramo na isti način promijeniti 3.40285e-38.
veličinu polja i for petlju.
Mogu li se u programima koristiti
Moramo imati na umu i da broj i veći brojevi? Naravno, ali taj
koji unosimo ne može biti neog- problem nadilazi potrebe našeg
raničeno velik. Koliki broj može- uvodnog priručnika.
mo unijeti u polje, odnosno u
varijablu, ovisi o svojstvima pro- Za sada je bitno imati na umu
gramskog okruženja koje koristi- da u int ili float varijablu ne mo-
mo. žemo staviti neograničeno velik
broj.

PRO - MIL 205

Polja

#include <cstdlib> Ovim programom pročitat ćemo brojeve koji su sprem-
#include <iostream> ljeni u datoteku podaci.txt, spremit ćemo ih u polje i na
#include <fstream> kraju ispisati na zaslon računala.

Dodat ćemo novu biblioteku.

using namespace std; Ovdje formiramo nešto s čime se do sada
nismo sretali, a to je objekt. Trenutno nije
int main() važno što je to točno objekt. Za sada će-
{ mo reći da je to element programa pomo-
ću kojeg ćemo čitati sadržaj datoteke.
int x;
int polje[8]; Ova petlja mora se vrtjeti onoliko puta
ifstream ulaz("podaci.txt"); koliko brojeva želimo pročitati, odnosno
koliko naše polje ima ćelija. U našem
for (x = 0; x < 8; x = x + 1) slučaju to je osam puta.
{

ulaz >> polje[x];
}

for (x = 0; x < 8; x = x +1) Ovom naredbom sadržaj datoteke
{ unosi se u polje.

cout << polje[x] << endl; Da smo ovdje napisali:
}
cin >> polje[x];
system("PAUSE");
return 0; brojevi bi se u polje unosili pomo-
} ću tipkovnice.

Ispis sadržaja polja.

ulaz >> polje[x];

je varijacija te naredbe i znači da
se brojevi neće u polje unositi po-
moću tipkovnice nego pomoću
objekta ulaz, a prije smo definirali
da objekt ulaz čita iz datoteke po-
daci.txt.

206 PRO - MIL

C++ programiranje za apsolutne početnike

Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi- Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
ću kojeg ćemo čitati sadržaj datoteke. ci po kojoj biramo nazive varijabli.

ifstream ulaz ("podaci.txt"); Naziv datoteke koju ćemo čitati program
pomoću objekta ulaz.

#include <cstdlib> odluke
#include <iostream>
#include <fstream> Kada učitamo brojeve u polje, Polja
s tim brojevima možemo raditi
using namespace std; sve ono što možemo raditi i s Sažimanje Veliki pro- Objekti Obrada teksta
brojevima koje smo unijeli
int main() preko tipkovnice. grami
{
U ovom programu izračunat
int x; ćemo prosječnu vrijednost
int polje[8]; unesenih brojeva.
float a = 0;
ifstream ulaz("podaci.txt"); Budemo li eksperimentirali s
for (x = 0; x < 8; x = x + 1) drugim brojevima, imajmo na
{ umu da njihova ukupna suma
ne smije biti veća od maksi-
ulaz >> polje[x]; malne dozvoljene vrijednosti
} varijable.
for (x = 0; x < 8; x = x +1)
{

a = a + polje[x];
}
a = a / 8;
cout << "Prosjek je " << a << endl;
cout << endl;
system("PAUSE");
return 0;
}

koda

PRO - MIL 207

Polja

#include <cstdlib> Ovaj program omogućuje nam da sadržaj polja koji
#include <iostream> smo unijeli preko tipkovnice spremimo u datoteku.
#include <fstream>

using namespace std; I u ovom slučaju moramo imati uključenu
fstream biblioteku.
int main()
{ Ovdje formiramo objekt izlaz pomoću
kojeg ćemo brojeve iz polja spremiti
int x; u datoteku podaci.txt.
int polje[8];
ofstream izlaz("podaci.txt");

for (x = 0; x < 8; x = x + 1)
{

cin >> polje[x];
}

for (x = 0; x < 8; x = x + 1) Na uobičajeni način unosimo brojeve
{ u polje.

izlaz << polje[x];
izlaz << " ";
}

cout << "Spremanje je gotovo." << endl; Ovdje sadržaj polja sprema-
cout << endl; mo u datoteku podaci.txt.
system("PAUSE");
return 0; Naredbom:
}
izlaz << polje[x];

brojeve iz polja pomoću
objekta izlaz šaljemo u da-
toteku.

Ova naredba slična je na-
redbi:

cout << polje[x];

kojom brojeve šaljemo na
zaslon računala.

Naredbom izlaz << " "; iz-
među dva broja unosimo
prazno mjesto.

208 PRO - MIL

C++ programiranje za apsolutne početnike

Naredba za formiranje objekta pomo- Naziv objekta. Bira se po istoj logi- Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
ću kojeg ćemo spremati sadržaj dato- ci po kojoj biramo nazive varijabli.
teke.

ofstream izlaz ("podaci.txt"); Naziv datoteke u koju ćemo program
spremati pomoću objekta ulaz.

Što smo spremili možemo pogledati editorom, a možemo i programom koji
sadržaj datoteke ispisuje na zaslon računala.

odluke

#include <cstdlib> Polja
#include <iostream>
#include <fstream> Sažimanje Veliki pro- Objekti Obrada teksta

using namespace std; grami

int main() koda
{

int x;
int polje[8];
ifstream ulaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{

ulaz >> polje[x];
}
for (x = 0; x < 8; x = x +1)
{

cout << polje[x] << endl;
}
system("PAUSE");
return 0;
}

PRO - MIL 209

Polja

#include <cstdlib> U ovom programu nema ničeg novog. Samo smo
#include <iostream> kao lego kocke složili elemente koje smo do sada
#include <fstream> upoznali.

using namespace std; Ovaj program učitava datoteku u polje, sortira polje
i zatim sortirano polje sprema natrag u datoteku.

int main() U ovom djelu programa čitamo
{ sadržaj datoteke i spremamo ga
u polje.
int x;
int p[8]; Doslovno sa Copy Paste kopi-
int zamjena; ran dio programa koji sortira
int privremeni; sadržaj polja od najvećeg prema
ifstream ulaz("podaci.txt"); najmanjem.
for (x = 0; x < 8; x = x + 1)
{ U ovom djelu programa sadržaj
polja sprema se u datoteku.
ulaz >> p[x];
} Ovdje vidimo i jedan jako va-
cout << "Zapocinje sortiranje." << endl; žan element programiranja.
do Ne moramo svaku stvar svaki
{ put kad nam treba iznova pro-
gramirati. Segment programa
zamjena = 0; koji dobro radi obilno proko-
for (x = 0; x < 7; x = x + 1) mentiramo i spremimo, a za-
{ tim ga ubacujemo u programe
kad nam zatreba, kao što smo
if (p[x] < p[x+1]) ovdje ubacili segment progra-
{ ma koji sortira sadržaj polja.

privremeni = p[x];
p[x] = p[x+1];
p[x+1] = privremeni;
zamjena = 1;
}
}
}
while (zamjena ==1);
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1)
{
izlaz << p[x];
izlaz << " ";
}
cout << "Sortiranje je zavrsilo" << endl;
system("PAUSE");
return 0;
}

210 PRO - MIL

C++ programiranje za apsolutne početnike

#include <cstdlib> Da bismo provjerili funkcio- Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program
#include <iostream> nira li naš program, najpri-
#include <fstream> je ćemo programom koji odluke
smo malo prije obradili
using namespace std; unijeti brojeve u datoteku. Polja

int main() #include <cstdlib> Sažimanje Veliki pro- Objekti Obrada teksta
{ #include <iostream>
#include <fstream>
int x;
int polje[8]; using namespace std;
ofstream izlaz("podaci.txt");
for (x = 0; x < 8; x = x + 1) int main()
{ {

cin >> polje[x]; int x;
} int polje[8];
for (x = 0; x < 8; x = x + 1) ifstream ulaz("podaci.txt");
{ for (x = 0; x < 8; x = x + 1)
{
izlaz << polje[x];
izlaz << " "; ulaz >> polje[x];
} }
cout << "Spremanje je gotovo." << endl; for (x = 0; x < 8; x = x +1)
cout << endl; {
system("PAUSE");
return 0; cout << polje[x] << endl;
} }
system("PAUSE");
Nakon što smo brojeve return 0;
unijeli u datoteku, pokrene- }
mo program za sortiranje
datoteke koji vidimo na
lijevoj stranici.

grami

Programom za čitanje sadržaja datoteke pog- koda
ledat ćemo rezultat sortiranja.
211
PRO - MIL

Polja

Dvodimenzionalna polja

Ako postoje jednodimenzionalna polja, moraju postojati i dvodimenzionalna. (U
suprotnom bismo imali situaciju kao kad je jedan novinar govorio o lokalnim sta-
novnicima nekog mjesta, iako nam vjerojatno ne bi mogao objasniti kako izgle-
daju globalni stanovnici istog mjesta.)

1.stupac 2. stupac 3. stupac 4. stupac Dvodimenzionalne
matrice pogodne su
1. red 11 12 13 14 za spremanje sadr-
žaja tabela.

2. red 21 22 23 24

#include <cstdlib> U ovom programu ćemo gornju tabelu
#include <iostream> spremiti u dvodimenzionalnu matricu, a
zatim ćemo prvi i drugi red ispisati.

using namespace std;

int main()
{

int polje[2] [4] = {{11, 12, 13, 14}, {21, 22, 23, 24}};
int x;

cout << "Prvi red." << endl; Ispis prvog reda.
for (x = 0; x < 4; x = x + 1)
{

cout << polje[0] [x] << endl;
}
cout << endl;

cout << "Drugi red." << endl;
for (x = 0; x < 4; x = x + 1)
{

cout << polje[1] [x] << endl;
}
cout << endl;

system("PAUSE");
return 0;
}

Ispis drugog reda.

212 PRO - MIL

C++ programiranje za apsolutne početnike

Tip polja u našem slučaju je int, Drugi red polja. Nalazi se Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
a moglo je biti npr. float ili char. unutar vitičastih zagrada.

Naziv polja. Prvi red polja. Nalazi se program
unutar vitičastih zagrada.

int polje [2] [4] = { {11, 12, 13, 14} , {21, 22, 23, 24} };

Broj redova polja. Broj stupaca polja. Cjelokupni sadržaj polja odluke
nalazi se unutar poseb-
nih vitičastih zagrada.

Budući da su u ovom tipu polja podaci raspoređeni u redove i stupce, prilično
logično je da kad želimo pristupiti nekoj ćeliji takvog polja moramo navesti u
uglatim zagradama broj reda i broj stupca ćelije kojoj želimo pristupiti.

Polja

cout << polje [0] [x] Broj stupca kojem pristupamo, u našem Sažimanje Veliki pro- Objekti Obrada teksta
slučaju je to sadržaj varijable x.

Broj reda kojem pristupamo, u našem slučaju je to prvi red koji se označava
brojem nula. Dakle prvi red označava broj nula, a drugi broj jedan.

Dvodimenzionalna polja koriste se Osim dvodimenzionalnih postoje i grami
na sličan način kao jednodimenzio- trodimenzionalna polja. Funkcioni-
nalna. Osobito su korisna u progra- raju slično kao dvodimenzionalna, koda
mima u kojima se odvijaju složeni samo što imaju još i “dubinu”.
proračuni.

PRO - MIL 213

Obrada teksta

214 PRO - MIL

PRO - MIL Obrada teksta

215 Sažimanje Veliki pro- Objekti Obrada Polja Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj C++ programiranje za apsolutne početnike

koda grami teksta odluke program

Obrada teksta

String objekti

Želimo li napisati program za vođenje telefonskog imenika ili program za vođe-
nje videoteke, osim obrade brojeva i grafike sasvim sigurno će nam trebati obra-
da teksta. Iako smo i do sada koristili tekstove za ispisivanje raznih obavijesti,
ostalo je nejasno na koji način bismo mogli tekstove pretraživati ili sortirati.

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std; Pogledamo li ovaj pro-
gram, učinit će nam se
int main() da smo za lakše bara-
{ tanje tekstom upotrije-
bili novi tip varijable,
string odgovor; string tip; te da smo u
cout << "Unesite vase ime." << endl; programu koristili vari-
cin >> odgovor; jablu koju smo nazvali
cout << endl; odgovor.
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

Pogledajmo nove elemente u ovom programu.

string odgovor; Iako ovaj red izgleda kao da formiramo varijablu
string tipa koju smo nazivali odgovor, string nije tip
varijable nego klasa, a odgovor nije varijabla nego
objekt.

Time se trenutno ne moramo opterećivati i možemo
objekt odgovor koristiti kao da smo formirali varijablu
string tipa pod nazivom odgovor.

Tek nešto veće mogućnosti koje će nam string pruži-
ti dat će nam naslutiti da se iza toga naziva krije
kompleksnija struktura od obične varijable.

216 PRO - MIL

#include <string> C++ programiranje za apsolutne početnike Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Da bi program mogao koristiti string objekte, program
ovu naredbu moramo staviti na početak prog-
rama.
U našem programskom okruženju program će
raditi i bez ovog reda, ali je moguće da u ne-
kom drugom programskom okruženju neće.
Zbog toga ćemo stavljati tu naredbu

cout << odgovor << ", dobar dan!" << endl; Vidimo da objekt odgovor odluke
u naredbi cout koristimo
kao da koristimo varijab- Polja
lu.

Najprije će se ispisati
sadržaj objekta odgovor,
zatim tekst unutar navod-
nika i konačno skok u
novi red.

Sažimanje Veliki pro- Objekti Obrada teksta

cin >> odgovor; U naredbi cin koju koristimo za unos preko tipkovni- grami
ce objekt odgovor koristimo kao što bismo koristili
PRO - MIL varijablu. koda

Dok smo u varijablu char tipa mogli spremiti jedno
slovo, u objekt klase string možemo spremati veći
tekst.

217

Obrada teksta

Očigledno je da u string objekt možemo spremiti tekst i postavlja se pitanje
koliko najviše znakova smije sadržavati taj tekst.

U načelu računalo bi se samo trebalo brinuti da osigura dovoljno mjesta za
spremanje bilo kojeg teksta. U slučaju korištenja kraćih tekstova, poput imena,
naziva gradova i slično o tome ne moramo voditi brigu.

Želimo li u string objekt unijeti veću količinu teksta, da bismo bili sigurni da će
sve biti u redu, možemo unaprijed naredbom reserve rezervirati potreban pro-
stor.

#include <cstdlib> Program radi jednako
#include <iostream> kao i prethodni, osim
#include <string> što smo u ovom slučaju
za spremanje imena
using namespace std; osigurali veliki prostor.

int main()
{

string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

odgovor.reserve(256) Operacija koja se vrši nad objektom.
Ovom naredbom se za objekt odgovor
rezervira 256 mjesta za spremanje znako-
va.

Objekt na koji se naredba Obratimo pažnju na točku koja se obvezno
odnosi, u našem slučaju je nalazi između oznake objekta i oznake
to objekt odgovor. operacije koja se nad njim vrši.

218 PRO - MIL

C++ programiranje za apsolutne početnike

#include <cstdlib> Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program
#include <iostream>
#include <string> odluke

using namespace std;

int main()
{

string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
cout << "Imamo " << odgovor.size() << " slova." << endl;
cout << endl;
cout << "Imamo " << odgovor.capacity() << " prostora." << endl;
cout << endl;
system("PAUSE");
return 0;
}

odgovor.size() Naredba size() očigledno služi za određivanje Polja
broja znakova unesenog teksta. Riječ Stjepan
sastoji se od sedam slova. Sažimanje Veliki pro- Objekti Obrada teksta

Objekt na koji se na- Naredba capacity() služi za određivanje grami
redba odnosi. broja mjesta koja nam stoje na raspola-
ganju za unos znakova u objekt odgo- koda
odgovor.capacity() vor.

Objekt na koji se na- Zašto ih je na raspolaganju 355, ako
redba odnosi. smo naredbom odgovor.reserve(256)
rezervirali 256 mjesta? Zato što je 256
mjesta samo polazište na temelju kojeg
prevoditelj rezervira nešto veći prostor.

PRO - MIL 219

Obrada teksta

#include <cstdlib> Naredbom cin nije mo-
#include <iostream> guće u objekt odgovor
#include <string> unijeti više odvojenih
riječi.
using namespace std;
Iako smo napisali prezi-
int main() me i ime, uspjeli smo
{ unijeti samo prezime.

string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
cin >> odgovor;
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

#include <cstdlib> Ako umjesto cin nared-
#include <iostream> be upotrijebimo ovu na-
#include <string> redbu, moći ćemo unijeti
više riječi u objekt odgo-
using namespace std; vor.

int main() PRO - MIL
{

string odgovor;
odgovor.reserve(256);
cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

220

getline(cin, odgovor); C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

String objekt u koji ćemo unositi tekst.
U našem slučaju to je objekt odgovor.

Naredba koja nam omogućuje program
unos više riječi u string objekt.

#include <cstdlib> Jedan od problema odluke
#include <iostream> pri izradi programa
#include <string> javlja se kad korisnik Polja
unese neodgovara-
using namespace std; juću vrijednost.

int main() U ovom slučaju, um-
{ jesto da unesemo
ime, samo smo priti-
string odgovor; snuli tipku enter.
odgovor.reserve(256);
cout << "Unesite vase ime." << endl; Sažimanje Veliki pro- Objekti Obrada teksta
cin >> odgovor;
cout << endl; grami
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

U ovom slučaju, na
mjestu gdje se očekiva-
lo da ćemo unijeti tekst,
mi smo unijeli brojeve.

Postavlja se pitanje na
koji bismo način mogli
spriječiti ili barem sma-
njiti mogućnost unoše-
nja besmislenih odgo-
vora.

koda

PRO - MIL 221

Obrada teksta

#include <cstdlib> Ova inačica programa
#include <iostream> će zahtijevati da pono-
#include <string> vimo unos ako pritisne-
mo tipku Enter, a da
using namespace std; prije toga nismo ništa
unijeli.
int main()
{

string odgovor;

do
{

cout << "Unesite vase ime." << endl;
getline(cin, odgovor);
}
while (odgovor.size() == 0);

cout << endl;
cout << odgovor << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

do Naredbu za unos teks-
{ ta u objekt odgovor
stavili smo u do ...
cout << "Unesite vase ime." << endl; while petlju koja se
getline(cin, odgovor); izvodi tako dugo dok je
} broj slova koja smo
while (odgovor.size() == 0); unijeli jednak nuli.

222 Kad je taj broj različit
od nule, nastavlja se
izvođenje programa.

PRO - MIL

C++ programiranje za apsolutne početnike

Polje char tipa Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

#include <cstdlib> program
#include <iostream>
#include <string> Tekst se može unijeti u prog- odluke
ram i obrađivati i na drugi
using namespace std; način; uporabom polja char
tipa.
int main()
{

char niz[255];
cout << "Unesite vase ime." << endl;
cin.getline(niz,255);
cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

Formiranje niza čije ćelije su char tipa. U svaku možemo staviti jedno slovo.

Tip niza. U char niz[255]; Broj ćelija niza. U Polja
našem slučaju našem slučaju niz
niz je char Naziv niza, u našem slučaju na- sadrži 255 ćelija Sažimanje Veliki pro- Objekti Obrada teksta
tipa. ziv niza je niz. što znači da u taj
niz možemo spre-
miti 255 slova.

cin.getline( niz, 255); Ovom naredbom preko tipkovni-
ce unosimo tekst u niz char tipa.

Broj ćelija niza. grami
Naziv niza.
Naredbe za koda
unos tekst u
char niz.

PRO - MIL 223

Obrada teksta

cout << niz << ", dobar dan!" << endl; Sadržaj niza char
tipa ispisuje se na
Naziv niza char tipa Ispisujem tekst Skok u isti način na koji se
koji ispisujemo. unutar navod- novi red. ispisuje sadržaj
nika. varijable.

#include <cstdlib> Umjesto naredbe:
#include <iostream>
#include <string> cin.getline(niz,255);

using namespace std; možemo staviti naredbu:

int main() cin >> niz;
{
ali u tom slučaju moći
char niz[255]; ćemo unijeti samo jednu
cout << "Unesite vase ime." << endl; riječ. Nakon pritiska raz-
cin >> niz; maknice unos će se pre-
cout << endl; kinuti pa, kao što može-
cout << niz << ", dobar dan!" << endl; mo vidjeti na donjoj slici,
cout << endl; iako smo napisali Bunic
system("PAUSE"); Stjepan, uneseno je sa-
return 0; mo prezime. Jasno, ako
} baš želimo unijeti samo
jednu riječ onda ćemo
upotrijebiti ovu naredbu
jer je jednostavnija.

cin >> niz;

Naziv char polja u
koje unosimo tekst.

Naredba za unos
teksta tipkovnicom.

224 PRO - MIL

C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

U ovu inačicu programa nije moguće unijeti broj na mjestu na kojem očekuje-
mo tekst. U slučaju da unesemo brojeve, računalo će zahtijevati da ponovimo
upis.

#include <cstdlib> program
#include <iostream>
#include <string> Početni dio programa i odluke
formiranje potrebnih vari-
using namespace std; jabli. Polja

int main() Ovo je glavni dio prog- Sažimanje Veliki pro- Objekti Obrada teksta
{ rama. Ovdje se unosi
tekst i ispituje jesu li grami
char niz[255]; unesena slova ili broje-
int x; vi.
int p;
Ako su uneseni brojevi,
do unos se ponavlja.
{
Oznaku \ dobit ćemo
cout << "Unesite vase ime." << endl; pritiskom na AltGr i Q.
cout << endl;
cin.getline(niz,255); Završni dio programa,
x = 0; ime se spaja s pozdra-
p = 1; vom i gasi se program.
while (niz[x] != '\0')
{

if (isdigit(niz[x]))
{

p = 0;
}
x = x + 1;
}
}
while (p == 0);

cout << endl;
cout << niz << ", dobar dan!" << endl;
cout << endl;
system("PAUSE");
return 0;
}

koda

PRO - MIL 225

Obrada teksta

Pogledajmo podrobnije glavni dio prethodnog programa u kojem se unosi tekst i
ispituje jesu li unesena slova ili brojevi.

Cijeli ovaj dio nalazi se unutar do ... while petlji koja će se ponavljati ako korisnik
umjesto slova unese brojeve.

do While petlja čita niz, slovo
{ po slovo, dok ne dođe do
kraja niza.
cout << "Unesite vase ime." << endl;
Oznaka \0 nalazi se na
cout << endl; Unos teksta. kraju niza pa niz[x] != '\0'
ispituje je li element niza
cin.getline(niz,255); niz[1] jednak znaku za
kraj, odnosno jesmo li
x = 0; Postavljanje odgo- došli do kraja niza.
p = 1; varajućih vrijed-
nosti varijabli. To radi tako da je na po-
četku vrijednost varijable
while (niz[x] != '\0') x nula, a zatim se uveća-
va po jedan
{
if (isdigit(niz[x])) If naredbom ispitujemo je
li znak u nizu broj.
{
p = 0; Ako jest, u p varijablu se
sprema broj nula što će
} imati za posljedicu da će
se ponoviti do ... while
x = x + 1; petlja, odnosno unos.

} Ako ni jedan član niza
nije broj, u varijabli p će
} Varijabla x uve- ostati broj jedan i do ...
while (p == 0); ćava se za jedan while petlja se neće po-
da bi se pri sva- navljati, odnosno upis se
Ovdje se ispituje je li kom ponavljanju neće ponavljati.
vrijednost varijable p naredbom niz[x]
nula i ako jest, do ... čitao slijedeći
while petlja se ponavlja. član niza.

226 PRO - MIL

C++ programiranje za apsolutne početnike

Ovaj program je veoma složen pa ćemo odvojeno pogledati važnije elemente Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
programa. Pogledajmo prvo glavnu do ... while petlju.

Ovdje se u varijablu p

do Ovdje počinje petlja. sprema broj jedan. To je program
{ varijabla o kojoj ovisi
hoće li se do ... while
cout << "Unesite vase ime." << endl; petlja ponoviti ili ne.
cout << endl;

cin.getline(niz,255);

x = 0;

p = 1;

while (niz[x] != '\0')

{ Ovdje će se varijabla p postaviti na nula ako je
if (isdigit(niz[x]))
jedan od znakova u nizu broj. To će imati za
{ posljedicu da će se do ... while petlja ponoviti,
p = 0;
odnosno da će se unos teksta ponoviti.
}

x = x + 1; odluke

} Ovdje se ispituje je li sadržaj varijable p jednak
} nuli. Ako jest do ... while petlja će se ponoviti, a
while (p == 0); to znači da će se upis ponoviti.

Na početku se x postavlja na nulu, što znači da će se prvi Polja
put sa niz[x] ispitivati niz[0] odnosno prva ćelija niza.

x = 0; While petlja ponavlja se tako dugo dok ćelija niz[x] Sažimanje Veliki pro- Objekti Obrada teksta
p = 1; nije jednaka oznaci za kraj. Prvi put se ispituje
while (niz[x] != '\0') prva ćelija odnosno ćelija niz[0]. grami
{
Nakon što smo while naredbom ispitali jesmo li
if (isdigit(niz[x])) došli do kraja niza, if naredbom ispitujemo je li
{ ćelija koju trenutno ispitujemo jednaka nuli. Ako
jest, varijabla p postavlja se na nulu, što znači da
p = 0; će se ponoviti glavna do ... while petlja.
}
x = x + 1;
}

Ovdje se varijabla x uvećava za jedan. To znači da će pri sljedećem izvođenju koda
while petlje x biti 1, pa će se sa niz[x] ispitivati niz[1], zatim pri sljedećem izvo-
đenju while petlje niz[2] i tako do kraja niza.

PRO - MIL 227

Obrada teksta

if ( isdigit ( niz [x] ) ) Ovom naredbom ispitujemo je li jedan znak
broj. Može se ispitivati varijabla char tipa ili
jedna ćelija niza char tipa.

Ispitujemo ćeliju niza char tipa. Broj ćelije
određen je vrijednošću varijable x.

#include <cstdlib> U ovom jednostavnom
#include <iostream> programu možemo vidjeti
#include <string> kako funkcionira ispitiva-
nje je li unesen znak broj
using namespace std; ili nije.
Osim ispitivanje je li uni-
int main() jeti znak broj, moguća su
{ i druga ispitivanja.
U tablici s desne strane
char slovo; možemo vidjeti druge
cin >> slovo; mogućnosti.
if (isdigit(slovo))
{ PRO - MIL

cout << "Ovo je broj " << slovo <<
endl;

}
else
{

cout << slovo << " nije broj." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Pokušajmo u gornji program
staviti ostala ispitivanja koja
možemo vidjeti u tablici.

U tom slučaju morat ćemo mo-
dificirati obavijesti koje daje pro-
gram.

228

C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Osim što možemo ispitivati je li sadržaj varijable broj, ispitivati možemo i druga
svojstva sadržaja varijable char tipa.

ISPITIVANJE ZNAKOVA program
Ispituje je li sadržaj varijable slovo neki broj.
if (isdigit(slovo))

if (isalnum(slovo)) Ispituje je li sadržaj varijable slovo broj ili slovo. Odgovor
je negativan ako unesemo upitnik, točku ili nešto slično.

if (isalpha(slovo)) Ispituje je li sadržaj varijable slovo neko slovo. odluke

if (iscntrl(slovo)) Ispituje je li sadržaj varijable slovo kontrolni znak. To je Polja
if (isgraph(slovo)) znak koji se dobiva ako držimo tipku Ctrl i onda pritis-
nem npr. slovo v.

Je li sadržaj varijable slovo nešto što se ispisuje na zas-
lon računala, dakle slovo, broj ili interpunkcija. U ovu
grupu ne pripada prazno mjesto između dviju riječi.

if (islower(slovo)) Je li sadržaj varijable slovo malo slovo. Sažimanje Veliki pro- Objekti Obrada teksta

if (isprint(slovo)) Je li sadržaj varijable nešto što se ispisuje. Za razliku od
slične naredbe if (isgraph(slovo)) ovdje pripada i prazno
mjesto između dviju riječi.

if (isupper(slovo)) Je li sadržaj varijable slovo veliko slovo. grami

if (ispunct(slovo)) Je li sadržaj varijable slovo neka interpunkcija. koda

PRO - MIL 229

Obrada teksta

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{

char slovo[9] = {'8','?','b','\v','*','a',' ','A','#'};
if (isdigit(slovo[0]))
{

cout << "Prvi znak je broj." << endl;
}
if (isalnum(slovo[1]))
{

cout << "Drugi je slovo ili broj." << endl;
}
else
{

cout << "Drugi nije ni slovo ni broj." << endl;
}
if (isalpha(slovo[2]))
{

cout << "Treci je slovo." << endl;
}
if (iscntrl(slovo[3]))
{

cout << "Cetvrti je kontrolni znak." << endl;
}
if (isgraph(slovo[4]))
{

cout << "Peti nesto sto se ispisuje." << endl;
}
if (islower(slovo[5]))
{

cout << "Sesti je malo slovo." << endl;
}

230 PRO - MIL

C++ programiranje za apsolutne početnike

if (isprint(slovo[6])) Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program
{
odluke
cout << "Sedmi moze biti prazno mjesto." << endl;
}
if (isupper(slovo[7]))
{

cout << "Osmi je veliko slovo." << endl;
}
if (ispunct(slovo[8]))
{

cout << "Deveti je neka interpunkcija." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Ovaj malo veći program morali smo staviti na dvije Polja
stranice.
Sažimanje Veliki pro- Objekti Obrada teksta
Možemo vidjeti uporabu naredbi za ispitivanje znako-
va primijenjenu na polje char tipa. grami

Vidimo da ne možemo odjednom ispitivati cijelo po- koda
lje, nego da ispitujemo pojedine ćelije u polju.
PRO - MIL
Program možemo korigirati mijenjanjem sadržaj polja
ili tako da, umjesto stalnog sadržaja polja, sadržaj
polja unosimo preko tipkovnice.

Uvijek imajmo u vidu da ćemo određenu naredbu
usvojiti tek kad napravimo mnoštvo primjera u kojima
se ta naredba koristi. Određenu naredbu nismo usvo-
jili kad smo je shvatili. Shvaćanje naredbe je samo
uvjet da bismo uopće mogli početi učiti. Naredbu
smo usvojili tek kad smo je puno puta uspješno pri-
mijenili u raznim programima i na razne načine.

231

Obrada teksta
Pogledajmo još nekoliko detalja vezanih uz char varijable i char polja.

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std; Iako to na prvi pogled nema
smisla, znakovi se mogu us-
int main() poređivati kao i brojevi.
{
Na prvi pogled izgleda da se
char slovo1; uspoređuju na temelju abece-
char slovo2; de, ali to nije baš tako.
cout << "Unesite prvo slovo." << endl;
cin >> slovo1; Ovaj program dobro radi ako
cout << "Unesite drugo slovo." << endl; uspoređujemo samo velika ili
cin >> slovo2; samo mala slova.

if (slovo1 < slovo2)
{

cout << "Prvo slovo je prije po abecedi." << endl;
}
else
{

cout << "Drugo slovo je prije po abecedi." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Zašto na taj način ne možemo uspoređivati velika i mala slova?

Zato što računalo smatra da velika slova dolaze prije malih. Ako želi-
mo napisati program koji sva slova raspoređuje po abecedi, morali
bismo najprije ustanoviti je li neko slovo veliko ili malo, odnosno prog-
ram bi morao biti nešto složeniji. (Pokušajmo ga napisati.)

232 PRO - MIL

C++ programiranje za apsolutne početnike

#include <cstdlib> Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program
#include <iostream>
#include <string> Mogla bi nas zbuniti
uporaba znaka " i zna-
using namespace std; ka '.

int main() Pravilo je jednostavno,
{ jedno slovo piše se u
obliku 'a', a više slova u
char slovo = 'A'; obliku "Ovo je tekst.".
char NizSlova[18] = "Ovo je niz slova.";
cout << "Jedno slovo je " << slovo << endl; odluke
cout << "Tekst je: " << NizSlova << endl;
cout << endl;
system("PAUSE");
return 0;
}

#include <cstdlib> Polja
#include <iostream>
#include <string> Sažimanje Veliki pro- Objekti Obrada teksta

using namespace std; Slovima možemo do-
davati ili oduzimati
int main() brojeve.
{
grami
char slovo;
cout << "Unesite slovo." << endl; koda
cin >> slovo;
slovo = slovo - 1;
cout << "Prethodni znak je " << slovo << endl;
slovo = slovo + 2;
cout << "slijedeci znak je " << slovo << endl;
cout << endl;
system("PAUSE");
return 0;
}

PRO - MIL 233

Obrada teksta

Obrada string objekata

Do sada smo uglavnom vidjeli operacije koje se mogu provoditi nad jednim slo-
vom spremljenim u char varijablu ili char polje. Pogledajmo sada operacije nad
većim tekstom spremljenim u objekt string klase.

#include <cstdlib> Objekte string klase možemo jed-
#include <iostream> nostavno zbrojiti i rezultat zbraja-
#include <string> nja spremiti u treći objekt.

using namespace std;

int main()
{

string tekst1 = "Ovo je prvi tekst.";
string tekst2 = " Ovo je drugi tekst.";
string tekst3;
tekst3 = tekst1 + tekst2;
cout << tekst3 << endl;
cout << endl;
system("PAUSE");
return 0;
}

234 PRO - MIL

C++ programiranje za apsolutne početnike

#include <cstdlib> Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program
#include <iostream>
#include <string> Objekti klase string odluke
mogu se međusobno
using namespace std; uspoređivati.

int main() U ovom programu us-
{ poređujemo jesu li jed-
naki.
string tekst1;
string tekst2; Polja
cout << "Unesite prvu rijec." << endl;
cin >> tekst1;
cout << endl;
cout << "Unesite drugu rijec." << endl;
cin >> tekst2;
cout << endl;
if (tekst1 == tekst2)
{

cout << "Rijeci su jednake." << endl;
}
else
{

cout << "Rijeci nisu jednake." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Sažimanje Veliki pro- Objekti Obrada teksta

grami

koda

PRO - MIL 235

Obrada teksta

#include <cstdlib> Dva objekta klase string mo-
#include <iostream> žemo uspoređivati i tako da
#include <string> ispitujemo je li prvi manji od
drugog.
using namespace std;
Ostaje nejasno u kojem smis-
int main() lu se ispituje je li prvi manji od
{ drugog.

string tekst1; Očito se ne ispituje količina
string tekst2; slova, nego se objekti rangira-
cout << "Unesite prvu rijec." << endl; ju po abecedi, ab je po abece-
cin >> tekst1; di nakon aaaaa, pa u tome
cout << endl; smislu ab nije manje nego je
cout << "Unesite drugu rijec." << endl; veće od aaaaa.
cin >> tekst2;
cout << endl;
if (tekst1 < tekst2)
{

cout << "Prva je manja." << endl;
}
else
{

cout << "Prva nije manja." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

Kao i kod char polja, sustav je PRO - MIL
prilično primitivan i dobro radi
jedino ako se ne miješaju veli-
ka i mala slova, budući da ra-
čunalo smatra da su sva velika
slova prije malih, pa su u tom
smislu manja od malih.

Zato računalo smatra da je AB
manje od aaaaa.

236

C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Moguće su i složenije manipulacije nad tekstom. Ponovno pogledajmo nared-
bu size() koju smo vidjeli na početku ovog poglavlja. Omogućuje nam određi-
vanje broja znakova koje sadrži tekst. Pri tome imajmo na umu da računalo i
prazno mjesto između riječi smatra jednim znakom.

program

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()

{

string odgovor;

getline(cin, odgovor); odluke

cout << "Tekst sadrzi " << odgovor.size() << " znakova." << endl;

cout << endl;

system("PAUSE");

return 0; Naredba size().
}

Polja

Sažimanje Veliki pro- Objekti Obrada teksta

grami

koda

PRO - MIL 237

Obrada teksta

Ovaj program pretražuje sadržaj objekta tekst i traži pojavljuje li se u tom objektu
sadržaj objekta trazi. Ako se pojavljuje, obavještava nas na kojoj poziciji započi-
nje traženi tekst. (Prva pozicija nema broj jedan nego broj nula.)

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{

string tekst;
string trazi;
int pozicija;
cout << "Unesite tekst." << endl;
getline(cin, tekst);
cout << endl;
cout << "Sto trazim?" << endl;
getline(cin, trazi);
cout << endl;
pozicija = tekst.find(trazi);
if (pozicija != string::npos)
{

cout << "Pocetak je na " << pozicija << ". poziciji." << endl;
}
else
{

cout << "Nema trazene rijeci." << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

238 PRO - MIL

C++ programiranje za apsolutne početnike

Ovom naredbom utvrđujemo poziciju traženog teksta, a rezultat spremamo u Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
varijablu pozicija.

Varijabla u koju spre- pozicija = tekst.find(trazi);
mamo rezultat.

program

Naziv objekta u kojem se nalazi Naredba za Objekt koji pre-
tekst koji pretražujemo. pretraživanja. tražujemo.

Ovom naredbom provjeravamo je li tražena riječ nađena u pretraživanom ob-
jektu.

if (pozicija != string::npos) Ovom naredbom dobivamo odluke
oznaku koja označava da tra-
U varijabli pozicija nalazi se re- žena riječ nije nađena.
zultat pretraživanja objekta.
Uspoređujemo rezultat pretra-
živanja u pozicija varijabli i
obavijest da tražena riječ nije
nađena.

Polja

Sažimanje Veliki pro- Objekti Obrada teksta

Problem ovog programa, grami
odnosno ove naredbe, je u
tome što će pronaći samo koda
prvo pojavljivanje neke rije-
PRO - MIL či, ako se ista riječ više puta
pojavljuje u tekstu.

Želimo li ispitati sva pojavlji-
vanja neke riječi, morat će-
mo napisati malo složeniji
program.

239

Obrada teksta

Ovaj program radi sličan posao kao i prethodni, ali pretraživanje započinje od
kraja teksta. Ako tražimo riječ koja se pojavljuje više puta, ovaj program naći će
posljednje pojavljivanje.

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main() Program je u potpunosti identi-
{ čan prethodnome, samo što
ovdje umjesto naredbe find
string tekst; imamo naredbu rfind.
string trazi;

int pozicija; Time smo računalu naredili da
cout << "Unesite tekst." << endl; pretraživanje započne od kraja
getline(cin, tekst); teksta koji se nalazi u objektu
cout << endl; tekst.
cout << "Sto trazim?" << endl;

getline(cin, trazi);

cout << endl;

pozicija = tekst.rfind(trazi);

if (pozicija != string::npos)

{

cout << "Pocetak je na " << pozicija << ". poziciji." << endl;

}

else

{

cout << "Nema trazene rijeci." << endl;

}

cout << endl;

system("PAUSE");

return 0;

}

240 PRO - MIL

C++ programiranje za apsolutne početnike

#include <cstdlib> Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj program
#include <iostream>
#include <string>

using namespace std;

int main() Ovaj program smo tako korigirali da

{ smo, iako s naredbom find započi-
string tekst;
njemo pretraživanje s lijeve strane,
string trazi;
pronašli drugo pojavljivanje tražene
int pozicija;
riječi.
cout << "Unesite tekst." << endl;

getline(cin, tekst);

cout << endl;

cout << "Sto trazim?" << endl; odluke

getline(cin, trazi);

cout << endl;

pozicija = tekst.find(trazi,6);

if (pozicija != string::npos)

{

cout << "Pocetak je na " << pozicija << ". poziciji." << endl;

}

else

{ Polja

cout << "Nema trazene rijeci." << endl;

}

cout << endl;

system("PAUSE"); pozicija = tekst.find(trazi,6); Sažimanje Veliki pro- Objekti Obrada teksta
return 0;

}

U već poznatu naredbu find dodali smo broj 6 čime smo naredili računalu da grami
pretraživanje objekta tekst započne od znaka na poziciji 6.
koda
Budući da prva riječ radi počinje na 5, računalo je našlo drugo pojavljivanje
riječi radi.

Pomoću ove naredbe napravit ćemo program koji će pronaći sva pojavljiva-
nja neke riječi, a ne samo prvo ili posljednje.

PRO - MIL 241

Obrada teksta
Ovaj program može pronaći svako pojavljivanje neke riječi u nekom tekstu.

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{ U ovom programu koristimo nared-
bu find, a pozicija početka pretraži-
string tekst;
vanja nije određena brojem, nego
string trazi; sadržajem varijable trenutno.
int duljina;

int trenutno = 0; Varijabla trenutno je na početku 0,

int polozaj; da bi prvo pretraživanje počelo od

cout << "Unesite tekst." << endl; početka teksta. Ako na nekoj pozi-

getline(cin, tekst); ciji pronađemo traženu riječ, vari-

cout << endl; jablu trenutno uvećavamo za tu

cout << "Sto trazim?" << endl; poziciju + 1, da bi novo pretraživa-

getline(cin, trazi); nje počelo nakon početka već na-

cout << endl; đene riječi i da bi se eventualno

duljina = tekst.size(); pronašla nova riječ, a ne ponovo

while (trenutno < (duljina + 1))
{ ista.

polozaj = tekst.find(trazi,trenutno);

if (polozaj != string::npos)

{

cout << "Nalazi se na " << polozaj << ". mjestu." << endl;

trenutno = polozaj + 1;

}

else Budući da smo došavši do ove toče već

{ prilično napredovali u vještini programira-

trenutno = duljina + 1; nja, ovaj put je objašnjenje funkcioniranja

} programa nešto skromnije.

}

cout << endl; Pokušajmo shvatiti kako funkcionira prog-

system("PAUSE"); ram i pokušajmo ga korigirati tako da ispiše

return 0; adekvatnu obavijest, ako se tražena riječ

} uopće ne pojavljuje. Pokušajmo isti prog-

ram napisati korištenjem rfind naredbe.

242 PRO - MIL

C++ programiranje za apsolutne početnike

Na neku poziciju unutar teks- Petlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj
ta možemo dodati tekst.

#include <cstdlib> program
#include <iostream>
#include <string> Naredba za dodavanje teksta. odluke
Sadržaj koji dodajemo.
using namespace std;

int main()
{

string tekst = "Ovo je tekst.";
string umetak = " moj";
tekst.insert(6,umetak);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}

Objekt u koji dodajemo tekst. tekst.insert(6,umetak);

Polja

Pozicija na koju dodajemo tekst.

#include <cstdlib> Sažimanje Veliki pro- Objekti Obrada teksta
#include <iostream>
#include <string>

using namespace std;

int main()

{

string tekst = "Ovo je tekst.";

tekst.insert(6," dobar"); grami

cout << tekst << endl;

cout << endl;

system("PAUSE");

return 0; Naredba insert može se napisati koda
} i na ovaj način.

PRO - MIL 243

Obrada teksta
Dio teksta spremljenog u objekt klase string možemo obrisati erase naredbom.

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()
{

string tekst = "Ovo je dobar tekst.";
tekst.erase(7,6);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}

Pozicija od kojem po-
činje brisanje.

Naredba za brisanje.

Objekt u kojem brišemo. tekst.erase(7,6);

Broj znakova koje će-
mo obrisati.

244 PRO - MIL

C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Naredbom replace možemo dio teksta koji se nalazi u objektu klase string
zamijeniti nekim drugim tekstom.

program

#include <cstdlib> odluke
#include <iostream>
#include <string> Pozicija od koje zapo- Polja
činje zamjena teksta.
using namespace std;

int main()
{

string tekst = "Ovo je dobar tekst.";
string drugi = "dodatan";
tekst.replace(7,5,drugi);
cout << tekst << endl;
cout << endl;
system("PAUSE");
return 0;
}

Naredba za zamjenu teksta. Koliko ćemo znakova Sažimanje Veliki pro- Objekti Obrada teksta
zamijeniti.

Objekt u kojem mijenja- tekst.replace(7,5,drugi);
mo dio teksta.

grami

Sadržaj kojim ćemo zamijeniti tekst u objektu tekst. Zamijenit ćemo 5 znako- koda
va, počevši od sedmog sa sadržajem objekta drugi. Umjesto objekta drugi
mogli bismo staviti i tekst unutar navodnika.

PRO - MIL 245

Obrada teksta

Premještanje teksta iz char polja u string

Postavlja se pitanje bismo li mo-
gli tekst iz jednog oblika pretvoriti
u drugi, ovisno o tome koji oblik
nam je pogodniji za obradu.

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main()

{ Ovdje, na način koji smo već vidjeli u ovom pog-

char niz[255]; lavlju, ime unosimo u char polje i provjeravamo

string tekst; jesu li uneseni brojevi ili slova. Ako su uneseni

tekst.reserve(256); brojevi, unos se ponavlja. Naredba isdigit ne bi

int x; radila da smo koristili objekt klase string.

int p;

do

{

cout << "Unesite vase ime." << endl;

cout << endl;

cin >> niz;

x = 0;

p = 1;

while (niz[x] != '\0') Ovdje tekst iz polja tipa
{ char premještamo u ob-
jekt klase string koji smo
if (isdigit(niz[x])) nazvali tekst.
{

p = 0;

} To smo učinili da bismo
x = x + 1; mogli koristiti size nared-
} bu.
}

while (p == 0);

cout << endl;

tekst = niz;

cout << "Ime " << tekst << " sadrzi " << tekst.size() << " slova." << endl;

cout << endl;

system("PAUSE"); Naredba niz.size nije dozvoljena. Naredba
return 0; size radi jedino s objektima, ali ne i s poljima.
}

246 PRO - MIL

C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Premještanje teksta iz stringa u char polje

Moguće je i tekst iz objekta klase string premjestiti u polje char tipa, ali je na-
redba kojom to izvodimo nešto složenija.

program

#include <cstdlib> Formiramo objekt klase string i u odluke
#include <iostream> njega spremamo tekst “Tekst”.
#include <string> Polja
Tekst iz objekta selimo u char
using namespace std; polje koje smo nazvali polje. Sažimanje Veliki pro- Objekti Obrada teksta

int main() Ispisujemo sadržaj polja da bis-
{ mo vidjeli nalazi li se u njemu
doista “Tekst”.
string tekst = "Tekst.";

char *polje = (char*)tekst.c_str();

cout << polje[0] << endl;
cout << polje[1] << endl;
cout << polje[2] << endl;
cout << polje[3] << endl;
cout << polje[4] << endl;
cout << polje[5] << endl;

cout << endl;
system("PAUSE");
return 0;
}

char *polje = (char*)tekst.c_str(); grami

Naziv char polja u koje ćemo Naziv objekta iz kojeg tekst seli- koda
spremiti tekst iz objekta. U na- mo u char polje. U našem sluča-
šem slučaju naziv je polje. ju naziv objekta je tekst.

PRO - MIL 247

Obrada teksta

Spremanje teksta u datoteku

Pomoću objekata klase string možemo formirati liste i te liste možemo spremati u
datoteke na sličan način na koji smo spremali brojčane liste

#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()

{

int x; Kad smo spremali brojeve, između
string tekst[8]; brojeva stavljali smo prazno mjesto
ofstream izlaz("podaci.txt"); da bismo znali gdje završava jedan
for (x = 0; x < 8; x = x + 1) broj, a počinje drugi.
{

getline(cin, tekst[x]); U ovom programu prazna mjesta
} nisu prikladna za razlikovanje sadr-
for (x = 0; x < 8; x = x + 1) žaja pojedinih ćelija jer se prazna
{ mjesta nalaze između riječi.

izlaz << tekst[x];

izlaz << " # ";

}

cout << endl;

cout << "Spremanje je gotovo." << endl;

cout << endl;

system("PAUSE");

return 0;

}

Umjesto praznih mjesta, iz- Na ovoj slici vidi se samo
među sadržaja pojedinih će- dio datoteke podaci.txt.
lija stavljamo “ # “
Ta oznaka će nam pomoći PRO - MIL
prilikom čitanja datoteke.

248

C++ programiranje za apsolutne početnikePetlje Donošenje Grafika Varijable Naš prvi Uvod Sadržaj

Programom sličnim programu za čitanje datoteka u kojima se nalaze brojevi
čitat ćemo sadržaj datoteke u kojoj se nalaze tekstovi.

#include <cstdlib> program
#include <iostream>
#include <string> odluke
#include <fstream>
Oznaku # koristit ćemo Polja
using namespace std; da bismo utvrdili jesmo
li došli do kraja sadrža- Sažimanje Veliki pro- Objekti Obrada teksta
int main() ja jedne ćelije polja.
{ grami
Ovo rješenje je jednos-
int x; tavno, ali je manjkavo. koda
string tekst[8]; Ako bi netko prilikom
string privremeni; unosa teksta unio #
ifstream ulaz("podaci.txt"); oznaku, poremetio bi
for (x = 0; x < 8; x = x + 1) ispravno funkcioniranje
{ programa.

do Zbog toga bi program
{ za unos teksta trebalo
tako modificirati da ne
ulaz >> privremeni; dozvoljava unos # oz-
if (privremeni != "#") nake.
{
249
tekst[x] = tekst[x] + privremeni + " ";
}
}
while (privremeni != "#");
}
for (x = 0; x < 8; x = x +1)
{
cout << tekst[x] << endl;
}
cout << endl;
system("PAUSE");
return 0;
}

PRO - MIL

Objekti

250 PRO - MIL


Click to View FlipBook Version