Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Programer nikad ne može reći da je
"naučio zanat". Dobrom programeru učenje
mora postati navika.
Priča o programskim jezicima
Osnovni alat programera je njegovo znanje programskog jezika u kojem radi i njegova
sposobnost da ga primijeni na problem kojeg rješava. Ima ljudi koji tvrde da jezik kojim se
opisuje i rješava problem utječe na način razmišljanja programera. Zato barem površno
znanje drugih programskih jezika može pomoći da se problem sagleda iz nekog drugog kuta i
samim tim brže nađete bolje ili povoljnije rješenje.
Pragmatični programeri predlažu da svake godine treba naučiti jedan programski jezik i pri
tom izabrati nešto sa radikalno drukčijim pristupom programiranju jer od sličnih jezika osim
nove sintakse nećete naučiti puno novog.
Naravno, u godini dana se ne može postati majstor u nekom programskom jeziku, ali ako ste
ozbiljno pokušali shvatiti pristup kojeg autor jezika ima u rješavanju problema tad ste sigurno
skupili znanje koje će vam biti korisno i u svakodnevnoj praksi.
Prema TIOBE indeksu najpopularniji programski jezici danas su:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Osnovna struktura programa u programskom
jeziku C++
Pojam struktura programa odnosi se na pravila kojih se moramo pridržavati prilikom pisanja
programa. Ako se tih pravila ne pridržavamo, postupak prevođenja (kompajliranja) programa
neće završiti uspješno i program neće raditi.
Jedno od pravila specifičnih za C/C++ je da razlikuje velika i mala slova. Sve funkcije i
ključne riječi u C++ pišu se malim slovima. Nije isto jeste li varijabli u koju ćete spremati,
primjerice duljinu stranice trokuta, dodijelili ime a ili A.
Ako ste u početku najavili da ćete koristiti varijablu a, a u programu koristite
naziv A, kompajler će javiti da varijabla A nije najavljena (deklarirana).
Velika i mala slova
Svaki C++ program mora sadržavati funkciju main (), ona označava mjesto na kojem počinje
izvršavanje programa.
Početak i kraj funkcije (ili bloka naredbi) označava se vitičastim zagradama. Početak svake
funkcije označava se otvorenom vitičastom zagradom {, dok se kraj označava zatvorenom
vitičastom zagradom }. Program napisan u C++ može biti sastavljen od niza povezanih
funkcija čiji broj nije ograničen.
Na tipkovnici vitičaste zagrade dobiju se kombinacijom tipki:
AltGr + B = {, AltGr + N = }. AltGr = ako nije posebno označen = desni Alt na tipkovnici.
Glavna funkcija
Kraj naredbe u C++ označava se oznakom ; (“točka-zarez”). Izostavljanje oznake kraja
naredbe/i rezultirat će pogreškom tijekom prevođenja programa. Postavljanje ; prije kraja
naredbe (unutar složenih naredbi) rezultirati će prijevremenim završetkom naredbe i utjecati
će na rezultat. ; označava kraj jedne i početak druge naredbe.
Oznaka kraja naredbi (;)
Funkcije potrebne u većini programa (standardne funkcije) nisu sastavni dijelovi C++, već
dolaze s prevoditeljem. Razvrstane su prema namjeni i spremljene u biblioteke funkcija.
Kada je potrebno koristiti funkciju iz određene biblioteke (ladice), ona se “otvori”
naredbom #include i programu će biti dostupne sve funkcije iz nje.
Biblioteke funkcija
Biblioteke funkcija nastale su standardizacijom C-a, pa je dovoljno na početku programa
najaviti da će se koristiti određena biblioteka i sve njezine funkcije bit će dostupne kroz cijeli
program. Tako se, primjerice biblioteka u kojoj se nalaze funkcije za ulaz i izlaz podataka
naziva stdio.h, matematičke funkcije nalaze se u biblioteci math.h, a funkcije za rad sa
znakovnim varijablama u biblioteci string.h.
Korištenje određene biblioteke funkcija najavljuje se pretprocesorskom naredbom #include
koja se piše na početku programa prije funkcije main().
#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
int a, b, ostatak, kolicnik;
cout<<"Upišite broj koji želite podjeliti: ";
cin>> a;
cout<<"Upišite broj s kojim dijelite: ";
cin>> b;
kolicnik = a / b;
ostatak = a % b;
cout<<endl;
cout<<a<<" : "<<b<<" = "<< kolicnik<<" sa ostatkom: "<<ostatak<<endl;
system("pause");
return 0;
}
Linije programa koje počinju s znakom # nisu programske naredbe, već pretprocesorske
naredbe koje se izvršavaju prije prevođenja (kompajliranja). Prevodilac ili kompajler je
zaseban program koji je "zadužen" za prevođenje naredbi programskog jezika u strojni jezik.
Naredba #include "iostream" poziva datoteku iostream.h koja sadrži skup naredbi zaduženih
za komunikaciju s programom, a #include "stdafx.h" označava da kompajler učitava samo
predkompajlirane podatke a ne sve podatke zaglavlja. Naredbom using namespace std;
obavještavamo prevoditelja da će se koristiti standardne nazive naredbi.
Tipovi podatakaSvakoj varijabli koju koristimo u programu osim simboličkog imena mora pridijeliti i oznaka
tipa podatka koji će u nju biti pohranjen. Po oznaci tipa računalo "zna" koliko mjesta u
memoriji treba predvidjeti, koji su rasponi vrijednosti te kakve su operacije s podatkom te
vrste moguće. Razlikuju se osnovni i ostali tipovi podataka.
U osnovne tipove podataka ubrajaju se:
o brojevi (cijeli i realni),
o znakovi,
o logički podaci,
o konstante.
Cijeli brojevi
Cijeli broj može biti prikazan sa ili bez predznaka. Ako je podatak cijeli broj (integer),
njegova oznaka tipa je int. Varijabli označenoj s int može biti pridružen samo cijeli broj.
Primjer: int a;
int a1, b1, c1;
int _str, prvi_br, p;
Realni brojevi
Ako je podatak realni broj, njegova oznaka tipa je float. Varijabli označenoj s float može se
pridružiti realni broj.
Primjer: float a;
float a1, b1, c1;
float _str, prvi_br, p;
Konstante
U programima se često rabe veličine čije se vrijednosti ne smiju mijenjati. Takve veličine
nazivamo konstantama, primjerice fizikalne ili matematičke konstante.
Brojevne konstante, pohranjuju se u obliku jednog od osnovnih brojevnih tipova podataka.
Realne brojevne konstante postaju tipa double, a cjelobrojne tipa int.
Brojevne konstante spremaju se u rezervirana mjesta u memoriji. Za najavu se koristi ključna
riječ const koja se dodaje ispred oznake tipa podatka.
Primjer: const double Pi = 3.14159265358973;
const char = „Pozdrav”;
const int br_razreda = 5;
Znakovi
Ako je podatak znak, njegova oznaka je tipa char. Varijabli označenoj s char može se
pridružiti:
o jedan znak unutar jednostrukih navodnika
o ASCII vrijednost tog znaka (dekadska protuvrijednost).
char slovo1 = 65;
Logički podaci mogu poprimiti samo jednu od dvije vrijednosti i to: true (1) ili false (0).
Varijabla za pohranu logičkog podataka je tipa bool. Pri ispisu se true pretvara u 1, a false u 0.
Logički podaci
Primjer: char Ime = „Pero”;
char slovo = „A”;
Za pohranu teksta (niza od jednog ili više znakova) rabe se znakovni nizovi (character
strings). Sadržaj znakovnog niza koji se unosi izravno u programsku naredbu navodi se unutar
para dvostrukih navodnika. ”Primjer znakovnog niza”
Znakovni niz
Datoteke zaglavlja, sadržefunkcije nužne za daljnji rad
Tijelo programa
Funkcija main je jedina funkcija koju mora imati svaki C++
program. Ako nema funkcije main, program prevoditelj će
javiti pogrešku jer “ne zna” s kojom funkcijom započeti.
#include ”stdafx.h”
#include ”iostream”
using namespace std;
int main()
{
cout << "Pozdrav" << endl;
system ("pause");
return 0;
}
U Visual St. funkciju main može se pozvati i kao: int _tmain() iliint _tmain(int argc, _TCHAR* argv[]) kao proširenu funkciju.
Varijable i konstante
Uz pojam varijable uvijek su vezani pojmovi tip i ime.
Tip označava skup vrijednosti varijable, veličinu zauzeća memorije i operacije koje se mogu
primijeniti.
Ime predstavlja oznaku adrese varijable u memoriji pa se zove i referenca varijable ili
referenca memorijskog objekta.
Dodjeljivanje oznake tipa nekoj varijabli naziva se deklaracija varijable. Tip varijable mora
biti deklariran (najavljen) prije nego se ona uporabi u programskim iskazima.
Svi programi (C++) sastoje se od funkcija i varijabli. Funkcije sadrže instrukcije koje
određuju koje će operacije biti izvršene a varijable služe memoriranju podataka.
Izvršavanje programa počinje izvršavanjem funkcije main.
Ime varijable/konstante – je niz znakova određen tako da varijabla/konstanta bude
prepoznatljiva.
o Ime mora počinjati slovom ili _ (podcrta)
o Sadrži samo slova, brojeve i _ (podcrta)
o Mora sadržati bar jedno slovo ili znamenku ako počinje s _
o Ne može sadržati više od 1023 znaka
o Ne smiju se rabiti službene riječi programskog jezika
Primjer: Ime Ispravno
_1A Ispravno
1A Neispravno – počinje znamenkom
A$1 Neispravno – sadrži znak ($) koji ima određeno značenje
Nekoliko je općih pravila koje treba poštivati pri određivanju imena:
Zadavanje imena
Deklaracija (najava) varijable
int main(){
}
Tip varijable
Ime varijable Točka-zarez završava jednu naredbu
int BrojPrvihRazreda;
Pohranjivanje vrijednosti u varijablu
int BrojPrvihRazreda ;
Pohrani vrijednost s desna u navedenu
varijablu
BrojPrvihihRazreda = ;5
int main(){
} Vrijednost koja se pohranjuje
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
a = 5;
b = 6;
c = a + b;
c = c + (b - a);
c = c * 2;
cout<< c <<endl<<endl;
system("Pause");
return 0;
}
Deklaracija (najava) konstante
Za razliku od varijable, konstanta ne dopušta promjenu jednom definirane vrijednosti.
Najčešće se upotrebljava da bi se u kodu izbjeglo višestruko pisanje teško pamtljivih
vrijednosti. Za deklariranje konstanti upotrebljava se rezervirana riječ Const. Konstanta mora
biti definirana kao tip podataka.
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
const string ime = "Konstante";
const int broj = 1;
int a, b, c;
cout << "Primjer za "<< ime <<endl<<endl;
a = 5;
b = 6;
c = a + b;
c = c + (b - a);
c = c * 2;
cout<< c <<endl<<endl;
cout << "Uvećajmo "<< c <<" za "<< broj <<" Pa je sada c ="<< c + broj <<endl;
system("Pause");
return 0;
}
Sa prefiksom const može se deklarirati konstantu sa specifičnim tipom na isti način kao i
varijablu. primjerice: const int bodovi = 100;
Ovako napisane konstante izvode se kao i varijable ali se njihova vrijednost ne može
mijenjati nakon definiranja.
Doslovne konstante
Doslovne konstante izražavaju određenu vrijednost unutar programa.
Kada definiramo: a = 6.8 u dijelu koda gdje je vrijednost napisana predstavlja doslovnu
konstantu. Ovako definirana konstanta može promijeniti vrijednost.
Deklarirane konstante (const)
Definirane konstante (#define)
Ovaj tip konstante rabimo kada želimo definirati imena konstanti koje često koristimo bez da
koristimo biblioteke (primjerice matematičke).
To postižemo koristeći #define pred procesorsku naredbu. Sintaksa je: #define ime vrijednost
#define PI 3.14159265
#define Mnozi (x, y) x * y
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int x, y;
system("CLS");
cout << "Primjer za dodjelu vrijednosti"<<endl;
x = 100;
cout << "x = "<< x <<endl;
y = x + 50;
cout << "y = "<< y <<endl;
system("Pause");
return 0;
}#include "stdafx.h"
#include<iostream>
using namespace std;
#define umnozak(x,y) x*y;
#define ime "Konstante tipa #define";
int main()
{
float a, b;
cout << "Primjer za "<< ime; cout<<endl<<endl;
cout <<"Unesite vrijednost a: ";
cin >> a;
cout <<endl<<"Unesite vrijednost b: ";
cin >> b;
cout << endl << a <<" * "<< b <<" = "<< umnozak (a,b);
cout<<endl<<endl;
system("Pause");
return 0;
}
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
const float pdv = 25.00;
float racun,Rpdv;
cout << "Unesite iznos računa: ";
cin>>racun;
Rpdv=racun+(racun * pdv)/100;
cout << endl<< "Račun = "<< racun<< " kn";
cout << endl<< "PDV = "<< pdv << "%";
cout << endl<< "Račun + PDV = "<< Rpdv << " kn"<< endl<< endl;
system("Pause");
return 0;
}
Funkcije za ispis i unos podataka
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << "Pozdrav";
system ("PAUSE");
return 0;
}
Naredba cout
Naredbom cout ispisuje se tekst, vrijednosti matematičkih izraza, vrijednosti varijabli i
konstanti. Tekst koji se želi ispisati navodi se unutar navodnika, a varijable čije vrijednosti
želimo ispisati pišemo iza naredbe.
Naredbom cout << a; ispisuje se na zaslonu računala vrijednost varijable a.
Naredbom cout << 2+2; ispisuje se broj 4 jer je to vrijednost matematičkog izraza 2+2.
Vrijednosti varijabli ispisujemo navodeći ih iza naredbe cout.
Naredbom: cout << "Pozdrav"; ispisat će se poruka Pozdrav na zaslonu računala.
Naredbom cin unosimo podatke s tipkovnice i pridružujemo ih, deklariranim, varijablama u
programu. Varijable kojima želimo pridružiti vrijednosti zapisujemo iza naredbe cin.
Naredba cin
Primjerice naredbom cin >> a; uz pomoć tipkovnice, pridružujemo varijabli a broj ili slovo
ovisno o deklaraciji, dok naredbom cin >> a >> b pridružujemo vrijednosti varijablama a i b.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a;
cout<< "Unesi broj: "; /*ispis poruke*/
cin >>a; /*unos broja*/
cout << "Kvadrat broja a je "<< a * a; /*ispis kvadrata*/
cout << endl; /*ispis praznog retka*/
system ("PAUSE");
return 0;
}
Naredba za dodjeljivanje vrijednosti
U C++ znak ‘=’ nećete više promatrati kao znak jednakosti već kao o znaku dodjele.
Operator dodjele je znak jednakosti (=) koji operandu na lijevoj strani dodjeljuje vrijednost sa
desne strane. To znači sve što je na desnoj strani procesuirano (zbrajanje, oduzimanje ...),
rezultat toga bit će dodijeljen lijevoj strani.
Ovakvo razmišljanje drugačije je od onoga na koje smo do sada navikli.
Sada izraz a = b + c čitamo: “a poprima vrijednost zbrajanja b i c”.
U C++ dobar je i izraz x = y = z = 3 + 4 što u normalnoj algebri ne postoji.
Pošto se znak jednakosti, odnosno operator dodjele zove i lvalue (‘l’ je skraćeno od eng. left)
jer se pridruživanje vrši s desna prema lijevo, ovaj izraz čitamo:
“rezultat 3 + 4 dodjeljuje se varijabli z, vrijednost varijable z varijabli y, vrijednost varijable
y varijabli x”.
Int rukomet, nogomet;
rukomet = 5;
nogomet = rukomet;
Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što i nogomet.
No, u C++ ovo čitamo: “varijabla rukomet poprima vrijednost 5 a varijabla nogomet poprima
vrijednost varijable rukomet.”
Kao primjer kako ovo (=) nije znak jednakosti, pogledajte sljedeći izraz potpuno validan u
C++ jeziku.
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int x, y;
system("CLS");
cout << "Primjer za dodjelu vrijednosti" << endl;
x =100;
cout << "x = "<< x << endl;
y = x + 50;
cout << "y = "<< y << endl;
system("Pause");
return 0;
}
Aritmetičke operacije i pretvorba tipova podataka
Aritmetički binarni operatori
Operacija Operator
Zbrajanje +
Oduzimanje -
Množenje *
Dijeljenje /
Modularno dijeljenje
(ostatak cjelobrojnog dijeljenja)%
7 % 2 = 1 jer je 7 podijeljeno s 2 jednako
3, a ostatak je jedan - varijable
definirane kao int.
7 / 2 = 3 - varijable definirane kao int.
7 / 2 = 3.5 - varijable definirane kao float.
Aritmetički binarni operatori pišu se između dva operanda: a = 3 * 5; x = a – b; ost = 7% 2; ...
Aritmetički unarni operatori
Operacija Operator
Mijenjanje predznaka -
Uvećanje broja za 1 (inkrement/iranje) ++
Umanjenje broja za 1 (dekrement/iranje) --
Aritmetički unarni operatori pišu se ispred ili iza operanda. Pri uporabi unarnih operatora za
uvećanje i umanjenje važno je obratiti pozornost na položaj operatora. Djelovanje operatora
ovisi o tome nalazi li se operator prije (prefiksni) ili poslije (postfiksni) varijable. Prefiksni
operator najprije djeluje na varijablu sa svoje desne strane i zatim vraća tako promijenjenu
vrijednost, dok postfiksni najprije vraća postojeću vrijednost, a tek zatim djeluje na varijablu
sa svoje lijeve strane.
Unarni operatori Sadržaj varijabli po izvršenju naredbi
a = 1;
b = ++a + 5;
a = 2 => b = 7
Prvo se poveća vrijednost varijable a za 1 a zatim se računa
vrijednost izraza.
a = 1;
b = a++ +5;
a = 2 => b = 6
Prvo se računa vrijednost izraza, a nakon toga se povećava
vrijednost varijable a za 1.
Operatori obnavljajućeg pridruživanja
Operatori obnavljajućeg pridruživanja omogućuju kraći zapis nekih aritmetičkih izraza.
Sastoje se od odgovarajućeg aritmetičkog operatora i znaka jednakosti.
Aritmetički izrazi s operatorima
obnavljajućeg pridruživanja
Uobičajeni prikaz
aritmetičkih izraza
a + = 5 a = a + 5
a /= 5 – b a = a / (5 - b)
a -= b + 5 a = a - (b + 5)
a * = (b - c) + 5 a = a * ((b - c) + 5))
Inkrement (++) i dekrement (--)
Dodavanje i oduzimanje 1 postojećoj vrijednosti neke varijable vrlo su česti postupci u
programiranju. Postupak izvođenja ovih izraza je uzimanje stare vrijednosti varijable, izračun
nove uvećane ili umanjene vrijednosti za 1. Rezultat se sprema kao nova vrijednost varijable.
brojac = brojac + 1; ili brojac + +;
brojac = brojac – 1; ili brojac - -;
Uobičajeni zapis tih operacija je:
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int a, b, ostatak, kolicnik;
cout<<"Upišite broj koji želite podjeliti: ";
cin>> a;
cout<<"Upišite broj s kojim djelite: ";
cin>> b;
kolicnik = a / b;
ostatak = a % b;
cout<<endl;
cout<<a<<" : "<<b<<" = "<< kolicnik<<" sa ostatkom: "<<ostatak<<endl;
system("pause");
return 0;
}
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int a,b;
a = 1;
b = ++a +5;
cout <<"a = "<< a << endl;
cout <<"b = "<< b << endl;
system ("pause");
a = 1;
b = a++ +5;
cout << "a = "<< a << endl;
cout << "b = "<< b << endl;
system("pause");
return 0;
}
Aritmetički unarni operatori
Aritmetički binarni operatori#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int x, y;
x = y = 5;
x++; // increment
y--; // decrement
cout <<"x = "<< x << endl;
cout <<"y = "<< y << endl;
system ("pause");
return 0;
}
Inkrement i dekrement
Primjer
Potrebno je unijeti realni broj i pridružiti ga varijabli A.
Sadržaj varijable A prvo uvećati za 5, pa umanjiti za 8, na kraju pomnožiti s 3.
(Koristiti operatore obnavljajućeg pridruživanja i varijablu A, ne uvoditi pomoćne varijable!)
Ispis neka bude oblika:
Upisi zeljeni broj:
Sadrzaj varijable A se uvecava za 5. Sada A iznosi: ....
Od trenutnog sadrzaja varijable A se oduzima 8. Sada A
iznosi: ....
Trenutni sadrzaj varijable A se mnozi sa 3. Sada A
iznosi: ....
Primjer
Pretvorba tipova podataka
Kada se u izrazu nađe više različitih tipova podataka, tip rezultata ovisit će o definiranim
pravilima za pretvorbu podataka. Pravila pretvorbe različitih tipova podataka u C++
orijentirana su prema višem tipu podataka.
int rez = 1.07 + 2;
Dvije vrste pretvorbe podataka u C++ su:
o automatska (implicitna)
o zadana (eksplicitna)
rez = 3.
Za automatsku pretvorbu vrijedi:
short int → int → unsigned int → long int → unsigned long int → float → double → long double
Varijabla (operand) podatkovnog tipa koji je manjeg raspona od podatkovnog tipa druge
varijable (operanda) u izrazu interno se pretvara u varijablu podatkovnog tipa većeg
brojevnog raspona.
Prikaz standardne automatske pretvorbe jednog od operanda u tip drugog operanda:
Tip operanda Automatska pretvorba
Jedan od operanda je tipa long double. Drugi operand se pretvara u long double.
Prethodni uvjet ne vrijedi, a jedan od operanda je tipa double.
Drugi operand se pretvara u double.
Prethodni uvjeti ne vrijede, a jedan od operanda je tipa float.
Drugi operand se pretvara u float.
Prethodni uvjeti ne vrijede, niti jedan od operanda nije niti jednog realnog tipa.
Cjelobrojna pretvorba se obavlja prema sljedećim pravilima:
Ako prethodni uvjeti ne vrijede, tada se oba operanda pretvaraju u tip int.
Ako je jedan od operanda tipa unsigned long, tada se i drugi operand pretvara u unsigned long.
Ako prethodni uvjet ne vrijedi, a jedan od operanda je tipa long, a drugi tipa unsignedint, tada se oba operanda pretvaraju u tip unsigned long.
Ako prethodni uvjeti ne vrijede, a jedan od operanda je tipa long, tada se i drugi operand pretvara u tip long.
Ako prethodni uvjeti ne vrijede, a jedan od operanda je tipa unsigned int, tada se i drugi operand pretvara u tip unsigned int
int a;
unsigned long b;
float f, g;
double d;
g = a + f; // a se pretvara u float
d = a + b; // a i b se pretvaraju u unsigned long, zbrajanje se obavi u domeni unsigned long
i rezultat tipa unsigned long se pohrani u double.
Zadana pretvorba podataka ima viši prioritet od automatske.
Opći oblik deklaracije zadane pretvorbe (cast operator) glasi: (tip_podatka) operand;
Operand može biti varijabla ili izraz.
Za zadanu pretvorbu vrijedi:
a = (int) c;
b = (double) d + c;
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
float a;
a = 1 / 2;
cout << endl << "a = " << a << endl;
a = 1 % 2;
cout << endl<<"a = "<< a << endl;
a = (float) 1 / 2;
cout << endl <<"a = "<< a << endl;
system("pause");
return 0;
}
a = 1 / 2 => 0
a = 1 % 2 => 1
a = (float) 1 / 2 => 0.5
Primijer:
Naredba dodijele
int i=5;
float f=2.3;
f=i;
obrnuto: int i=5;
float f=2.3;
i=f;
Eksplicitna konverzija
(tip)<izraz>
float x;
x=2.3+4.2;
x=(int)2.3+(int)4.2;
x=(int)2.3*4.5;
x=(int)(2.3*4.5)
/* f će imati vrijednost 5.0*/
/* i će imati vrijednost 2*/
/* x će imati vrijednost 10*/
/* x će imati vrijednost 6.5 */
/* x će imati vrijednost 6 *//* x će imati vrijednost 9.0 jer zbog prioriteta operatora konverzije
prvo će biti izvršena konverzija broja 2.3 u 2 pa tek onda
izvršeno množenje. */
Kako izbijeći cjelobrojno dijeljenje ?
int a,b;
float c;
a = 5;
b = 2;
c = a/b;
c = (1.0*a)/b;
c = (0.0+a)/b;
c = (float)a/(float)b;
/* Cjelobrojno dijeljenje, c=2*/
/* Implicitna konverzija: 1.0*a je realan broj
pa priliko dijeljenja sa b dobije se realan rezultat c=2.5*/
/* Implicitna konverzija: (0.0+a) je realan broj
pa prilikom dijeljenja sa b dobije se realan rezultat c=2.5*/
/* Eksplicitna konverzija*/
Računala u svom radu upotrebljavaju jednostavnu logiku sa samo dvije vrijednosti:
Ako je uvjet istinit (true), vrijednost je 1;
Ako je uvjet lažan (false), vrijednost je 0.
Operator Značenje Primjer
> veći od 5 > 4
>= veći od ili jednak 5 >= x
< manji od 4 < 5
<= manji od ili jednak x <= 5
= = jednak 5 = = 5
!= nije jednak 5 != 4
Relacijski operatori (usporedbe)
Relacijski operatori su :
Logički operatori
Moguće je kombinirati i više od jednog uvjeta. To se postiže uporabom logičkih operatora.
Operator Značenje
&& I (AND), svi uvjeti moraju biti istiniti da bi rezultat bio istinit.
|| ILI (OR), najmanje jedan od uvjeta mora biti istinit da bi rezultat bio istinit.
! NE (NOT), negacija uvjeta.
Logički operatori su :
(a = = c) && (a > d) rezultat je istinit samo ukoliko je a jednak c i a veći od d.
(a = = c) || (a > d) rezultat je istinit ukoliko je bilo koji od uvjeta istinit.
Za rad s logičkim podacima, postoje logičke funkcije. Logičke se funkcije zapisuju logičkim
operatorima. Logički operatori mogu biti unarni i binarni.
Logički operatori
Oznaka operatora Funkcija Operator
! Negacija (unarni operator koji 1 pretvara u 0 i obratno) NOT
&& Logički I (binarni operator) AND
|| Logički ILI (binarni operator) OR
A B A && B
0 0 0
0 1 0
1 0 0
1 1 1
A B A || B
0 0 0
0 1 1
1 0 1
1 1 1
A ! A
0 1
1 0
Komentari
U datoteci izvornog kôda korisno je opisati što se kojim od dijelova kôda želi postići, što su
argumenti, objasniti deklaraciju varijabli i sl.
Takvi pomoćni opisi nazivaju se komentari. Komentari mogu kasnije pomoći programeru ili
nekomu tko mora mijenjati dijelove izvornog kôda da razumije što je zadaća pojedinog dijela
programa. Komentar započinje s dvostrukom kosom crtom //, a završava krajem reda. Može
biti napisan u istom redu s naredbom ili u zasebnom redu.
#include "cmath";
#include<iostream>
using namespace std;
int main()
{
//Ovo je komentar
float dijeli, dijeli1, ost,kol; // definirane varijable
int cjbr; // definirana varijabla cjelobrojnog tipa
cout<<"Unesi broj koji dijelis: ";
cin>>dijeli;
cout<<"Unesi broj s kojim dijelis: ";
cin>>dijeli1;
ost=fmod(dijeli, dijeli1); // ostatak dijeljenja
.......
system ("pause");
return 0;
}
Matematičke funkcijeC++ ima na raspolaganju već gotove funkcije razvrstane u odgovarajuće biblioteke. Većina
matematičkih funkcija pohranjena je u biblioteci cmath. Ako se želi rabiti neka od funkcija u
program treba uključiti biblioteku koja tu funkciju „čuva” pretprocesorskom
naredbom #include.
Matematičke funkcije
Deklaracija funkcije Opis
float abs (float x) Vraća apsolutnu vrijednost broja x.
float ceil (float x) Zaokružuje argument x na najbliži veći cijeli broj.
float floor (float x) Zaokružuje argument x na najbliži manji cijeli broj.
float fmod (float djeljenik, float djelitelj) Računa ostatak dijeljenja dva realna broja.
float pow (float baza, float eksponent) Računa potenciju: Xy.
float sqrt (float x) Računa kvadratni korijen argumenta x.
float sin (float x) Računa sinus argumenta x (x je kut zadan u radijanima).
float atan (float x) Računa arkus tangens argumenta x (kut je izražen u radijanima).
int rand() (% int x) Slučajni izbor broja do x
Neke matematičke funkcije:
#include "stdafx.h"
#include<iostream>
#include "cmath"
using namespace std;
int main()
{
float x, y, Ceil, Floor, Fmod, Pow, Sqrt, Sin, Atan,Rand;
x = -5.45; y=3;
x=abs(x);
cout <<"Abs = "<< x << endl;
Ceil = ceil (x);
cout <<"Ceil = "<< Ceil << endl;
Floor = floor (x);
cout <<"Floor = "<< Floor << endl;
Fmod = fmod (x, y);
cout <<"Fmod = "<< Fmod << endl;
Pow = pow (x, y);
cout <<"Pow = "<< Pow << endl;
Sqrt = sqrt (x);
cout <<"Sqrt = "<< Sqrt << endl;
Sin = sin (x);
cout <<"Sin = "<< Sin << endl;
Atan = atan (x);
cout <<"Atan = "<< Atan << endl;
Rand = rand() % 100; // Rand je u rangu od 0 to 99;cout <<"Rand = "<< Rand << endl;
system ("pause");
return 0;
}
Prioriteti izvršavanja operacija
o Svi operatori grupirani su hijerarhijski u grupe, prema svom prioritetu.
o Operatori višeg prioriteta izvršavaju se prije onih s nižim prioritetom.
o Kad imamo više operatora istog prioriteta, redoslijed izvršavanja određen je smjerom
asocijativnosti1 te grupe operatora.
o Obične zagrade ( ) služe za promjenu redoslijeda izvršavanja, tako da se uvijek prvo
računa izraz u zagradama.
1asocijativnost je osobina koju može posjedovati binarna operacija. Unutar izraza koji sadrži
dva ili više istih asocijativnih operatora u nizu, red kojim se operacije izvode nije bitan sve
dok je niz operanda nepromijenjen. To jest, premiještanije zagrada u takvom izrazu neće
utjecati na njegovu vrijednost.
(5 +2) + 1 = 5 + (2 + 1) = 8
Redoslijed računanja operacija u nekom izrazu određen je prioritetom pojedinih operatora.
Prioritet operacija
o Multiplikativni operatori (*, /, %) imaju viši prioritet od aditivnih (+, -)
o Unarni operator – (minus) promjene predznaka ima viši prioritet od svih binarnih.
o Operator pridruživanja = ima niži prioritet od većine ostalih operatora.
Za aritmetičke operatore vrijede standardna pravila prioriteta:
1. *, /, %
2. +, -
Ako u izrazu ima više operatora jednakog prioriteta, izračunavaju se slijeva nadesno. Izrazi u
okruglim zagradama imaju najveći prioritet.
Zaključak
Znakovi i znakovne funkcije (ctype.h)
Ako je podatak znak tada će njegova oznaka biti tipa char. Podatak tipa char je predstavljen
jednim znakom unutar jednostrukih navodnika ili ASCII vrijednošću tog znaka.
char slovoA = 'A';
char asciiA = 65;
Za pohranu znakovnog podatka u memoriji je predviđen 1 bajt (8 bitova).
Znamo da je je 28 = 256 što znači da je moguće prikazati 256 različitih znakova.
Znak se pohranjuje kao broj koji predstavlja ASCII vrijednost odabranog znaka.
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
char slovoA= 'A', asciiA = 65;
cout <<"SlovoA = "<< slovoA << endl;
cout <<"asciiA = "<< asciiA << endl;
system ("pause");
return 0;
}
slovoA = A
asciiA = A
#include "stdafx.h"#include<iostream>#include <string>using namespace std;
int main(){string ime,prez;int god1, god2;cout << "Tvoje ime je: ";cin>>ime;cout <<"Tvoje prezime je: ";cin>>prez;cout <<"Godina rodenja: ";cin>>god1; cout <<"Sada je godina: ";cin>>god2;cout <<ime<<" "<<prez<<" ima: "<<god2- god1<<"
godina."<< endl;system ("pause");return 0;}
Neke ASCII vrijednosti:
o zvučni signal ('\a')
o praznina (' ')
o (48 – 57) znamenke '0'-'9'
o (65 – 90) velika slova 'A' do 'Z'
o (97 –122) mala slova 'a' do 'z'
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
char zvuk= '\a', slovo=67, znak = 43;
cout <<"Ovo je "<<zvuk<< slovo<<znak<<znak<<zvuk<<zvuk << endl;
system ("pause");
return 0;
}
Kada se radi s varijablama tipa string, znakovni se nizovi mogu jednostavno pridružiti
operatorom pridruživanja, dopuniti operatorom +, uspoređivati operatorima uspoređivanja ...
Tip podataka string je definiran u biblioteci string koju treba uključiti pretprocesorskom
naredbom #include - #include <string>.
Znakovni niz
Za lakše baratanje znakovnim nizovima promjenjive duljine u standardnoj je biblioteci jezika
C++ definiran tip podataka string. Tip podataka string "brine" o prostoru kojeg za znakovni
niz treba predvidjeti u memoriji računala, te podržava funkcije i operacije vezane uz
znakovne nizove.
#include "stdafx.h"#include<iostream>#include<string>using namespace std;
int main(){
const string Naslov = "Programski jezik C++";const string broj = " 1. godina";
cout << Naslov <<endl;cout << broj <<endl;
system("Pause");return 0;
}
<cctype> (ctype.h)
Uključivanjem biblioteke <cctype> (ctype.h) na raspolaganju imamo niz gotovih funkcija za
rad s karakterima.
Podijeljene su u dvije vrste funkcija:
funkcije pretvaranja karaktera: služe za konverziju između velikih i malih slova.
funkcije klasifikacije: provjera dali je karakter prošao parametar za određenu kategoriju.
http://www.cplusplus.com/reference/cctype/
#include "stdafx.h"
#include <stdio.h>
#include <ctype.h>
#include<iostream>
using namespace std;
int main ()
{
char hexbroj[10];
long int broj;
cout<<"Unesi heksadecimalni broj: ";
cin>>hexbroj;
if (isxdigit(hexbroj[0]))
{
broj = strtol (hexbroj,NULL,16); //strtol - pretvara string u long integer
cout<< "Hexadecimali broj " <<hexbroj<<" je dekadski broj "<< broj<<endl;
}
system ("pause");
return 0;
}
#include "stdafx.h"
#include <stdio.h>
#include <ctype.h>
#include<iostream>
using namespace std;
int main ()
{
int i;
char znak;
cout << "Unesite znak. ";
cin >> znak;
if (isalnum(znak))
{
cout << ("Znak je alfanumerik ");
}
else
cout << ("Znak nije alfanumerik ")<<endl;
system ("pause");
return 0;
}
#include "stdafx.h"#include <ctype.h>#include <iostream>using namespace std;int main(){char c;cin>>c;putchar (toupper(c));system("pause"); return 0;}
#include "stdafx.h"#include<iostream>#include<string>using namespace std;
int main(){int i = 0,k=0,z=0;char v,m;char Naslov []= "Programski jezik C++";char broj []= " 1. godina";
cout << Naslov << endl;cout << broj << endl;cout << endl;while (Naslov[i]){v = Naslov[i];putchar(toupper(v));i++;}cout << endl;while (Naslov[k]){m = Naslov[k];putchar(tolower(m));k++;}cout << endl;
while (Naslov[z]){if (z %2==0){m = Naslov[z];putchar(tolower(m));}else{v = Naslov[z];putchar(toupper(v));}z++;}system("Pause");return 0;}