Tipovi Podataka I Operatori

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 40

OSNOVE

PROGRAMIRANJA
mr.sci. Goran Madžarević dipl.ing.el.
Prosti Cijelobrojni - int, short, long, char
podataka
Tipovi
(fundamentalni)
Realni - float, double, long double

Složeni
Strukture
(struktuirani)

Tipovi podataka i
operatori
Aritmetrički + , - , * , /, %

Binarni
Dodijeljivanje =, +=, -=, *=, /=, %=
Operatori

Relacioni >, <, >=, <=


Logički !, &&, II
Jednakostni ==, !=
S bitima &, I, ~, ^, >>, <<
++

Unarni
sizeof()
--
cast()
Brojevni sistemi

• Binarni – Sastoji se od cifara 1 i 0. Svaka jedinica ili nula


se naziva bit (binary digit). 8 bita čini jedan byte.
Računari u stvari prevode sebi sve komande u binarni
brojni sistem jer jedino to razumiju (mašinski kod).
• Oktalni – Sastoji se od cifara 0-7. U C jeziku da bi
predstavili oktalni broj na izlazu koristi se formater %o.
Inače da bi se razlikovali od decimalnih brojeva ispred
njih se piše 0, npr. 073.
• Decimalni – Sastoji se od cifara 0-9.Koristimo ga u
svakodnevnom životu.
• Heksadecimalni – Sastoji se od cifara 0-9 i slova A-F. U C
jeziku da bi predstavili heksadecimalni broj na izlazu
koristi se formater %x. Da bi se razlikovali od oktalnih i
decimalnih brojeva, ispred njih se piše 0x, npr. 0xA3
Brojevni sistemi – pretvaranje

• Binarni broj 10011100 možemo preračunati u ostale sisteme na sljedeći način:


• U dekadni – Uzmemo najmanje značajan bit (prvi s desne strane i krećemo se prema
lijevoj strane) i pošto je baza (broj cifara) 2 pišemo sljedeće:
0*20 + 0*21 + 1*22 + 1*23 + 1*24 + 0*25 + 0*26 + 1*27 =
0*1 + 0*2 + 1*4 + 1*8 + 1*16 + 0*32 + 0*64 + 1*128 =
0 + 0 + 4 + 8 + 16 + 0 +0 + 128 = 156
• U oktalni – Svaki oktalni broj se može napisati sa 3 binarne cifre; Podijelimo binarni broj
krenuvši od najmanje značajnog bita na po 3 cifre a tamo gdje fali cifra dodamo ispred
nule. Tako da bi ovaj broj izgledao:
010 011 100 =
0*22+1*21+0*20 0*22+1*21+1*20 1*22+0*21+0*20 =
0*4 +1*2 +0*1 0*4 +1*2 +1*1 1*4 +0*2 +0*1 =
2 3 4 = 0234
• U heksadecimalni – Isti postupak kao u oktalnom samo je razlika u tome što binarni broj
dijelimo po 4 binarne cifre (jer se sa 4 binarne cifre može predstaviti jedna
heksadecimalna) :
1001 1100 =
1*23+0*22+ 0*21 + 1*20 1*23+1*22+ 0*21 + 0*20 =
8 +0 + 0 + 1 8+4 +0 + 0 =
9 A =0x9C
• Pretvaranje iz ostalih sistema se najlakše radi tako da se prvo pretvori broj u binarni pa
onda u koji sistem želite
Tipovi podataka
• Podaci – predmet obrade u programima, mogu se predstaviti promoću
vrijednosti ili identifikatora
• Konstante – predstavljene pomoću vrijednosti, ne mijenjaju svoju
vrijednost u toku izvršavanja programa i ne zauzimaju prostor u
memoriji računara
• Simboličke konstante – konstante vrijednosti predstavljene
identifikatorima
• Podaci predstavljeni pomoću identifikatora smještaju se u memoriju
računara. Vrijednost podatka se smješta u taj prostor i njima mogu da
se promjene vrijednosti u toku izvršavanja programa (promjenjivi
podaci)
• Nepostojani podaci (volatile) - posebna vrsta promjenjivih podataka čije
vrijednosti mogu da se promjene u slučajnim trenucima mimo kontrole
programa kao npr. volatile short ekran = 0x800, tastatura;
• Nepromjenjivi podaci – vrijednosti im se ne mogu promjeniti u toku
izvršavanja programa kao npr. const double e= 2.71828182845905;
• Prosti podaci – ne mogu se rastaviti na manje elemente.
• Složeni podaci (strukture) – sastoje se od nekoliko elemenata koji
mogu nezavisno da se obrađuju. Elementi mogu da budu prosti a mogu
da budu i složeni.
Definisanje podataka

• Svaki podatak koji se koristi u programu mora


prethodno da se definiše. Tako se određuje tip
podatka, dodjeljuje se prostor potrebne
veličine u memoriji za smještanje vrijednosti
podatka i dodjeljuje se početna vrijednost
podatku
• opis_tipa naziv_podatka = početna vrijednost, naziv_podatka2;
Tipovi podataka

• C poznaje samo numeričke tipove podataka


• U C jeziku postoje prosti (fundamentalni) tipovi
podataka
• Cijelobrojni tipovi podataka
• Realni tipovi podataka
• Karakteri - znakovi (oni su u stvari posebna podvrsta
cijelobrojnih tipova podataka)
• Takođe postoje složeni (struktuirani) tipovi
podataka
• Strukture ili složeni tipovi podataka mogu da se sastoje
od više različitih prostih tipova podataka
• Pored više prostih tipova podataka, strukture takođe
mogu da se sastoje i od drugih struktura
Cijelobrojni tipovi podataka
• C poznaje 3 vrste cijelih brojeva:
• int (skraćenica od eng. integer – cjelobrojni) – osnovni cijelobrojni tip i
predstavlja cijelobrojni podatak koji po veličini (prostoru koji zauzima u
memoriji) najviše odgovara hardveru datog računara (obično jedna mašinska
riječ tog računara- u našem slučaju 4 byte-a)
• short int ( može se skraćeno pisati i short) – zauzima manje memorije (u
našem slučaju 2 byte-a) od int-a ali se može pisati i manji raspon brojeva (-
32768 do 32767)
• long int ( može se skraćeno pisati i long) – zauzima više memorije (u našem
slučaju 4 byte*a) od int-a ali se zato može pisati i veći raspon brojeva (
-2 147 483 648 do 2 147 483 647)
• Napomena: int tip uvijek zauzima isto prostora ili kao short ili kao long a svi
ovi tipovi se u C jeziku predstavljaju formaterom %d (od decimal) ili %i (od
integer)
• Svaki od ovih tipova se može predstaviti sa predznakom i bez njega.
Default tip je sa predznakom; Naravno ako je tip predstavljen bez
predznaka onda može prikazati skoro duplo veći pozitivan broj nego
inače ali ne može prikazati negativne brojeve. Da bi se prikazao tip
bez predznaka koristi se ključna riječ unsigned:
• unsigned int
• unsigned long int ili unsigned long
• unsigned short int ili unsigned short
Cijelobrojni tipovi podataka –
Primjer
Karakteri i ASCII kod

• Specijalan tip cjelobrojnog podatka je char – On


zauzima 1 byte u memoriji i može imati raspon
brojeva od -128 do 127 (ili 0 do 255). Svaka od
ovih vrijednosti odgovara jednom znaku iz ASCII
tabele.
• U ANSI standardu nije precizirano da je označen
ili neoznačen ali se to može prevazići
dodavanjem riječi signed ili unsigned ispred char.
Koristi se da predstavi znakovne podatke.
• Da bi se predstavio u C jeziku koristi se formater
%c (od character) ili %s (od string)
ASCII kod
Karakteri i ASCII kod– Primjer
Realni tipovi podataka
• C poznaje tri vrste realnih brojeva:
• float – realni tip podatka jednostruke tačnosti ( što znači
da može predstaviti broj do 6 decimalnih mjesta). Zauzima
4 byte-a u memoriji što znači da može predstaviti od 10-38
do 10+38 različitih vrijednosti. U C jeziku predstavlja se
formaterom %f (od floating point)
• double – realni tip podatka dvostruke tačnosti (što znači da
može predstaviti broj do 12 decimalnih mjesta). Zauzima 8
byte-a u memoriji što znači da može predstaviti 10-308 do
10+308 različitih vrijednosti. U C jeziku predstavlja se
formaterom %ld
• long double – realni podatak u višestrukoj tačnosti (do 24
decimalna mjesta). Zauzima 12 byte-a u memoriji što
znači da može predstaviti 10-4932 do 10+4932 različitih
vrijednosti. Takođe se u C jeziku predstavlja formaterom
%ld
Realni tipovi podataka –
Primjer
Rezime prostih tipova podataka

Ključna riječ Rezervisana veličina Opseg brojeva koji se


memorije za varijablu mogu zapisati
int 4 byte-a -2147483648 do 2147483647

short 2 byte-a -32768 do 32767

long 4 byte-a -2147483648 do 2147483647

unsigned int 4 byte-a 0 do 4294967295

unsigned short 2 byte-a 0 do 65535

unsigned long 4 byte-a 0 do 4294967295

char 1 byte-a - 128 do 127

float 4 byte-a 10-38 do 10+38

double 8 byte-a 10-308 do 10+308

long double 12 byte-a 10-4932 do 10+4932


Složeni tip podatka - struktura

• Struktura je složeni tip podatka i definiše se ključnom


riječi struct. Obično se navodi ispred glavne funkcije
(main), jer po pravilima C jezika (proceduralnog) prije
negoli nešto koristimo prvo ga moramo definisati.
• Struktura se može sastojati od svih navedenih prostih
tipova podataka i čak i od već definisanih struktura
• Samim tim struktura ne obuhvata neki opseg brojeva
(sve zavisi od elemenata strukture)
• Kolika je veličina memorije koju zauzima struktura?
• Više o tome u kasnijem posebnom predavanju o
strukturama
Ključne riječi - keywords

• Službene riječi (ključne riječi, engl. keywords


u C koje se NE MOGU koristiti kao
identifikatori(imena varijabli i funkcija):
auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do If static while
Konstante

• U C jeziku imamo više vrsta konstanti i


upoznat ćemo ih sve:
• Numeričke
• Realne
• Simboličke
Numeričke konstante

• Mogu se predstaviti u decimalnom, oktalnom i


heksadecimalnom brojevnom sistemu
• Decimalne konstante- sastoje se od niza decimalnih cifara
(0-9) ispred kojih može da se nalazi predznak + ili -.
• Oktalne konstante – prva cifra je 0 a dozvoljene cifre su 0-
7
• Heksadecimalne konstante – počinju sa 0x a dozvoljene
cifre su 0-9 i slova a-f (predstavljaju vrijednosti 10-15)
• U svim slučajevima konstanta je int osim ako nije suviše
velika za taj tip (long int)
• Dodavanjem sufiksa u ili U iza cifara dobija se neoznačena
(unsigned) cijelobrojna konstanta a dodavanjem sufiksa l
ili L dobija se konstanta tipa long int ili unsigned long int
Realne konstante

• Na C-u se pišu samo u decimalnom brojevnom


sistemu
• Za brojeve sa vrlo velikim i malim apsolutnim
vrijednostima koristi se eksponencijalna notacija
mEe. m*(10)^2
• Obavezno mora da postoji tačka da bi se
razlikovale realne od cjelobrojnih konstanti
• Podrazumjeva se da su u tipu double (dvostrukoj
tačnosti). Dodavanjem sufiksa f ili F konstante su u
jednostrukoj tačnosti (float). Sufiksom l ili L
obilježavaju se realne konstante u višestrukoj
tačnosti (long double)
Simboličke konstante

• Konstanta kojoj je dodijeljen identifikator (kroz program se


koristi taj identifikator)
• Definišu se preprocesorskom direktivom define
• #define IME_KONSTANTE vrijednost_konstante
• Primjer: #define PI 3.14
• IME_KONSTANTE je identifikator koji u nastavku programa
predstavlja navedenu konstantu vrijednost
• vrijednost_konstante može da bude konstanta standardnog
prostog tipa
• Direktiva define mora da se piše u zasebnom redu i jednom
direktivom može da se definiše samo jedna konstanta
• Treba da omogućavaju lakše razumijevanje programa korištenjem
riječi za identifikatore koje ukazuju na smisao tih konstanti
• Lakše je izmjeniti parametre u programu ako je to potrebno
Konstante – Primjer
Pridruživanje identifikatora
tipovima podataka
• Programer u C jeziku može da dodjeli sopstvene identifikatore
deklarativnim naredbama typedef
• typedef opis_tipa Naziv_tipa;
• Primjer: typedef long int Veliki_cijeli_brojevi;
• opis_tipa – predstavlja tip kome se dodijeljuje identifikator i
može da bude:
• naziv bilo kog standardnog prostog tipa (int, short, long, float, double...)
• identifikator koji je ranije uveden drugom naredbom typedef ili
• opis proizvoljno složenog tipa koji definiše programer
• Naziv_tipa – identifikator koji se pridružuje osnovnom tipu
navedenom u opisu tipa
• Uobičajeno je da se za identifikatore tipova koriste riječi sa
velikim početnim slovima (konvencija, ne pravilo)
Nabrojane konstante (enum)

• Cijelobrojno simboličke konstante kojima su


vrijednosti dodijeljene eksplicitno ili
implicitno nabrajajući njihove identifikatore u
jednom nizu
• Skup odjednom nabrojanih konstanti čini jedno
nabrajanje koje može da se smatra tipom
podatka koji je definisao programer. Opšti
oblik opisa nabrajanja je:
• enum ime_nabrajanja{IME_KONSTANTE=vrijednost,
IME_KONSTANTE =vrijednost,
IME_KONSTANTE=vrijednost}
Typedef i enum – Primjer
OPERATORI

• Nad svim pomenutim tipovima podataka mogu se


vršiti matematičke operacije. Operacije se rade sa
operaterima. U C jeziku imamo više vrsta
operatera a to su:
• Aritmetrički operatori
• Unarni (rade operaciju na samo jednom operandu –
varijabli)
• Binarni (rade operaciju na dva operanda – varijable)
• Operatori dodjeljivanja
• Relacioni operatori
• Logički operatori
• Jednakostni operatori
• Operatori s bitima
• sizeof() i cast() operatori
Pored operatora pomoću kojih se vrše operacije u C možemo pisati i
izraze. Izraz je kombinacija nekoliko operatora (istih ili različitih)
iste ili različite vrste
Aritmetrički operatori i
operatori dodjeljivanja

Operacija Sabiranje Oduzimanje Množenje Dijeljenje Ostatak dijeljenja (modul)

Operator + - * / %
Operacija Dodjeljivanje Skraćeni operator za Skraćeni operator za
vrijednosti istovremeno sabiranje i istovremeno oduzimanje i
dodjeljivanje dodjeljivanje
Operator
= += -=
Operacija Skraćeni operator za Skraćeni operator za Skraćeni operator za
istovremeno množenje i istovremeno dijeljenje i istovremenu modul operaciju i
dodjeljivanje dodjeljivanje dodjeljivanje
Operator
*= /= %=
Operatori – aritmetrički i
dodjeljivanje - Primjer
Unarni aritmetrički operatori

Inkrement Dekrement
Operacija Znak (povećanje vrijednosti (smanjenje vrijednosti
varijable za 1) varijable za 1)

Operator + ili - ++ --
• Mogu biti navedeni u dvije forme: prefiks i postfiks
• Prefiks: ++a
• Postfiks: a++
• Prefiks i postfiks: ++a—
• Razlika leži u tome da kada se radi sa prefiksom, varijabli se
pripiše vrijednost prije početka izraza, a sa postfiksom varijabli
se pripiše vrijednost nakon kraja izraza.
Unarni Operatori – Primjer
Relacioni, logički,
jednakostni operatori
Operator Operacija
Relacioni operatori Relacione operacije
< Manje od
> Veće od
<= Manje od ili jednako
>= Veće od ili jednako
Operator jednakosti Jednakostne operacije
== Jednako
!= Nije jednako
Logički operatori Logičke operacije
! Logička negacija
ll Logički ILI
&& Logički I
Relacioni, logički, jednakostni
operatori - Primjer
Prioritet Operatora

Operatori (prioriteti po redovima) Asocijativnost

( ), ++ (postfiks), -- (postfiks) sa lijeva udesno

+ (unarni), -(unarni), ++ (prefiks), -- sa lijeva udesno


(prefiks)
*,/,% sa lijeva udesno

+,- sa lijeva udesno

<, <=, >, >= sa lijeva udesno

==, != sa lijeva udesno

&& sa lijeva udesno

ll sa lijeva udesno

=, +=, -=, *=, /=, %= sa desna ulijevo


Operatori sa bitima

Operator Operacija

& Logičko I

l Logičko ILI

^ Eksluzivno ILI

~ 1 Komplement

>> Pomjeranje bita udesno

<< Pomjeranje bita ulijevo


Operatori sa bitima - Primjer
Operator sizeof()

• Sintaksa za ovaj operator je: sizeof(objekat)


• Objekat može biti prosti (fundamentalni) tip,
složeni(struktuirani) tip i izraz
• Objekat može da bude i identifikator neke vrijable
ali opet se vraća kao rezultat zauzetost memorije
tipa podatka identifikatora
• Ako se sjećate kada smo spominjali strukture da ne
možemo unaprijed znati koliko zauzimaju
memorije. Pomoću ovog operatora možemo uvijek
saznati koliko prostora u memoriji zauzima
struktura
Konverzije podataka
Ako je jedan long double onda drugi se konvertuje • Da bi uopšte mogli raditi
operand u long double proračunavanja sa
varijablama koje su
Ako je jedan double onda drugi se konvertuje
operand u double različitih tipova
podataka, C jezik radi
Ako je jedan float onda drugi se konvertuje konverziju jednog tipa
operand u float podatka u drugi
• Tablica prioriteta
Ako je jedan unsigned onda drugi se konvertuje
operand long u unsigned long konverzije je data u
tabeli pored
Ako je jedan long onda drugi se konvertuje • Primjetite da je pravilo
operand u long kada se radi sa dva
različita tipa podatka
Ako je jedan unsigned onda drugi se konvertuje
operand u unsigned
uvijek se konvertuje
onaj koji zauzima manje
Ako je jedan Int onda drugi se konvertuje memorije u onaj koji
operand u int zauzima više memorije u
računaru
Cast operator

• Sintaksa za cast operator je: (tip podatka) izraz


• Recimo npr:
• int x;
• (float)x;
• Gornji primjer pretvara int tip podatka u float tip podatka
• Vidjeli smo prethodno da tu konverziju radi sam C jezik, i
to tako da pretvara tip podatka koji zauzima manje
memorije u tip podatka koji zauzima više memorije
• Sa cast operatorom možemo zaobići ovaj defaultni način
promijene tipa podatka i raditi sa tipovima podataka sa
kojim nama odgovara
• Cast operator ima još neke svoje primjene ali do njih ćemo
doći u kasnijim predavanjima
sizeof() i cast operator
Kraj

• Pitanja

You might also like