Programer nikad ne može reći da je naučio zanat. Dobrom...

Preview:

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

Recommended