Programiranje

  • Upload
    amer

  • View
    6

  • Download
    0

Embed Size (px)

DESCRIPTION

Moze nekom da pomogne:

Citation preview

  • Sadraj predavanja 02 Cjelobrojni tip podataka Realni tip podataka Aritmetiki operatori Izrazi Operatori inkrement i dekrement Kontrola toka programa Naredba za jednostruki izbor Naredba za dvostruki izbor Naredba za viestruki izbor Ponavljanje naredbi/petlja for

    +

    Primjeri koji ilustriraju sve uvedene koncepteObavezno itanje literature:

    Skripta : strane: 16 - 26 + 96 - 106Napomena: dio gore navedenih stranica iz skripte sadri i koncepte koji nee biti obraeni na ovom predavanju. Studentima se savjetuje da ipak proitaju i taj dio.

  • Cjelobrojni tip podataka(1/3) Cjelobrojni tip podataka moe imati slijedee prefikse:- signedomoguuje pridruivanje i pozitivnih i negativnih vrijednosti;- unsignedomoguuje pridruivanje samo pozitivnih vrijednosti;- longomoguuje da se proiri raspon cjelobrojnih vrijednosti koje varijabla moe poprimiti;- shortsuava raspon cjelobrojnih vrijednosti koje varijabla moe poprimiti. Cjelobrojni tip deklariran sa prefiksom long omoguuje veu preciznost u odnosu na deklaraciju ka je koriten prefiks short. Pretpostavljeni prefiks cjelobrojnog tipa je signed.

  • Pretpostavim da int zauzima dva bajta. To znai da ta varijabla moe poprimiti vrijednosti izmeu:-32768 i 32767 Na primjer, neka je stanje u 16-bitnom registru: Uz pretpostavku da je koriten zapis dvojnog komplementa vrijedi:

    - ako je varijabla deklarirana kao signed int vrijednost varijable je -1.- ako je varijabla deklarirana kao unsigned int vrijednost varijable je 65535=216-1.

    Cjelobrojni tip podataka(2/3)

  • Cjelobrojni tip podataka(3/3)signed int a;int a;signed long int a;long int a;signed long a;long a;precizan prikaz deklaracijecjelobrojnih varijabliunsigned short int a;unsigned short a; Primjeri nekih ekvivalentnih deklaracija su grupirani zajedno: ANSI C ne postavlja ogranienja na preciznost prikaza varijabli koristei prefikse short i long, pri emu ipak vrijedi:prec(short) prec(int) prec(long)gdje prec oznaava preciznost, odnosno broj cifri.

  • #include

    int main(){ int a; unsigned int b; a=-1; b=a; printf(\n a=%d b=%u,a,b); return 0;}Primjer uticaja prefiksa na cjelobrojnu varijablu Izvoenje ovog programa daje rezultat:a = -1 b = 65535 (uz pretpostavku da tip int u konkretnoj implementaciji C-a zauzima 16 bitova)a = -1 b = 4294967295 (uz pretpostavku da tip int u konkretnoj implementaciji C-a zauzima 32 bita)

  • Realni tip podataka(1/3) U programiranju esto imamo potrebu deklarirati varijablu koja modelira neku fizikalnu veliinu ili neku drugu vrstu podatka realnim brojem. Ti brojevi su esto vrlo mali i vrlo veliki. Obino za prikaz velikih i malih brojeva koristimo slijedeu notaciju: Slino se mogu prikazati i binarni brojevi. Na primjer:

    0.000000101=1.012-7

    1010.11=1.01011 23 Ovakav zapis brojeva nazivamo normalizirani zapis.

  • Kod gore prikazanog naina zapisa binarnih brojeva, na prvom mjestu je uvijek jedinica. To znai, da se ta jedinica ne mora niti zapisivati jer je moemo podrazumijevati. Na taj nain se tedi jedan bit, to doprinosi veoj preciznosti.Taj bit se naziva skriveni bit (eng. hidden bit)Realni tip podataka(2/3)

  • Realni tip podataka(3/3) Primjeri moguih deklaracija:

    - float a;- double b;- long double c;precizan prikaz deklaracije varijabli realnog tipa

  • P oznaava predznak (1 bit)- 1 negativan broj- 0 pozitivan broj

    K oznaava karakteristiku (8 bitova)- binarni eksponent+127- raspon binarnog eksponenta je -126 - 127- raspon karakteristike je 0 - 255

    M oznaava mantisu, pri emu se vodea jedinica ne zapisuje (23 bita). IEEE standard zapisa realnih brojeva(IEEE-Institute of Electrical and Electronics Engineers)

  • Potrebno je odrediti prikaz broja 6.625 koji je pridru\en varijabli deklariranoj kao float. 6.625(10) = 110.101(2)

    Binarni broj dalje moemo zapisati na slijedei nain:110.101=1.1010122

    Izraunajmo karakteristiku:K= 2 + 127=129129(10) =10000001(2)

    Nakon izbacivanja vodee jedinice i take za mantisu dobivamo:10101 Prema tome, broj 6.625 kao tip float e biti zapisan na slijedei nain:Primjer prikaza realnog broja tipa float

  • ta je sa zapisom broja 0? Poto je u normaliziranom zapisu vodea uvijek jedinica, postavlja se pitanje kako prikazati broj 0. Vrjedi slijedei dogovor:Kada su svi bitovi karakteristike i svi bitovi mantise jednaki nuli, onda se radi o prikazu realnog broja 0.

  • Zapis +, - i not a number Prikaz broja + je: 0 11111111 00000000000000000000000Prikaz broja - je: 1 11111111 00000000000000000000000 Gore prikazani brojevi se najee dobiju zbog dijeljenja s nulom. Svi bitovi mantise su 0, karakteristika ima vrijednost 255, a bit predznaka je 0. Svi bitovi mantise su 0, karakteristika ima vrijednost 255, a bit predznaka je 1.

  • Ako karakteristika ima vrijednost 255, te postoje bitovi mantise koji nisu 0, onda se zapis klasificira kaonot a number (nije broj) Ovakav zapis se moe dobiti zbog toga to je prilikom izvoenja neke operacije dolo do greke. Primjer zapisa klasificiranog kao not a number:

    0 11111111 10000000000000000000001 Postoje i specijalni sluajevi kada je vrijednost karakteristike 0, a postoje bitovi mantise koji nisu nula. Takav zapis nazivamo denormalizirani zapis Ne podrazumijeva da je skriveni bit jednak 1 i smatra se da je vodei bit mantise 0. Vrijednost eksponenta je -126 (ne koristi se formula K=binarni eksponent +127) Primjer: 0 00000000 01010000000000000000000 (=0.01012-126)Neki specijalni sluajevi

  • Aritmetiki operatori Binarni operatori:

    +sabiranje -oduzimanje *mnoenje /dijeljenje%modulo Operator modulo (%) daje ostatak cjelobrojnog dijeljenja. Moe se primijeniti samo na cjelobrojne tipove podataka.

  • Izrazi se sastoje od operatora, operanada i zagrada. Svaki izraz daje neki rezultat. Primjeri izraza:2*x+5(a+b)/2 Brojevi 2 i 5 u gornjim izrazima su konstante. Znakovi {*, +, /} predstavljaju operatore Varijable x, a i b predstavlaju varijable,odnosno, operande.Za pridruivanje vrijednosti varijablama koristi se znak =.Na primjer, slijedea naredba:i=10;varijabli i pridruuje vrijednost 10.

    Izrazi

  • Naredba i=i+1; je jedna od najee koritenih naredbi u programiranju. Poto kod poetnika uperator pridruivanja unosi odreene dileme jer ih podsjea na znaenje znaka = u matematici, na ovom mjestu bi ta zabuna trebala da se ukloni.

    Znaenje naredbe i=i+1;je:Pridruiti novu vrijednost varijabli i a ta nova vrijednost se dobije tako da se trenutna vrijednost te varijable uvea za 1.

    ta radi naredba i=i+1; ?

  • Primjer (operator modulo)#include

    int main(){ int a,b,o; a=7; b=3; o=a%b; printf(\n Ostatak dijeljenja %d i %d je %d.,a,b,o); return 0;}Izvoenjem programa dobit e se:Ostatak dijeljenja 7 i 3 je 1.

  • Prioritet operatora *, / i % je vii od operatora + i -. Na primjer, u izrazu:

    x=a/b+c*d

    prvo e se izvesti operacije dijeljenja i mnoenja, a nakon toga i operacija sabiranja. Kod operatora s istim prioritetom, izvravanje operacija ide od lijeve strane prema desnoj. Prioritet izvoenja operacija se moe mijenjati upotrebom zagrada.

    Na primjer, u izrazu:

    s=(x*(a-b)+1)/2

    operacija dijeljenja e biti izvedena posljedna.

    Prioritet operatora

  • Operatori inkrement i dekrement Unarni opertori.

    ++operator inkrement - uveaj za jedan;--operator dekrement- umanji za jedan.

    Mogu se pisati iza ili ispred varijable.

    Na primjer, iza odsjeka programa: . x=15; x++; vrijednost varijable x je 16.Isto vrijedi i u sluaju da je umjesto x++ napisano ++x.

  • Operatori inkrement i dekrement u izrazima O poloaju operatora u odnosu na varijablu ovisi kada e se vrijednost varijable poveati(++) ili smanjiti(- -). Ako operator stoji ispred varijable, onda se vrijednost varijable prvo promijeni a zatim se promijenjena vrijednost koristi u izrazu. Ako operator stoji iza varijable, onda se u izrazu uzima trenutna vrijednost varijable, a tek nakon izraunavanja izraya se promijeni vrijednost varijable. Na primjer, neka je x=100. Izraunavanjem izraza:y=++x;vrijednost varijable x e se prvo poveati za 1, a zatim e se ta vrijednost pridruiti varijabli y. Dakle, varijabla y e poprimiti vrijednost 101.U izrazima nije svejedno da li operatori ++ i -- stoje ispred ili iza varijable.

  • Operatori inkrement i dekrement u izrazima(2/2) Suprotno, izraunavanjem izraza:y=x++;varijabli y e se pridruiti vrijednost varijable x (a to je 100), a zatim e se poveati za 1 vrijednost varijable x. Vrijednost varijable y nakon izraunavanja gornjeg izraza je 100, dok je vrijednost varijable x tada 101. Prikladnim odabirom operatora inkrement i dekrement moe se poveati razumljivost programskog koda. Operatori ++ i -- se ne mogu primijeniti na konstante i na aritmetike izraze. To znai da su slijedei izrazi pogreni:

    (2*x+y)++

    5.672++

  • Kontrola toka programa Kod proceduralnih programskih jezika naredbe se izvravaju sekvencijalno, a to znai redoslijedom kojim su napisane. Naredbe za kontrolu toka programa omoguuju: - ponavljanje jedne ili vie naredbi; - preusmjeravanje toka programa.

  • Naredba za jednostruki izbor Opi oblik naredbe za jednostruki izbor je:

    if (uvjet){ blok naredbi;} Uvjet moe biti bilo koji aritmetiki ili logiki izraz. Blok naredbi moe imati jednu ili vie naredbi. Uvjet je istinit ako je rezultat izraza razliit od nule. Ako je uvjet istinit, blok naredbi se izvrava. U suprotnom, naredbe koje se nalaze u bloku se preskau.

  • Primjer(naredba za jednostruki izbor)#include int main(){ int a,b; printf(\n Unesite prvi cijeli broj); scanf(%d,&a); printf(\n Unesite drugi cijeli broj); scanf(%d,&b); if (a==b) { printf(\n Unijeli ste iste brojeve); }} ta bi bilo kad bi uvjet glasio a=b, a za unos u program je:1. a=10, b=32. a=0, b=0

  • Naredba za dvostruki izbor Opi oblik naredbe za jednostruki izbor je:

    if (uvjet){ blok naredbi1;}else{blok naredbi2;} Uvjet moe biti bilo koji aritmetiki ili logiki izraz. Ako je uvjet ispunjen (vrijednost izraza je razliita od 0, izvrava se blok naredbi1 i preskae blok naredbi2. U suprotnom(uvjet nije ispunjen, tj. izraz ima vrijednost 0), izvrava se blok narebi2, a preskae se blok naredbi1.

  • Primjer (naredba za dvostruki izbor)#include int main(){ int br; printf(\n Unesite cijeli broj); scanf(%d,&br); if (br%2) { printf(\n Unijeli ste neparan broj); } else { printf(\n Unijeli ste paran broj); } return 0; }

  • Viestruki izbor(if-else if-else)Opi oblik pisanja naredbi za viestruki izbor je:if (uvjet 1){ blok naredbi 1;}else if (uvjet 2){ blok naredbi 2;}..else if (uvjet n-1){ blok naredbi n-1;}else{ blok naredbi n;}

    Ovakav oblik naredbi if-else if-else omoguava uzastopno ispitivanje niza uvjeta. Ako je bilo koji uvjet istinit (razliit od nule) izvrava se blok naredbi pridruen tom uvjetu, dok se svi ostali blokovi naredbi preskau Broj uvjeta nije ogranien Uvjet moe biti logiki ili aritmetiki izraz

  • Primjer (program za rjeavanje kvadratne jednadbe)#include #include

    int main(){ float a, b, c, x1, x2, x1Re, x2Re, x1Im, x2Im, t, D;

    printf(\n Unesite koeficijente kvadratne jednadzbe a,b,c:"); scanf("%f %f %f", &a,&b,&c); D=b*b -4.0*a*c; /* diskriminanta */ if (D > 0) { t = sqrt(D); x1 = (-b + t)/(2*a); x2 = (-b - t)/(2*a); printf (\n Rjesenja su: x1=%f x2=%f\n", x1, x2); }Blok naredbi koji e se izvriti ako je diskriminanta D pozitivnaUkljuuje se datoteka math.h u kojoj je definicija funkcije pow() koja je koritena u programu.

  • else if (D == 0){x1 = -b/(2*a); printf (\n Rjesenja su: x1=x2=%f\n", x1);}else{ t = sqrt(-D); x1Re = -b/(2*a); x2Re = x1Re; x1Im = t/(2*a); x2Im = -x1Im;printf (\n Rjesenja su: x1 = (%f,%f)\n", x1Re, x1Im);printf ( x2 = (%f,%f)\n", x2Re, x2Im); } return 0;}

    Nastavak primjera programa za rjeavanje kvadratne jednadbeBlok naredbi koji e se izvriti ako je diskriminanta D negativnaBlok naredbi koji e se izvriti ako je diskriminanta D jednaka nuli

  • Programska petlja forOpi oblik programske petlje for:for (izraz1;izraz2;izraz3){blok naredbi;} Ispitivanje uvjeta izlaza iz petlje se ispituje na poetku.To znai da postoji mogunost da se blok naredbi ne izvede niti jednom. izraz1 pridruuje kontrolnoj varijabli petlje poetnu vrijednost. Ovaj izraz se izvrava samo jednom. Ako trebamo ve naredbi u izrazu, onda ih odvajamo zarezom izraz2 predstavlja izraz kojim se provjerava da li kontrolna varijabla petlje ispunjava uvjet izlazka iz petlje. Provjera se vri prije svake iteracije. izraz3 definira na koji nain se mijenja kontrolna varijabla. Izraz se izvrava nakon svakog prolaska kroz petlju. Ako trebamo vie naredbi u izrazu, odvajamo ih zarezom.

  • Primjer#include

    int main(){ int broj; for(broj=1; broj