48
Programer nikad ne može reći da je "naučio zanat". Dobrom programeru učenje mora postati navika.

Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

Programer nikad ne može reći da je

"naučio zanat". Dobrom programeru učenje

mora postati navika.

Page 2: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 3: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

Prema TIOBE indeksu najpopularniji programski jezici danas su:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Page 4: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

Osnovna struktura programa u programskom

jeziku C++

Page 5: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 6: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 7: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 8: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

Page 9: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

Page 10: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 11: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 12: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 13: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 14: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

Deklaracija (najava) varijable

int main(){

}

Tip varijable

Ime varijable Točka-zarez završava jednu naredbu

int BrojPrvihRazreda;

Page 15: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

Pohranjivanje vrijednosti u varijablu

int BrojPrvihRazreda ;

Pohrani vrijednost s desna u navedenu

varijablu

BrojPrvihihRazreda = ;5

int main(){

} Vrijednost koja se pohranjuje

Page 16: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

}

Page 17: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

}

Page 18: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 19: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

}

Page 20: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 21: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

}

Page 22: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 23: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

}

Page 24: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 25: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 26: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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:

Page 27: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

#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

Page 28: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 29: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

Primjer

Page 30: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 31: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 32: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 33: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 34: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 35: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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 :

Page 36: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 37: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 38: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

}

Page 39: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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:

Page 40: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

}

Page 41: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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.

Page 42: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 43: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 44: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

}

Page 45: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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;

}

Page 46: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 47: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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

Page 48: Programer nikad ne može reći da je naučio zanat. Dobrom ...web2.ss-elektrotehnicka-ri.skole.hr/upload/ss...Kada bi ovo čitali na uobičajeni način, ispada da je rukomet isto što

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