187
1 Primjena računala ak.god. 2013/2014 Pomorski fakultet u Splitu Nastavnici: dr.sc. Anita Gudelj mag.ing. Mirko Čorić

Primjena računala ak.god. 2013/2014

  • Upload
    hien

  • View
    54

  • Download
    1

Embed Size (px)

DESCRIPTION

Primjena računala ak.god. 2013/2014. Pomorski fakultet u Splitu Nastavnici: dr.sc. Anita Gudelj mag.ing. Mirko Čorić. PROGRAMSKI JEZIK C. Primjer C programa. Primjer jednostavnog C programa: #include void main() { /* moj prvi program u C jeziku*/ - PowerPoint PPT Presentation

Citation preview

Page 1: Primjena računala ak.god. 2013/2014

1

Primjena računalaak.god. 2013/2014

Pomorski fakultet u Splitu

Nastavnici:

dr.sc. Anita Gudelj

mag.ing. Mirko Čorić

Page 2: Primjena računala ak.god. 2013/2014

2

PROGRAMSKI JEZIK

C

Page 3: Primjena računala ak.god. 2013/2014

3

Primjer C programa• Primjer jednostavnog C programa:

#include <stdio.h>void main()

{ /* moj prvi program u C jeziku*/

int a,b;a=3;b=4;printf(“Zbroj brojeva %d i %d je %d\n”,a,b,a+b);

}• Program je uveden kako bi se prikazali neki od sintaksnih

elemenata sa sljedećih slajdovaZADATAK: Testirati program.

Page 4: Primjena računala ak.god. 2013/2014

4

Od pisanja do izvršavanja programa• Unos izvornog programa (source code)Unos izvornog programa (source code)

– ASCII uređivač teksta (editor)• Prevođenje izvornog programa u relokatibilni program

– Poziv prevoditelja (compiler)– Otkrivanje pravopisnih pogrešaka (sintax errors)– Ispravci izvornog koda i ponovno prevodenje

• Poziv povezivača (link)Poziv povezivača (link)– Pogreške koje otkriva povezivač

• Izvođenje izvršnog programaIzvođenje izvršnog programa– Zadavanje potrebnih ulaznih podataka– Provjera programa na osnovi test podataka– Pogreške koje se otkrivaju prilikom izvršenja (run time– errors)– Logičke pogreške

Page 5: Primjena računala ak.god. 2013/2014

5

Struktura C programa• C program se sastoji od

– imenovanih blokova koji se nazivaju funkcije • u C programu mora postojati glavna (main)

funkcija koja predstavlja mjesto gdje počinje izvršenje programa – “Glavni” program = funkcija main() (fiksno

ime)

• Pravilo pisanja funkcije main:

int int main() main() void void main() main() {{ iliili {{ Blok naredbi Blok naredbiBlok naredbi Blok naredbi

return return 00; ; }} }}

Page 6: Primjena računala ak.god. 2013/2014

6

Opća struktura C programa

• Tijelo funkcije (blok naredbi) se sastoji od naredbinaredbi unutar vitičastih zagradavitičastih zagrada

• Osnovni opis bloka:– Blok započinje znakom { , a završava znakom }

– Blok obuhvaća (sadrži) deklaracije/definicije, naredbe i neimenovane blokove

– Svaka definicija/deklaracija i naredba mora završavati znakom ; ;

– Blok ne završava znakom ;; tj. iza znaka } ne piše se ;

Page 7: Primjena računala ak.god. 2013/2014

7

Primjer

/* moj prvi program u C jeziku*//* moj prvi program u C jeziku*/

#include#include < <stdio.hstdio.h>> /*/*UUkljukljuccuje datotekuje datotekuu zaglavlja zaglavlja stdio.h */ stdio.h */ voidvoid main main{{ /* Pocetak bloka *//* Pocetak bloka */ int a,b;int a,b;

a=3;a=3;b=4;b=4;printf(“Zbroj brojeva %d i %d je %d\printf(“Zbroj brojeva %d i %d je %d\

n”,a,b,a+b);n”,a,b,a+b); /*funkcija za ispis na monitor*//*funkcija za ispis na monitor*/

/* kraj bloka*//* kraj bloka*/

}}

Da bismo mogli koristiti funkcije iz Da bismo mogli koristiti funkcije iz standardne biblioteke zadustandardne biblioteke zadužženeeneza ulaz i izlaz podataka program za ulaz i izlaz podataka program zapozapoččinjemo naredbominjemo naredbom

KOMENTAR

Direktiva predprocesoru

Glavna funkcija

Tijelo funkcije

Page 8: Primjena računala ak.god. 2013/2014

8

KOMENTARI

• Sa znakovima /* otvara se prostor za komentar, a sa znakovima */ se zatvara

• U C++ -u koristi se, za kraće komentare u istoj programskoj liniji, još i dvostruka kosa crta

• c = a + b ; /* c je zbroj od a i b */

• c = a + b ; // c++ je zbroj od a i b

Page 9: Primjena računala ak.god. 2013/2014

9

Opća pravila pisanja C programa• C je jezik slobodnog formata

– mjesto početka naredbe u retku je proizvoljno– svaka izvršna naredba mora završavati znakom ;

• Dopušteno je stavljanje više naredbi u istom retkuPr: int i,n; printf("Unesite n: "); scanf("%d", &n);int i,n; printf("Unesite n: "); scanf("%d", &n);

• C C pravi razlikupravi razliku izme izmeđđu velikih i malih slovau velikih i malih slova• Ključne riječi se pišu malim slovima. Npr:

mainprintfdo

Page 10: Primjena računala ak.god. 2013/2014

10

Vježba 2

Page 11: Primjena računala ak.god. 2013/2014

11

Opća struktura C programa-ponavljanje-

Page 12: Primjena računala ak.god. 2013/2014

12

Osnovni elementi jezika C

• Skup znakova• Identifikatori• Ključne riječi• Osnovni tipovi podataka

Page 13: Primjena računala ak.god. 2013/2014

13

Skup znakova

• Programski jezik C koristi sljedeći skup znakova:– velika i mala slova engleske abecede A-Z i a-z

_– znamenke 0-9 – specijalne znakove:

+ - * / = % & #! ? ^ " ’ ~ \ |< > ( ) [ ] { }: ; . , _ (bjelina)

Page 14: Primjena računala ak.god. 2013/2014

14

Identifikatori

• Identifikatori su imena koja pridružujemo različitim elementima programa – varijablama, poljima i funkcijama.

• Pravila za pisanje identifikatora:– Sastoje se od slova i brojeva (znamenki),

s tim da prvi znak mora biti slovo– Velika i mala slova se razlikuju– Znak (donja crta) smatra se slovom– Duljina identifikatora je proizvoljna

Page 15: Primjena računala ak.god. 2013/2014

15

Ključne riječi

Page 16: Primjena računala ak.god. 2013/2014

16

VARIJABLE, TIPOVI PODATAKA

Page 17: Primjena računala ak.god. 2013/2014

17

VARIJABLE• VARIJABLA je simboličko ime za memorijsku VARIJABLA je simboličko ime za memorijsku

lokaciju u kojoj se podaci mogu pohraniti lokaciju u kojoj se podaci mogu pohraniti i i naknadno pozivati naknadno pozivati i kojemu je dodijeljeno ime– Općenito: promjenljiv podatak

• Identifikator varijabla (Identifikator varijabla (ime varijableime varijable)) je imenovani je imenovani dio memorijedio memorije

TIP PODATKATIP PODATKA određuje način korištenja varijableodređuje način korištenja varijable

Page 18: Primjena računala ak.god. 2013/2014

18

Varijable

• Simbolički se prikazuje pravokutnikom uz koji stoji ime

• Smještaj u memoriji računala

x y

x y... ...

Page 19: Primjena računala ak.god. 2013/2014

19

Pravila ze kreiranje valjanih imena Pravila ze kreiranje valjanih imena varijablivarijabli

• Identifikator varijableIdentifikator varijable

• Primjeri– salary // valjani identifikator– salary2 // valjani identifikator – 2salary // nevaljani identifikator (započinje

znamenkom)– _salary // valjani identifikator – Salary // valjani identifikator, ali se razlikuje od

salary– plaća // nevaljani identifikator (u imenu se koristi znak

'ć')

Page 20: Primjena računala ak.god. 2013/2014

20

IDENTIFIKATOR: primjeriIDENTIFIKATOR: primjeri

KeKelllyFamilylyFamily KvocijentKvocijentKEKELLLYFamilyLYFamily PostotakPostotakKeKelllyFAMILYlyFAMILY Ime_i_PrezimeIme_i_Prezime

OK.OK.

aandnd switchswitch

coutcout ..FILE..FILE

*

A-1 007A-1 007

Polje 2Polje 2 Varaždin Varaždin

Page 21: Primjena računala ak.god. 2013/2014

21

TABELA OSNOVNIH TIPOVA PODATAKA

TIP PODATKATIP PODATKA TOČNOSTTOČNOSTMEMORIJSKI MEMORIJSKI PROSTORPROSTOR U U BAJTOVIMABAJTOVIMA

KLJUČNA RIJEČKLJUČNA RIJEČ

znak (CHARACTER)znak (CHARACTER) 1 char

cijeli broj (INTEGER)cijeli broj (INTEGER) 2( ili 4) int

realni broj s pomičnom realni broj s pomičnom decimalnom točkomdecimalnom točkom

(FLOATING POINT)(FLOATING POINT)7 decimalnih znamenki 4 float

realni broj dvostruke realni broj dvostruke točnostitočnosti

(DOUBLE )(DOUBLE )

15 decimalnih znamenki

8 double

Page 22: Primjena računala ak.god. 2013/2014

22

TABELA DODATNIH TIPOVA BROJEVA

TIP PODATKATIP PODATKA RASPON RASPON VRIJEDNOSTIVRIJEDNOSTI TOČNOSTTOČNOST

MEMORIJSKI MEMORIJSKI PROSTOR U PROSTOR U BAJTOVIMABAJTOVIMA

KLJUČNE RIJEČIKLJUČNE RIJEČI

kratki cijeli broj (SHORT INTEGER)

od –128 do 127 1 (ili 2) short int

dugi cijeli broj (LONG INTEGER)

od –2147483648 do 2147483647

4 long int

realni broj maksimalane točnosti

(LONG DOUBLE )

od ± 3.4 · 10-4932 do ± 1.1 · 104932

18 decimalnih znamenki

10 long double

Page 23: Primjena računala ak.god. 2013/2014

23

VARIJABLE...• Varijable koje definira korisnik moraju biti deklarirane prije Varijable koje definira korisnik moraju biti deklarirane prije

nego će se koristiti u programunego će se koristiti u programu

• Osnovni format deklariranja varijabli jetip podatka ime_var1, ime_var2, ... ;

– TIP PODATKATIP PODATKA određuje način uporabe varijableodređuje način uporabe varijable•tip podataka jedan od četiri osnovna tipa podataka: integer, character, float ili double

•Vrijednost varijabli ovisi o njenom tipu podatkaVrijednost varijabli ovisi o njenom tipu podatka•PrimjericePrimjerice, , cjelobrojna (cjelobrojna (integerinteger)) varijabla može varijabla može poprimiti samo cjelobrojne vrijednostipoprimiti samo cjelobrojne vrijednosti ( (prpr., 2, 100, -12)., 2, 100, -12)

DEKLARIRATI VARIJABLU ZNAČI JEDNOZNAČNO ODREDITI NJEZIN TIP

int a, b, c;

Page 24: Primjena računala ak.god. 2013/2014

24

Deklaracija i inicijalizacija

int i;Deklaracija varijable ii (najavili za korištenje, odnosno zauzeli prostor u memoriji)

Ne znamo što se trenutno nalazi upisano u toj varijabli jer to zavisi od prethodnog stanja u memoriji

int i;i=0;

Nakon deklaracije negdje u programu moramo postaviti neku početnu vrijednost. Ovo se naziva inicijalizacija.

int i=0;Programeri često rade deklaraciju i inicijalizaciju zajedno

Ovo se naziva definicijom varijable.

int c, i=7,b=0; Deklaracije i definicije se mogu kombinirati.

Page 25: Primjena računala ak.god. 2013/2014

25

• Operator pridruživanja (=)• Varijabli pridružuje vrijednost Varijabli pridružuje vrijednost

• Primjer:Primjer:int sum; int sum;

sum = 500 + 15;sum = 500 + 15;

• Program deklarira varijablu Program deklarira varijablu sumsum kao tip INTEGER kao tip INTEGER

(int)(int)• U C-u vU C-u varijabli arijabli sumsum se pridružuje se pridružuje

vrijednost 500+15vrijednost 500+15 koristeći operator koristeći operator pridruživanjapridruživanja

Što znači naredba ? k=k+1;

1

k 5 6

DEKLARACIJA I PRIDRUŽIVANJE

ISTOint sum = 500 + 15;

Page 26: Primjena računala ak.god. 2013/2014

26

• Primjer deklaracije Primjer deklaracije integerinteger varijable varijable cijeli_broj cijeli_broj ::

intint cijeli_broj; cijeli_broj;cijeli_broj = cijeli_broj = 123;123;

• Primjer deklaracije float varijable realni_broj : floatfloat realni_broj;realni_broj;realni_broj= realni_broj= 123.4567; 123.4567;

• Primjer deklariranja double varijable tocniji_realni_br : doubledouble tocniji_realni_brtocniji_realni_br;

tocniji_realni_brtocniji_realni_br ==1234567.12345678E-81234567.12345678E-8;

• Primjer deklariranja znakovne varijable Primjer deklariranja znakovne varijable slovoslovo : charchar slovo;slovo;slovo = slovo = 'A'A';';

Primjeri

Page 27: Primjena računala ak.god. 2013/2014

27

Domaći rad1. Koje od navedenih deklaracija varijabli su valjane?

int a,b,c;int n = -100;long m = 2, p = 4;int2k;double x = 2 * m;float y = y * 2;double d = 0.67;float _f = 0.52;char c = '$';

2. Koji od navedenih identifikatora su valjani?identifierseven_11_gross-incomegross$income2by2average_weight_of_a_large_pizzavariable

prosječna_vrijednost3. Deklarirajte varijable za sljedeće entitete:

Broj godina osobe.Plaća zaposlenika.Broj riječi u riječniku.Slovo abecede.

Page 28: Primjena računala ak.god. 2013/2014

28

Funkcija printf

Page 29: Primjena računala ak.god. 2013/2014

29

Što će ispisati sljedeći programi?Što će ispisati sljedeći programi?Kako će ispisati?Kako će ispisati?

  #include#include <stdio.h> <stdio.h>

voidvoid main()main()

{{ printfprintf("Naredbe se završavaju točka-zarezom.");("Naredbe se završavaju točka-zarezom.");

printfprintf("Izvršavanje programa počinje prvom ("Izvršavanje programa počinje prvom naredbom funkcije main().\n"); naredbom funkcije main().\n");

      }}

Page 30: Primjena računala ak.god. 2013/2014

30

Funkcija printf

• Funkcija printf se može javiti u dva oblika. Prvi je jednostavniji:

printf(“neki tekst u navodnicima sa specijalnim znakovima printf(“neki tekst u navodnicima sa specijalnim znakovima \n\n””););

• Drugi oblik je znatno značajniji:– printf(“%d %d %e tekst %c\n”,in,60,fl,ch);

Poruka bi bila odštampana na ekranu u datom obliku.

Funkcija printf u ovom obliku opet štampa string koji joj je prvi argument‚ ali ono što je iza % mijenja se redom sa argumentima koji slijede. Tako se umjesto %d štampa varijabla in i to kao cjelobrojna (%d znači štampaj kao cjelobrojnu varijablu).

Znak za novi red koji je čest sastavni elemenat naredbe printf.

Page 31: Primjena računala ak.god. 2013/2014

31

FunkcijaFunkcija printfprintf• Poziv funkcije printf izgleda:printf ("printf ("opis_formataopis_formata",varijabla,varijabla,...); ",varijabla,varijabla,...); 

• PrimjerPrimjer

printf("Rezultat je %d", 5);printf("Rezultat je %d", 5);

• Opis_formata može sadržavat tekst koji će se Opis_formata može sadržavat tekst koji će se ispisatiispisati

• Ukoliko prikazujete vrijednost jedne ili više varijabli, Ukoliko prikazujete vrijednost jedne ili više varijabli, potrebno je na odgovarajuće mjesto upisati opis potrebno je na odgovarajuće mjesto upisati opis formata pretvorbe za svaku varijablu formata pretvorbe za svaku varijablu Sastoji se od oznake postotka (%) iza kojeg slijedi slovo Sastoji se od oznake postotka (%) iza kojeg slijedi slovo

slovo opisuje tip podatka koji se upotrebljavaslovo opisuje tip podatka koji se upotrebljava

• Očekuje se da broj argumenta nakon stringa u naredbi Očekuje se da broj argumenta nakon stringa u naredbi printfprintf bude jednak broju “%” unutar stringabude jednak broju “%” unutar stringa

Page 32: Primjena računala ak.god. 2013/2014

32

Funkcija printf

• Formati ispisa imaju sljedeće značenje (navodimo samo Formati ispisa imaju sljedeće značenje (navodimo samo neke važnije):neke važnije):– %d cijeli brojevi– %f realni brojevi– %c znak– %bd cijeli broj sa b znamenki– %a.bf realni broj sa a pozicija i b decimalnih mjesta,

podrazumjeva se a>b– %e eksponencijalni zapis– %x heksadecimalni zapis– %o oktalni zapis...

Jedan ili više opisa formata je smješteno između Jedan ili više opisa formata je smješteno između dvostrukih navodnikadvostrukih navodnika

Page 33: Primjena računala ak.god. 2013/2014

33

Modifikatori za formatiranje ispisaSpecijalni znakovi:  

\n prelazak u novi red       

\t horizontalni tabulator

\v vertikalni tabulator

\b pomak za mjesto unazad (backspace)

\r  postavljanje kursora na početak linije       

\f      nova stranica

\a zvučni signal

\\ kosa crta ulijevo

\” dvostruki navodnik

Page 34: Primjena računala ak.god. 2013/2014

34

Slijed naredbi

#include <stdio.h>

void main()

{

int zbroj;

zbroj = 500 + 15;

printf("Zbroj 500 i 15 iznosi %d\n", zbroj);

}

Sljedeći program ispisuje zbroj brojeva 500 i 15.

Page 35: Primjena računala ak.god. 2013/2014

35

Sljedeći program ispisuje dvije cjelobrojne vrijednosti

razdvojene horizontalnim tabulatorom :  \t 

#include#include <stdio.h> <stdio.h>voidvoid main() main(){{ intint broj1, broj2; broj1, broj2;broj1 = 10;broj1 = 10;broj2 = 15;broj2 = 15;

printfprintf("%d\t%d\n", broj1,broj2);("%d\t%d\n", broj1,broj2);}}

Page 36: Primjena računala ak.god. 2013/2014

36

Primjer programa koji pokazuje uporabu svih tipova podataka i formatiranje ispisa realnih brojeva:

##includeinclude <stdio.h> <stdio.h>main()main(){{

intint broj=10; broj=10;floatfloat novac=342.75; novac=342.75;charchar slovo='A'; slovo='A';doubledouble pi=3.14159265359; pi=3.14159265359;printf("printf("VrijednostVrijednost brojabroja jeje %d.\n", %d.\n",brojbroj););printf("printf("Kolicina novaca jeKolicina novaca je %.2f Kn.\n", %.2f Kn.\n", novacnovac ); );printf("printf("OvoOvo je je slovo slovo %c.\n", slovo );%c.\n", slovo );printf("printf("MatematickaMatematicka konstantakonstanta pi pi nana jedanaest decimalajedanaest decimala iznosiiznosi %.11f.\n", pi ); %.11f.\n", pi );

}}

Page 37: Primjena računala ak.god. 2013/2014

37

KONVERZIJA TIPA PODATKA #include#include <stdio.h> <stdio.h>

voidvoid main() main()

{{ intint  broj1 = 7  broj1 = 7,, broj2 = 2; broj2 = 2;

ffloatloat kvocijent = 0; kvocijent = 0;

kvocijent = broj1 / broj2;kvocijent = broj1 / broj2;

printf("%d dijeljeno s %d je printf("%d dijeljeno s %d je %%f\f\n",broj1,broj2,kvocijent );n",broj1,broj2,kvocijent );

}}

Ispis programa:7 dijeljeno s 2 je 3.000000

Page 38: Primjena računala ak.god. 2013/2014

38

ZADATAK

• Zadano je Z=‘#’, X=-14.57889 i Y= 99.

• U programu treba ispisati vrijednosti X i Y, na slijedeći način:

– X će biti ispisan na 2 decimalna mjesta, zatim se ispisuje tabulator (\t), te znak Z, jedan razmak pa ASCII vrijednost znaka Z; nakon toga ide novi red, a zatim ispis broja Y dekatski, oktalno i heksadecimalno.

Page 39: Primjena računala ak.god. 2013/2014

39

#include <stdio.h>void main(){ int Y=99; float X=-14.57889; char Z=’#’;

printf(“Ispis rezultata: \n”); printf(“ %.2f \t %c %d \n %d %o %x \n”, X,Z,Z,Y,Y,Y);

 }

Page 40: Primjena računala ak.god. 2013/2014

40

Brzi test 1

• Koja su od ovih imena pravilni nazivi varijabli

_a37 4aB a4b a 37 int int37 a&32

Navedite tipove podataka i ključne riječi

Navedite formate ispisa

Navesti primjer ispisa cjelobrojne varijable a.

Page 41: Primjena računala ak.god. 2013/2014

41

  UNOS PODATAKA S TIPKOVNICE u C

• Funkcija Funkcija scanfscanf• služi učitavanju podataka sa standardnog služi učitavanju podataka sa standardnog

ulaza za vrijeme ulaza za vrijeme izvođenjaizvođenja programa (na programa (na konzoli) konzoli)

• Opća forma:Opća forma:

scanf(“kontrolni_string”,&arg_1,&arg_2, ...,&arscanf(“kontrolni_string”,&arg_1,&arg_2, ...,&arg_n);g_n);

• gdje je kontrolni string konstantni znakovni niz gdje je kontrolni string konstantni znakovni niz koji sadrži informacije o vrijednostima koje se koji sadrži informacije o vrijednostima koje se učitavaju u argumente arg 1,. . . ,arg n (%d, učitavaju u argumente arg 1,. . . ,arg n (%d, %f, %c)%f, %c)

Page 42: Primjena računala ak.god. 2013/2014

42

  UNOS PODATAKA S TIPKOVNICE u C

#include <stdio.h>

void main()     // program s primjerom unosa s tipkovnice   

  {   int  broj;

     printf("Unesite broj:");

    scanf("%d", &broj);

    printf("Broj koji ste unijeli je %d.\n", broj);

}

Page 43: Primjena računala ak.god. 2013/2014

43

KonstanteKonstante

1. Konstante koje započinju s 0 (nula) interpretiraju se kao oktalne

2. Konstante koje započinju s 0x interpretiraju se kao heksadecimalne

3. Simboličke konstante

Page 44: Primjena računala ak.god. 2013/2014

44

Simboličke konstante

• umjestoumjesto float Opseg = 2. * r * 3.14159265359;float Opseg = 2. * r * 3.14159265359;

• float Povrsina = r * r * 3.14159265359;float Povrsina = r * r * 3.14159265359;• double Oplosje = 4. * r * r * 3.14159265359;double Oplosje = 4. * r * r * 3.14159265359;• može se pisatimože se pisati

const double Pi = 3.14159265359;const double Pi = 3.14159265359;• iliili• #define Pi = 3.14159265359;#define Pi = 3.14159265359;• i ondai onda• float Opseg = 2. * r * Pi;float Opseg = 2. * r * Pi;• float Povrsina = r * r * Pi;float Povrsina = r * r * Pi;• double Oplosje = 4. * r * r * Pi;double Oplosje = 4. * r * r * Pi;

Page 45: Primjena računala ak.god. 2013/2014

45

Napiši program kojim ćeš izračunati opseg i površinu kruga za proizvoljno zadani radijus.

• ALGORITAM:

Definiranje konstante PIDefiniranje varijable rRačunanje opsega i površineIspis dobivenih rezultata

Page 46: Primjena računala ak.god. 2013/2014

46

#include<stdio.h>void main(){

const float PI=3.14;int r=10;float P=r*r*PI;float O=2*r*PI;printf("Opseg je %f\n",O);printf("Povrsina je %f\n",P);

}

Page 47: Primjena računala ak.god. 2013/2014

47

Rješenje primjera u C-u/* Aritmeticka Sredina*/#include <stdio.h>void main () { int i, j, k; float sredina; printf(“Unesi tri broja\n”);scanf("%d,%d,%d", &i,&j,&k); sredina = (i + j + k) / 3.; printf ("Aritmeticka sredina brojeva %d, %d i" " %d iznosi %f", i, j, k, sredina);printf(“\ndek %d,okt %o, heksa %x\n”,i,i,i);}

Način prekida znakovnog niza i

nastavak u novom retku

Page 48: Primjena računala ak.god. 2013/2014

48

Za domaći:

• Korištenjem  scanf učitajte dekadsku vrijednost s tipkovnice u integer varijablu broj_ucenika, a potom je ispišite pomoću printf u dekadaskom, oktalnom i heksadekadskom obliku.

• Korištenjem  scanf učitajte vrijednost float varijable cijena_tel_imp , a potom je ispišite pomoću printf na dva decimalna mjesta.

• Korištenjem  scanf učitajte jedan znak s tipkovnice u  varijablu operator, a potom ga ispišite. Preskočite razmake , tabulatore i oznake novog reda, prije upisa.

Page 49: Primjena računala ak.god. 2013/2014

Dodatak:

• Funkcija scanf(),printf(),”Cast” operatori

49

Page 50: Primjena računala ak.god. 2013/2014

Funkcija scanf()

- Omogućava formatirani unos podataka.

scanf(“kontrolni string”,&arg1,&arg2,…);

- Kontrolni string određuje format unosa podataka-Oznake formata (npr:%d,%f,%c itd) određuju koji će se tip podatka unositi s tastature, te taj podatak pridružuju argumentima.

Pr. int a;

scanf(“%d”,&a);

Dakle, unosimo cijeli broj i spremamo ga u varijablu a.

Page 51: Primjena računala ak.god. 2013/2014

-Prazno mjesto(space),\n,\t omogućuju preskakanje praznina ulaznog niza.

Pr. char a,b;

scanf(“ %c %c”,&a,&b);

-U kontrolnom stringu se mogu pojaviti i drugi znakovi.

-Njima moraju odgovarati identični znakovi na ulazu.

Pr. float a;

int j;

scanf(“%f,%d”,&a,&j);

Tada ulaz mora biti u obliku: npr. 1.456,8

Page 52: Primjena računala ak.god. 2013/2014

Pr. scanf(“%d/%d/%d”,&dan,&mjesec,&godina);

Page 53: Primjena računala ak.god. 2013/2014

Funkcija printf()

- Omogućava formatirani ispis podataka.

printf(“kontrolni string”, arg1,arg2,…);

Pr. printf(“ Nekakva poruka bez argumenata”);

Pr. Int i=5;

printf(“Vrijednost varijable i je %d”,i);

Pr. printf(“%2d”,i); varijabla “i” će prilikom ispisa na ekranu zauzeti minimalno 2 pozicije

Page 54: Primjena računala ak.god. 2013/2014

Pr. float var = 123.3456;

printf(“%.2f”,var); broj se ispisuje s 2 decimale

printf(“%8.3f”,var); broj se ispisuje s 3 decimale, a zauzima najmanje 8 pozicija prilikom ispisa

Page 55: Primjena računala ak.god. 2013/2014

“Cast” operatori

-Tip rezultata aritmetičkih izraza gdje su operandi istog tipa, odgovara tipu operanada.

Pr. int j = 2;

int i = 7;

float rez;

rez = i / j;

Rezultat izraza “i / j” je “int” tipa, dakle broj 3.

Page 56: Primjena računala ak.god. 2013/2014

- U izrazima ćemo često imati imati operande različitog tipa. U tom slučaju se konverzija odvija prema višem tipu podataka.

Pr. int x;

float y;

double z;

rez =x * y - z; rez je tipa “double”

Pr. int i = 5;

double d = 2.85;

d = i; cjelobrojna vrijednost varijable “i” se najprije pretvori u odgovarajuću realnu vrijednost i onda se pridruži varijabli “d”.

i = d; varijabli “i” se pridruži cjelobrojna vrijednost varijable d,tj.odbaci se decimalni dio.

Page 57: Primjena računala ak.god. 2013/2014

Eksplicitna pretvorba: (tip_podatka) operand; operand može

biti varijabla ili aritmetički izraz.

Pr. rez = (float) (i / j); Rezultat izraza (i / j) je sam po sebi “int” tipa (jer su oba operanda u izrazu “int” tipa).

Naredbom (float)(i / j) se taj rezultat tipa “int” pretvara u tip “float” (3 3.000000).

Nadalje: rez = (float) i / j; “cast” operator je primjenjen samo na varijablu “i” koja je sada pretvorena u “float” tip podatka.

Rezultat cijelog izraza “(float)i / j” je tipa float zbog konverzije tj. pretvorbe prema višem tipu podatka.

Page 58: Primjena računala ak.god. 2013/2014

58

2. OPERATORI

2.1. Operatori pridruživanja

2.2. Aritmetički operatori

2.3. Relacijski i logički operatori

Page 59: Primjena računala ak.god. 2013/2014

AritmetičkiAritmetičkioperatorioperatori

*

Page 60: Primjena računala ak.god. 2013/2014

UUnarni operatorinarni operatori OOperatorperatorii koji djeluju na jednom koji djeluju na jednom

operanduoperandu

predznacipredznaci+X+X unarni plusunarni plus -X -X unarni minusunarni minus

inkremeninkrementiranjetiranje X++X++ uvećaj nakonuvećaj nakon++X++X uvećaj prijeuvećaj prije

dekremendekrementiranjetiranjeX--X-- umanji nakonumanji nakon--X--X umanji prijeumanji prije

*

Page 61: Primjena računala ak.god. 2013/2014

OperatorOperatorii inkrementiranja/dekrementiranjainkrementiranja/dekrementiranja

*

• Operator Operator inkrementiranjainkrementiranja ++ povećava ++ povećava

vrijednost varijable za 1vrijednost varijable za 1• Izraz Izraz x++;x++; je ekvivalentan izrazu je ekvivalentan izrazu

x=x+1;x=x+1;

• Operator Operator dekrementiranjadekrementiranja -- smanjuje -- smanjuje

vrijednost varijable za 1vrijednost varijable za 1• Izraz Izraz x--;x--; je ekvivalentno izrazu je ekvivalentno izrazu x=x-x=x-

1;1;

Page 62: Primjena računala ak.god. 2013/2014

Prefiks i postfiks notacijePrefiks i postfiks notacije

x++ ili ++x x++ ili ++x

x-- ili --xx-- ili --x

*

Operatore inkrementiranja/dekrementiranja moguće Operatore inkrementiranja/dekrementiranja moguće je pisati ispred i iza varijable:je pisati ispred i iza varijable:

U U prefiksprefiks notaciji (++x, --x) varijabla će biti notaciji (++x, --x) varijabla će biti promijenjena prije no što će njena vrijednost biti promijenjena prije no što će njena vrijednost biti iskorištena u složenom izrazuiskorištena u složenom izrazu

U postfiks notaciji (x++, x--) varijabla će biti promijenjena nakon što će njena vrijednost biti iskorištena u složenom izrazu

Page 63: Primjena računala ak.god. 2013/2014

Prefix oblik:Prefix oblik:

... i ji = 2; 2 ?j = ++i; 3 3

... i ji = 2; 2 ?j = --i; 1 1

Page 64: Primjena računala ak.god. 2013/2014

Postfix oblik: Postfix oblik:

...... ii jj

i = 2;i = 2; 22 ??

j = i++;j = i++; 33 22

...... ii jji = 2;i = 2; 22 ??j = i--;j = i--; 11 22

Page 65: Primjena računala ak.god. 2013/2014

Prefiks i postfiks notacijePrefiks i postfiks notacije

*

Što će se ispisati:Što će se ispisati:#include <stdio.h>#include <stdio.h>void main()void main(){int i=5;{int i=5;

printf("%d\n",-i);printf("%d\n",-i);printf("%d\n",--i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i++);printf("%d",i);printf("%d",i);

}}

Page 66: Primjena računala ak.god. 2013/2014

Ako su početne vrijednosti cjelobrojnih Ako su početne vrijednosti cjelobrojnih varijabli zadane kao: varijabli zadane kao: int i=1, j=2, k=7;

kolike će biti vrijednosti nakon izvršavanja kolike će biti vrijednosti nakon izvršavanja sljedećih naredbi.sljedećih naredbi.

i+=j;

j=i++; k*=i;

Page 67: Primjena računala ak.god. 2013/2014

BBinarni operatoriinarni operatori

zbrajanjezbrajanje X + YX + Y oduzimanjeoduzimanje X - YX - Y množenjemnoženje X * YX * Y dijeljenjedijeljenje X / YX / Y modulomodulo X % YX % Y

Binarni su oni operatori koji se upotrebljavaju u Binarni su oni operatori koji se upotrebljavaju u kombinaciji s kombinaciji s dva operandadva operanda

Operacija modulo (%) djeluje na cjelobrojnim operandima i Operacija modulo (%) djeluje na cjelobrojnim operandima i kao rezultat daje ostatak pri cjelobrojnom dijeljenju operanadakao rezultat daje ostatak pri cjelobrojnom dijeljenju operanada

Page 68: Primjena računala ak.god. 2013/2014

int a, b;int a, b;a = a = 99; b = ; b = 22;;

Izraz Rezultat

a + b 11

a - b 7

a * b 18

a / b 4

-a/b -4

a % b 1

Primjer

float a, b;float a, b;

a = 12.5; b = 2.;a = 12.5; b = 2.;

Izraz Rezultat

a + b 14.5

a - b 10.5

a * b 25.0

a / b 6.25

a % b pogreška

Page 69: Primjena računala ak.god. 2013/2014

Prioritet osnovnih aritmetiPrioritet osnovnih aritmetiččkih kih operatoraoperatora

1. 1. ** / / % %

2. 2. ++ - - Ako u izrazu ima više operatora jednakog prioriteta,

izračunavaju se slijeva nadesno Npr:

2 + 3 / 2 * 4 – 5 * 6 % 82 + 3 / 2 * 4 – 5 * 6 % 8

2 +2 + 1 1 * 4* 4 – – 30 30 % 8% 8

22 + + 4 4 –– 66

6 6 – – 66

00

Page 70: Primjena računala ak.god. 2013/2014

Zadatak 1:Zadatak 1: Treba izračunati zbroj, razliku, Treba izračunati zbroj, razliku, umnožak, kvocijent i ostatak dva cijela brojeva. umnožak, kvocijent i ostatak dva cijela brojeva. Ispis neka bude oblika:Ispis neka bude oblika:

Unesi prvi broj:Unesi prvi broj:UUnesi drugi broj: nesi drugi broj: .... + .... = ........ + .... = ........ - .... = ........ - .... = ........ * .... = ........ * .... = ........ / .... = ........ / .... = ........ .... %%.... = ........ = ....

Zadatak 2: Zadatak 2: Potrebno je izračunati srednju Potrebno je izračunati srednju vrijednost po volji izabrana četiri cijela broja. Ispis vrijednost po volji izabrana četiri cijela broja. Ispis neka bude oblika:neka bude oblika:

Unesi cetiri cijela broja:Unesi cetiri cijela broja:

Srednja vrijednost brojeva Srednja vrijednost brojeva

...., ...., .... i .... je ........., ...., .... i .... je .....

Page 71: Primjena računala ak.god. 2013/2014

Operator dodjele tipaOperator dodjele tipa

Deklaracija i definicija varijabli:Deklaracija i definicija varijabli:int Brojnik = 1;int Brojnik = 1; int Nazivnik = 3;int Nazivnik = 3;

Želimo podijeliti dvije cjelobrojne varijable, a Želimo podijeliti dvije cjelobrojne varijable, a da rezultat bude realni broj:da rezultat bude realni broj:

Ovo je OK:Ovo je OK:float TocniKvocijent = (float)Brojnik / (float)Nazivnik;float TocniKvocijent = (float)Brojnik / (float)Nazivnik;

I ovo:I ovo: float TocniKvocijent = float(Brojnik) / float(Nazivnik);float TocniKvocijent = float(Brojnik) / float(Nazivnik);

Ali ovo nije:Ali ovo nije:float Krivo = Brojnik / Nazivnik; float Krivo = Brojnik / Nazivnik; // ispisuje nulu!!!// ispisuje nulu!!!

*

Page 72: Primjena računala ak.god. 2013/2014

Zadatak : Zadatak : Što će se ispisatiŠto će se ispisati##include <stdio.h>include <stdio.h>void main()void main()

{{int a = 10;int a = 10;float b=10.;

printf("a/3 = %d \n", a/3);

printf("b/3 = %f \n",b/3);

float c=a/3;

printf("c = %f \n", c);

c = (float)a/3; //primjena operatora dodjele tipa (float)

printf("c = %f \n", c);

c=b*a;

printf("c = %f \n", c);

}}

Page 73: Primjena računala ak.god. 2013/2014

SkraSkraćena notacijaćena notacija

U programiranju su česte operacije tipa: U programiranju su česte operacije tipa: a=a+b;a=a+b; Za operacije ovog tipa u C-u Za operacije ovog tipa u C-u susu uveden uvedenee skraćen skraćenee

notacijnotacijee::a+=b;a+=b; a-=b;a-=b; a*=b;a*=b; a a/=b;/=b; a%=b;a%=b;koje koje znače redom:znače redom:a=a+b;a=a+b; a=a-b; a=a*b;a=a-b; a=a*b; a=a a=a/b;/b; a=a%b;a=a%b;

Već ste (ja se nadam) uočili znak Već ste (ja se nadam) uočili znak ;; koji stoji na kraju koji stoji na kraju svake od naredbi i znači kraj naredbesvake od naredbi i znači kraj naredbe

Page 74: Primjena računala ak.god. 2013/2014

2.3. Relacijski i 2.3. Relacijski i logički operatori logički operatori

*

Page 75: Primjena računala ak.god. 2013/2014

Logički tipovi podatakaLogički tipovi podataka

boolbool ImamLiMnogoNovaca =FALSE; ImamLiMnogoNovaca =FALSE;boolbool JeLiVamDosadno = TRUE; JeLiVamDosadno = TRUE;

TRUE = 1; TRUE = 1; FALSE = 0;FALSE = 0;

George BoolGeorge Bool (1815-1864), (1815-1864), engleski matematičar, engleski matematičar,

utemeljitelj logičke algebreutemeljitelj logičke algebre

*

Page 76: Primjena računala ak.god. 2013/2014

Relacijski operatoriRelacijski operatori

*

Tvore atomne sudoveTvore atomne sudoveOperatorOperator ZnačenjeZnačenje Logički izrazLogički izraz RezultatRezultat

==== jednakojednako 1=1= =1=1 1 (Istina)1 (Istina)

!=!= različitorazličito 2!=2+22!=2+2 1 (Istina)1 (Istina)

>> većeveće 5>65>6 0 (Laž)0 (Laž)

>=>= veće ili jednakoveće ili jednako 6>=66>=6 1 (Istina)1 (Istina)

<< manjemanje 7<107<10 1 (Istina)1 (Istina)

<=<= manje ili jednakomanje ili jednako 7<=67<=6 00 (Laž)(Laž)

Znakovi su valjani operandi jer su predstavljeni numeričkim kodovima

Primjer: (prema ASCII kodu) 'A' < 'F' // daje 1 (slično kao i 65 < 70)

Aritmetičke operacije imaju veći prioritet od logičkih.

Page 77: Primjena računala ak.god. 2013/2014

Jednostavni logički izraziJednostavni logički izrazi

a = = ba = = boperand 1operand 1(subjekt)(subjekt)

operand 2operand 2(objekt)(objekt)

relacijarelacija(odnos)(odnos)

sudsud(tvrdnja)(tvrdnja)

*

Page 78: Primjena računala ak.god. 2013/2014

Logički operatoriLogički operatori

*

Složeniji logički izrazi formiraju se Složeniji logički izrazi formiraju se pomoću logičkih operatorapomoću logičkih operatora

Operandi logičkih operatora su logički izraziOperandi logičkih operatora su logički izrazi

Vrijednost složenog logičkog izraza bit će 0 (laž) Vrijednost složenog logičkog izraza bit će 0 (laž) ili 1 (istina)ili 1 (istina)

OperatorOperator NazivNaziv PrimjerPrimjer

! x! x negacija (negacija (notnot)) !(5 == 5)!(5 == 5) // // dajedaje 0 0

x && yx && y konjunkcija (konjunkcija (and - and - logičko ’logičko ’ii’)’)5 < 6 && 6 < 5 < 6 && 6 < 77 // // dajedaje 11

x || yx || y disjunkcija (disjunkcija (or - or - logičko ‘logičko ‘iliili’)’) 5 < 6 || 6 < 55 < 6 || 6 < 5 // // dajedaje 1 1

Page 79: Primjena računala ak.god. 2013/2014

PrimjerPrimjer

Kolike su vrijednosti varijabli k, k1 Kolike su vrijednosti varijabli k, k1 nakon što se izvrši sljedeći blok naredbinakon što se izvrši sljedeći blok naredbi

int k, k1,a=3;k=!(a==8);k1=(a+=3)>=8 || !0;

Page 80: Primjena računala ak.god. 2013/2014

PrimjerPrimjer

// Ispitivanje istinitosti// Ispitivanje istinitosti

#include <stdio.h>#include <stdio.h>void main() void main() {{int x, t1, t2, test;int x, t1, t2, test;scanf("%d", &x);scanf("%d", &x);t1 = (x - x/3*3) t1 = (x - x/3*3) ==== 0; 0;t2 = t2 = ((xx % % 7) 7) ==== 0; 0;test = t1 || t2;test = t1 || t2;printf("x = %d test = %d\n",printf("x = %d test = %d\n", x,test)x,test);;

} }

Page 81: Primjena računala ak.god. 2013/2014

Napisati program koji će utvrditi za učitani cijeli broj x je li dijeljiv i sa 3 i sa 4

definiraj cijele brojeve x, t1, t2, test učitaj (x) postavi t1 na rezultat ispitivanja djeljivosti x sa 3 postavi t2 na rezultat ispitivanja djeljivosti x sa 4 test = t1 i t2 ispiši (x, test) kraj

Page 82: Primjena računala ak.god. 2013/2014

Primjer – rješenje u C-u

#include <stdio.h >#include <stdio.h >void main () void main () {{

int x, t1, t2, test;int x, t1, t2, test;scanf(“%d”, &x);scanf(“%d”, &x);t1 = (xt1 = (x%%3) == 0;3) == 0;t2 = (x%t2 = (x%44) == 0;) == 0;

testtest== t1 t1 &&&& t2; t2;printf(“x= %d printf(“x= %d t1=%d t2=%d t1=%d t2=%d test = %d\n”, x,test = %d\n”, x,t1,t2,t1,t2, test); test);}}

Page 83: Primjena računala ak.god. 2013/2014

Složeni logički izraziSloženi logički izrazi

(a < b) && (c = = d) || (e > f)(a < b) && (c = = d) || (e > f)jednostavnijednostavnilog. izraz 1log. izraz 1

ssudud (tvrdnja)(tvrdnja)

jednostavnijednostavnilog. izraz 2log. izraz 2 jednostavnijednostavni

log. izraz 3log. izraz 3

llogičkiogički operator 1operator 1

*

llogičkiogički operator operator 22

Koja je vrijednost logičkog izraza ako cjelobrojne varijable Koja je vrijednost logičkog izraza ako cjelobrojne varijable imaju slijedeće vrijednosti a=b=1, c=d=2,imaju slijedeće vrijednosti a=b=1, c=d=2, ee = =4, f=3:4, f=3:

(a < b) && (c = = d) || (e > f)(a < b) && (c = = d) || (e > f)

00 11 11

00 11

11

&&&&

||||

Page 84: Primjena računala ak.god. 2013/2014

ako je a ako je b (a b) je

točno (1) točno (1) točno (1)

točno (1) pogrešno (0) točno (1)

pogrešno (0) točno (1) točno (1)

pogrešno (0) pogrešno (0) pogrešno (0)

* * *

‘‘ili’ tablicaili’ tablica

*

ako je a ako je b (a& & b) je

točno (1) točno (1) točno (1)

točno (1) pogrešno (0) pogrešno (0)

pogrešno (0) točno (1) pogrešno (0)

pogrešno (0) pogrešno (0) pogrešno (0)

‘‘i’ tablicai’ tablica

Page 85: Primjena računala ak.god. 2013/2014

Prioriteti ispitivanjaPrioriteti ispitivanja

(1) jednostavni logički izrazi(1) jednostavni logički izrazi

(2) negacije(2) negacije

(3) zagrade(3) zagrade

(4) konjunkcija(4) konjunkcija

(5) disjunkcija(5) disjunkcija

*

Page 86: Primjena računala ak.god. 2013/2014

Zarez: operator razdvajanjaZarez: operator razdvajanja

i = 10, i + 5; i = 10, i + 5; // // rezultat: i=15rezultat: i=15

Koristi se za Koristi se za razdvajanje izrazarazdvajanje izraza u u naredbama.naredbama.

*

Page 87: Primjena računala ak.god. 2013/2014

Operatori obnavljajućeg Operatori obnavljajućeg pridruživanjapridruživanja

Sastoje se od Sastoje se od operatoraoperatora i i znaka znaka jednakosti. jednakosti. Omogućavaju Omogućavaju kraći zapis kraći zapis naredbi:naredbi:

= += -= *= /= %== += -= *= /= %=

*

Page 88: Primjena računala ak.god. 2013/2014

Primjeri s aritmetičkim Primjeri s aritmetičkim operatorima:operatorima:

int a;

a = 20;

a += 5;

a -= 5;

a *= 5;

a /= 5;

a %= 5

a = 20a = 20

a = a = a+a+55 a=25 a=25

a = a = a -5 a -5 a = 20a = 20

a = a = a * 5 a * 5 a = 100a = 100

a = a = a / 5 a / 5 a = 20a = 20

a =a = a%5 a%5 a =a = 0 0

*

Ekvivalentni Ekvivalentni izraziizrazi

Page 89: Primjena računala ak.god. 2013/2014

Zadatak:Zadatak: Što će se ispisati: Što će se ispisati:

#include <stdio.h>#include <stdio.h>void main()void main(){{

int n = 10;n+=5; printf("n = %d \n", n);n-=20; printf("n = %d \n", n);n*=-2; printf("n = %d \n", n);n%=3; printf("n = %d \n", n);

}}

Page 90: Primjena računala ak.god. 2013/2014

Dodatak:Dodatak:

Operatori po prioritetima (hijerarhija):Operatori po prioritetima (hijerarhija):

Page 91: Primjena računala ak.god. 2013/2014

Operatori po prioritetimaOperatori po prioritetima

Unarni opUnarni op - - ! ! ++ ++ -- --

Aritm opAritm op ** / / % %

++ - -

Relacijski opRelacijski op < < <= <= > > >= >=

= == = != !=

Logičko ANDLogičko AND &&&&

Logičko ORLogičko OR ||||

op pridruživanjaop pridruživanja = += -= *= /= %== += -= *= /= %=

Page 92: Primjena računala ak.god. 2013/2014

c = a*b + d/e;c = a*b + d/e;

c = (a*(b+d)) /e;c = (a*(b+d)) /e;

t < i +1; t < i +1; t < ( i+1 ); t < ( i+1 );

5*2 >= 10; 5*2 >= 10; (5*2) >= 10; (5*2) >= 10;

1 != 7 = = 0; 1 != 7 = = 0; (1 != 7) = = 0; (1 != 7) = = 0;

1 && !0 || 1 1 && !0 || 1 rezultat je1. rezultat je1.

1 && !(0 || 1)1 && !(0 || 1) rezultat je 0. rezultat je 0.

Page 93: Primjena računala ak.god. 2013/2014

93

3. Kontrola toka program

Page 94: Primjena računala ak.god. 2013/2014

94

3. Kontrola toka program

3.1. IF3.1. IF

3.2. IF-ELSE3.2. IF-ELSE

3.3. SWITCH3.3. SWITCH

Page 95: Primjena računala ak.god. 2013/2014

95

NAREDBA if

Osnovni opći oblik ove naredbe Osnovni opći oblik ove naredbe je : je :

                if( logički_if( logički_iizraz )zraz )

                              {{ blok_naredbi blok_naredbi ; ;}

ILIILIif( logički_if( logički_iizraz )zraz ) naredbnaredba ;a ;

Page 96: Primjena računala ak.god. 2013/2014

96

NAREDBA if

Primjer: 

if ( uspjeh >= 60 ) printf(“Student je prošao. \n “);

U C U C jezikujeziku

Page 97: Primjena računala ak.god. 2013/2014

97

Pogledajmo slijedeći program koji utvrđuje je li

znak unesen s tipkovnice u rasponu od A do Z. #include <stdio.h>

void main()

{   

   char slovo;

  printf("Unesite znak : ");

   scanf(" %c", &slovo ); 

   if( slovo >= 'A' )

if( slovo <= 'Z' ) printf("\nZnak je izmedju A i Z\n") ;  

  }      

Page 98: Primjena računala ak.god. 2013/2014

98

2. Način – uporaba logičkog operatora

#include <stdio.h>void main() {      char slovo;   printf("Unesite znak : ");   scanf(" %c", &slovo );    if(slovo >= 'A‘ && slovo <='Z') printf("\nZnak je izmedju A i Z\n") ;  

else  printf("\nZnak nije izmedju A i Z\n") ;  

}      

Page 99: Primjena računala ak.god. 2013/2014

9999

ASCII tablicaASCII tablica

Page 100: Primjena računala ak.god. 2013/2014

100

Zapamtite !!!

• Korištenje praznog mjesta (ispred %c) u naredbi scanf (" %c", &slovo ); omogućava ignoriranje TAB, SPACE BAR i  ENTER tipke ako prethodno nije unesen neki znak.

Page 101: Primjena računala ak.god. 2013/2014

101

NAREDBE if - else dvostrana selekcija

Opći oblik ovih naredbi je : Opći oblik ovih naredbi je :

              ifif( logički_( logički_iizraz )zraz )

               {{blok_naredbi1blok_naredbi1;};}

elseelse    

          {{ blok_naredbi2 blok_naredbi2;};}

else omogućava da se izvrši naredba

kada je uvjet neistinit (jednak nuli)

Page 102: Primjena računala ak.god. 2013/2014

102

NAREDBA if – elsedvostrana selekcija

Primjer: 

if ( uspjeh >= 60 ) { printf(“Student je prošao. \n “); }

else { printf("\t Student je pao ispit.\n");}

Page 103: Primjena računala ak.god. 2013/2014

103

Koju vrijednost poprimaju varijable a, b, c nakon izvršenog bloka naredbi?

void main() {

int a=3, b=10,c=15;if (!(a >b)){c=a++;b=b-a;}else b=--c; }

Page 104: Primjena računala ak.god. 2013/2014

104

Primjer: Napisati program koji učitava dva cijela broja i, ako su oba parna ispisuje njihovusumu; inače treba ispisati umnožak

#include <stdio.h>#include <stdio.h>void main() void main() {{ int int prvi_brojprvi_broj, , drugi_brojdrugi_broj;; printf(”Unesite prvi broj: ” ) ;printf(”Unesite prvi broj: ” ) ; scanf(”%d”,&prviscanf(”%d”,&prvi__broj);broj); printf(”Unesite printf(”Unesite drugidrugi broj: ” ) ; broj: ” ) ; scanf(”%d”,&scanf(”%d”,&drugi_drugi_broj);broj); if((if((pprvirvi__broj%2 == 0)&& (drugibroj%2 == 0)&& (drugi__broj%2 == 0))broj%2 == 0)) printf(”%d\n”,prviprintf(”%d\n”,prvi__broj + drugibroj + drugi__broj) ;broj) ; elseelse printf(”%d\n”,prviprintf(”%d\n”,prvi__broj broj ** drugi drugi__broj) ;broj) ;}}

Page 105: Primjena računala ak.god. 2013/2014

105

// unijeti troznamenkasti broj i ispitati da li je suma znamenki jednaka umnosku

početak

pročitaj a

ne a > 99 i a<1000 da

broj nije u s = a/100 intervalu d = (a - s*100)/10 [100,999] j = a-(s*100 +d*10) s+d+j == s*d*j da ne - ispiši rez - kraj

Page 106: Primjena računala ak.god. 2013/2014

106

// unijeti troznamenkasti broj i ispitati da li je suma znamenki jednaka umnosku#include<stdio.h>void main(){

int a, s, d, j;printf("Unesite troznamenkasti broj: ");scanf("%d",&a);

if (a<1000 && a>99) { /* Da li je broj u intervalu [100, 999]*/

s = a/100; // stotice d = (a - s*100)/10; // desetice j = a - (s*100 + d*10); // jedinice printf("Broju %d suma znamenki ",a);

if (s+d+j == s*d*j) // Da li je suma = umnozak?

printf("jest jednaka "); else printf( "nije jednaka ");

printf("umnosku njegovih znamenki. \n"); }else printf("Broj nije u intervalu [100,999]!\n");

}

Page 107: Primjena računala ak.god. 2013/2014

107

BLOKOVI if - else NAREDBI if if --else else naredbnaredbee mogu se nadovezivati mogu se nadovezivati

if( logički_if( logički_iizraz1 )zraz1 )

              blok_naredbi1blok_naredbi1

else if( logički_else if( logički_iizraz2 )zraz2 )

              blok_naredbi2blok_naredbi2

else if( logički_else if( logički_iizraz3 ) zraz3 ) 

              blok_naredbi3blok_naredbi3

else if( logički_else if( logički_iizraz4 )zraz4 )

            blok_naredbi4blok_naredbi4..

………………… …………………

else    else    

        zadnji_blok_naredbizadnji_blok_naredbi

Page 108: Primjena računala ak.god. 2013/2014

108

ZADATAK

Napisati program koji omogućava unos visine (u cm) i težine (kg) za neku osobu i ispisuje jednu od sljedećih poruka: prelagan, normalan, ili pretežak, primjenom kriterija:

prelagan: težina < visina / 2.5 normalan: visina/ 2.5 <= težina <=

visina/2.3 pretežak: visina / 2.3 < težina

Page 109: Primjena računala ak.god. 2013/2014

109

#include <stdio.h>

void main()

{int tezina, visina;

printf("Unesite tezinu (kg) i visinu(cm)\n");

scanf("%d,%d%",&tezina,&visina);

if (tezina <visina/2.5)

printf(" prelagan \n");

else if (visina/2.5 <=tezina && tezina<=visina/2.3)

printf(" normalan \n");

else

printf(" pretezak \n");

}

Page 110: Primjena računala ak.god. 2013/2014

110

Sljedeći  program ispituje da li je i korisnik upisao broj između 1 i 10.

Page 111: Primjena računala ak.god. 2013/2014

111

#include <stdio.h>void main(){ int broj;

printf("Unesite broj izmedju 1 i 10 : ");scanf("%d",&broj); if( broj < 1)

{ printf("\n\t Pogresno!!!\n\t Broj %d je manji od 1.\n",broj);

}

else if( broj > 10 )

{ printf("\n\tPogresno!!!\n\t Broj %d je veci od 10.\

n",broj);

}

else { printf("\n\t\tBravo !!!\n\t Broj %d je veci od 0 i manji

od 11 \n", broj); }

}

Page 112: Primjena računala ak.god. 2013/2014

112

Sljedeći program radi kao jednostavni kalkulator:

Page 113: Primjena računala ak.god. 2013/2014

113

#include <stdio.h>void main() {   int    nije_operator =0; char   a_operator;      float  broj1, broj2, rezultat;            printf("Unesite dva broja i operator\n");    printf(" broj1 operator broj2\n");   scanf("%f%c%f ", &broj1, &a_operator, &broj2);

if (a_operator == '*')   rezultat = broj1 * broj2;   else if (a_operator == '/')   rezultat = broj1 / broj2;    else if(a_operator == '+')         rezultat = broj1 + broj2;    else if(a_operator == '-')           rezultat = broj1 - broj2;      else           nije_operator = 1;

if( nije_operator) printf("Nedozvoljeni operator.\n"); 

else printf("%f %c %f iznosi %f .\n", broj1, a_operator, broj2, rezultat ); }

Page 114: Primjena računala ak.god. 2013/2014

114

if naredba i uvjetni operator ?• Sljedeće dvije naredbe su ekvivalentne:1) max = a>b ? a : b2) if(a>b) max=a; else max=b;• Opći oblik je:     logički_izraz ? izraz1 : izraz2

• Ako je Ako je logički_izrazlogički_izraz istinit (TRUE) tj. različit od istinit (TRUE) tj. različit od nule , izvršava se izraz1, a ako je neistinit  (FALSE) nule , izvršava se izraz1, a ako je neistinit  (FALSE) , tj. nula, tada se izvršava izraz2 , tj. nula, tada se izvršava izraz2

Page 115: Primjena računala ak.god. 2013/2014

115

if naredba i uvjetni operator ?• Što ispisuje slijedeći isječak koda te koje će Što ispisuje slijedeći isječak koda te koje će

vrijednosti varijable poprimiti nakon što se taj vrijednosti varijable poprimiti nakon što se taj kod izvrši?kod izvrši?

int a = 1, b = 2, c = 3, d = 4;int a = 1, b = 2, c = 3, d = 4;

printf("%d\n%d", ++a, ((d/=8) ? c-- : b--));printf("%d\n%d", ++a, ((d/=8) ? c-- : b--));

• PridruPridružživanje ima manji prioritet od dijeljenja, pa izrazivanje ima manji prioritet od dijeljenja, pa izraz d/=8d/=8 odgovaraodgovara izrazuizrazu dd = ( = (d/8d/8))

• PPrvo se a dijeli s rvo se a dijeli s 88, a zatim se rezultat ponovno posprema u, a zatim se rezultat ponovno posprema u varijablu varijablu dd

d/8d/8 = 4/ 8 = 0= 4/ 8 = 0 nova vrijednost varijable nova vrijednost varijable dd iznosi iznosi nulanula

• Vrijednost 0 Vrijednost 0 = FALSE= FALSE , pa se evaluira IZRAZ2 , pa se evaluira IZRAZ2= b--= b--

Page 116: Primjena računala ak.god. 2013/2014

116

Uvjetna naredba – kratki oblik• Treba unijeti cijeli broj različit od 0 pa ispisati apsolutnu

vrijednost broja. Ispis neka bude oblika: Upisi broj:Apsolutna vrijednost je....

#include<stdio.h>#include<stdio.h>

void main()void main()

{ int a;{ int a;

printf("Upisi broj:");printf("Upisi broj:");

scanf("%d",&a);scanf("%d",&a);

(a==0) ? printf(“ ERROr \n”) :(a==0) ? printf(“ ERROr \n”) :

(a<0)(a<0) ?? printf("Apsolutna vrijednost je %d \n",-a)printf("Apsolutna vrijednost je %d \n",-a) :: printf("Apsolutna vrijednost je %d\n ",a);printf("Apsolutna vrijednost je %d\n ",a);

}}

Page 117: Primjena računala ak.god. 2013/2014

117

#include <stdio.h>

void main()

{

int broj;

printf("Ispisat cu da li ste unijeli nulu,pozitivan ili negativan broj!\n");

printf("Unesite broj : ");

scanf("%d", &broj );(broj==0) ? printf("nula\n") : ((broj>0) ? printf("pozitivan\n") : printf("negativan\n "));

}

Page 118: Primjena računala ak.god. 2013/2014

118

Sljedeći program koristi Sljedeći program koristi ifif naredbu s naredbu s logičkim logičkim operatorom ILI (||)operatorom ILI (||) da ocijeni je li korisnikov upis da ocijeni je li korisnikov upis

uu rasponu između 1 i 10.rasponu između 1 i 10. #include#include <stdio.h> <stdio.h>voidvoid main()main() {{ intint broj; broj; printfprintf("Unesite broj izmedju 1 i 10 :("Unesite broj izmedju 1 i 10 :\n\n "); "); scanfscanf("%d", &broj);("%d", &broj); ifif (broj(broj < 1< 1 |||| brojbroj > 10> 10) )

{{printfprintf("\n\t\tPogresno!!!\n\t Broj %d nije ("\n\t\tPogresno!!!\n\t Broj %d nije između 1 i 10.\n", broj);između 1 i 10.\n", broj); } }

elseelse { { printfprintf("\n\t\tBravo !!!\n\t Broj %d je ("\n\t\tBravo !!!\n\t Broj %d je veci od 0 i manji od 11 \n", broj); }veci od 0 i manji od 11 \n", broj); }

}}

Page 119: Primjena računala ak.god. 2013/2014

119

Koju vrijednost poprimaju varijable a i b nakon izvršenog bloka naredbi?

#include <stdio.h>void main() {int a=3, b=0;if (a +=b){a+=1;b=a+1;}printf("a=%4d\n b=%d\n",a,b);}

Page 120: Primjena računala ak.god. 2013/2014

120

NAREDBA switch Naredba Naredba switchswitch je bolji način pisanja programa kada je bolji način pisanja programa kada

se pojavljuje više naredbi se pojavljuje više naredbi elseelse if if Opći oblikOpći oblik

      switch ( cjelobrojni_izraz )switch ( cjelobrojni_izraz ){{ case vrijednost1:       case vrijednost1:       

blok_naredbi1blok_naredbi1break;break;

case vrijednost2:case vrijednost2:               blok_naredbi2blok_naredbi2

break;break;case vrijednost3:       case vrijednost3:       

blok_naredbi3blok_naredbi3break; break;

..……

........default:      default:          

blok_naredbiblok_naredbi}}      

Page 121: Primjena računala ak.god. 2013/2014

121

ZAPAMTI!!!

• Ključna riječ break mora biti uključena na kraju svake alternative, osim zadnje

• Ključna riječ default označava alternativu koja će biti izabrana ako nijedna od prethodnih ne odgovara vrijednosti izraza, a može biti i ispuštena

• Desna zagrada na kraju označava kraj izbora alternativa

Page 122: Primjena računala ak.god. 2013/2014

122

Pravila za switch naredbu

Vrijednosti 'case' moraju biti cjelobrojne ili znakovne konstante

Poredak 'case' izraza nije važan

‘Default’ se može smjestiti bili gdje unutar switch bloka (uobičajeno je na kraju)

Ne smiju se koristiti izrazi kao vrijednosti 'case'

Page 123: Primjena računala ak.god. 2013/2014

123

Kolika je vrijednost varijable a nakon što se izvrši sljedeći blok naredbi #include <stdio.h>#include <stdio.h>void main() void main() {{ int a=int a=3333;;

switch(a%4)switch(a%4){{ case 1: a+=2;break;case 1: a+=2;break; case 2: a-=3;break;case 2: a-=3;break; default:a+=4;default:a+=4;}}printf("\na=%d\n",a);printf("\na=%d\n",a);

}}

Page 124: Primjena računala ak.god. 2013/2014

124

#include <stdio.h>void main () { int broj; printf("Unesite brojcanu vrijednost: \n"); scanf("%d",&broj); switch (broj) { case 1:

printf("Jedan\n"); break; case 2:

printf("Dva\n"); break; case 3:

printf("Tri\n"); break; default:

printf("Unijeli ste pogresnu vrijednost\n"); break; }}

Učitati s tipkovnice brojčanu vrijednost od 1 do 3 i ispisati tu vrijednost slovima

Page 125: Primjena računala ak.god. 2013/2014

125

Napiši program koji će za brojeve 1,2,3,4 ništa ispisati, a ako je broj jednak 5 ispisati će 5, ako je nešto drugo ispisat će Pogrešan unos.

Početak

Unos broja

Ispitivanje broja

Broj je od 1-4

Broj:5

Pogrešan unos

Kraj

#include<stdio.h>void main(){ int x; printf("upiši broj"); scanf("%d",&x); switch(x) { case 1: case 2: case 3: case 4: {

printf("broj je 1-4\n");break;

} case 5:

{ printf("broj je 5\n"); break;

} default:

printf("Broj van granica\n");

}}

Page 126: Primjena računala ak.god. 2013/2014

126

Napiši program koristeći switch case naredbu kojim ćeš upisati 2 broja po želji i operator po želji +-*/ te ovisno o izboru operatora izbaciti rješenje. Početak

Unos broja1Unos broja2

Ispiši omjer

Kraj

Ispitivanje operatora

Ispiši umnožak Ispiši razliku

Ispiši zbroj

Funkcija za omjer

Funkcija za zbroj

Funkcija za umnozak

Funkcija za razliku

/

* -

+

Page 127: Primjena računala ak.god. 2013/2014

127

// kalkulator#include <stdio.h>#include <stdio.h>void main()void main(){{ charchar oper; oper; //operator//operator floatfloat broj1, broj2, rezultat; broj1, broj2, rezultat;printf("Unesite dva broja i operator \n");printf("Unesite dva broja i operator \n");scanf("%f%c%f", &broj1, &oper, &broj2);scanf("%f%c%f", &broj1, &oper, &broj2);switchswitch (oper) (oper){{ case '+':case '+':

rezultat = broj1 + broj2;rezultat = broj1 + broj2;printf("%f %c %f iznosi %f.\n", printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat );broj1,oper,broj2,rezultat );breakbreak;;

case'-':case'-':rezultat = broj1 - broj2;rezultat = broj1 - broj2;printf("%f %c %f iznosi %f.\n", printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat );broj1,oper,broj2,rezultat );breakbreak;;

case '/':case '/':rezultat = broj1 / broj2;rezultat = broj1 / broj2;printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat); printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat); break;break;

case '*':case '*':rezultat = broj1 * broj2;rezultat = broj1 * broj2;

printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat ); printf("%f %c %f iznosi %f.\n", broj1,oper,broj2,rezultat ); break;break;

default:default:printf("Nedozvoljeni operator.\n");}printf("Nedozvoljeni operator.\n");} } }

Page 128: Primjena računala ak.god. 2013/2014

128

Za domaći rad:1. Napišite C program koji omogućava korisniku

da upiše 5 brojeva između 1 i 100. Program treba izračunati prosječnu vrijednost unesenih brojeva , te odrediti koji su brojevi manji od  54 i koliko je takvih brojeva.

2. Napišite program koji ispituje (pomoću modul operatora %) da li je upisani broj paran ili neparan.

3. Proširite ZADATAK 2 za provjeru parnosti, tako da za parne i neparne brojeve dodatno ispitate djeljivost s 3, a za parne brojeve i djeljivost s 4.

Page 129: Primjena računala ak.god. 2013/2014

Dodatak:

• Kontrola toka programa:

129

Page 130: Primjena računala ak.god. 2013/2014

KONTROLA TOKA PROGRAMA

• JEDNOSTRUKO UVJETNO GRANANJE (IF)

if (uvjet) opći oblik naredbe za jednostruko grananje

{

blok naredbi;

}-ako je uvjet ispunjen(tj.istinit), izvršava se blok naredbi.

-u protivnom se blok naredbi preskače.

-blok naredbi se može sastojati od 1 ili više naredbi.

Page 131: Primjena računala ak.god. 2013/2014

Pr. int a;

scanf(“%d”,&a);

if (a>10)

{

a=a+3;

}

printf(“%d”,a);

Page 132: Primjena računala ak.god. 2013/2014

Pr.int a;scanf(“%d”,&a);if (a%2 = = 0){

printf(“Unijeli ste paran broj”);}if (a%2 != 0){

printf(“Unijeli ste neparan broj”);}- uvjet može biti bilo koji logički ili aritmetički izraz.

Page 133: Primjena računala ak.god. 2013/2014

• VIŠESTRUKA UVJETNA GRANANJA (IF)if (uvjet1) opći oblik

{

blok naredbi1;

}

else

{

blok naredbi2;

}

-Ako je uvjet1 ispunjen izvršava se blok naredbi1 i preskače blok naredbi2, u protivnom se preskače blok naredbi1 i izvršava bloknaredbi2.

Page 134: Primjena računala ak.god. 2013/2014

if (uvjet1)

{

blok naredbi1;

}

else if(uvjet2)

{

blok naredbi2;

}

else if(Uvjet7)

{

blok naredbi7;

}

else

{

blok naredbi8;

}

Ispitivanje niza uvjeta.

-Dakle, ako je bilo koji uvjet ispunjen izvršit će se blok naredbi pridružen tom uvjetu, a svi ostali blokovi naredbi će biti preskočeni

-Broj uvjeta nije ograničen.

Page 135: Primjena računala ak.god. 2013/2014

Pr.

int a;

scanf(“%d”,&a);

if(a%2==0)

{

printf(“Broj %d je paran”,a);

}

else

{

printf(“Broj %d je neparan”,a);

}

Page 136: Primjena računala ak.god. 2013/2014

• VIŠESTRUKA UVJETNA GRANANJA (SWITCH-CASE)Omogućava izbor jednog između više mogućih putova daljnjeg izvođenja

programa, što ovisi o vrijednosti varijable tj. izraza.

switch(izraz)

{

case konstanta1:

blok naredbi1;

break;

case konstanta2:

blok naredbi2;

break;

….

case konstanta9:

blok naredbi9;

break;

default:

blok naredbi10;

break;

}

-Prvo se izračuna vrijednost izraza,a zatim se rezultat izraza usporedi s konstantama. Ako je rezultat izraza jednak nekoj od konstanti, tada se izvršava blok naredbi pridružen toj konstanti.Ako rezultat ne odgovara ni jednoj od konstanti, izvršava se blok naredbi pridružen opciji default.-Izvršavanje bloka naredbi neke konstante se prekida naredbom break ili zagradom } koja označava kraj switch – case strukture.

Page 137: Primjena računala ak.god. 2013/2014

• Switch-case ispituje jednakost rezultata izraza i konstante, dok kod if-a izraz moze biti bilo sto.

• Dvije konstante u case ne mogu imati istu vrijednost.• Ako blok naredbi u case ne završava s break, nastavlja se izvršavati

blok naredbi idućeg case-a. Naredbe se izvršavaju sve dok se ne naiđe na break.

Page 138: Primjena računala ak.god. 2013/2014

int i;

scanf(“%d”,&i);

switch(i)

{

case 1:

printf(“Izabrali ste broj 1”);

break;

case 2:

printf(“Izabrali ste broj 2”);

break;

default:

printf(“Pogrešan izbor”);

break;

}

Page 139: Primjena računala ak.god. 2013/2014

int i;

scanf(“%d”,&i);

switch(i)

{

case 1:

case 2:

case 3:

blok naredbi 1;

break;

case 4:

case 5:

blok naredbi 2;

break;

default:

printf(“Niste unijeli niti jedan od ovih brojeva”);

break;

}

Page 140: Primjena računala ak.god. 2013/2014

PROGRAMSKE PETLJE

Page 141: Primjena računala ak.god. 2013/2014

PETLJE 141

PROGRAMSKE PETLJEPROGRAMSKE PETLJE

1.1. Petlja s eksplicitnim brojačemPetlja s eksplicitnim brojačem: : forfor

2.2. S izlazom na vrhuS izlazom na vrhu: : whilewhile

3.3. S izlazom na dnuS izlazom na dnu: do_: do_whilewhile

Petlje omogućuju ponavljanje izvođenja Petlje omogućuju ponavljanje izvođenja jedne ili više linija programskog kodajedne ili više linija programskog koda

Page 142: Primjena računala ak.god. 2013/2014

PETLJE 142

nene

4.1. Petlja s eksplicitnim brojačem4.1. Petlja s eksplicitnim brojačem: : forfor

formatfor for ((inicijalizacijainicijalizacija; uvjet; izraz_prirasta); uvjet; izraz_prirasta) // blok_naredbi // blok_naredbi

koristi se za ponavljanje izraza unutar petlje točno koristi se za ponavljanje izraza unutar petlje točno određeni broj putaodređeni broj puta

inicijalizacija kontrolne varijable

blok naredbi

promjena vrijednosti kontrolne varijable

promjena vrijednosti kontrolne varijable

uvjet

prekidprekidponavljanjaponavljanja

dada

Page 143: Primjena računala ak.god. 2013/2014

PETLJE 143

Primjer jednostavne for petlje

Primjer#include <stdio.h>int brojac;main(){ /* Program broji do 20 i ispisuje brojeve */ for (brojac = 1; brojac <= 20; brojac ++) printf("\n%d", brojac );}

brojac = 1

ispis

brojac = brojac + 1

brojac <= 20

prekidprekidponavljanjaponavljanja

dada

nene

Page 144: Primjena računala ak.god. 2013/2014

PETLJE 144

• Što će ispisati sljedeća petlja?void main() void main()

{{

for (int i=1; i<5; i++); printf('' %d\n'',i);for (int i=1; i<5; i++); printf('' %d\n'',i);

}}

Page 145: Primjena računala ak.god. 2013/2014

PETLJE 145

#include <stdio.h>#include <stdio.h>void void main()main(){{

int i,n, suma=0;int i,n, suma=0;printf("\n Unesi jedan pozitivni cijeli broj:");printf("\n Unesi jedan pozitivni cijeli broj:");

scanf("%d",&n);scanf("%d",&n);for( i = 1; i <= n; i++ )for( i = 1; i <= n; i++ )

{suma += i;}{suma += i;} printf("\n printf("\n Zbroj brojeva od 1 doZbroj brojeva od 1 do %d %d iznosiiznosi %d.\n",n,%d.\n",n,

suma)suma);;printf("\n printf("\n ProsjekProsjek brojeva od 1 do brojeva od 1 do %d %d iznosiiznosi %%.2f.2f.\n",n,.\n",n,

(float) (float) sumasuma/n/n));;}}

PRIMJER:PRIMJER: Program ispisuje sumu prvi Program ispisuje sumu prvi nn prirodnih prirodnih brojeva.brojeva.

Page 146: Primjena računala ak.god. 2013/2014

PETLJE 146

#include <stdio.h>#include <stdio.h>void void main()main(){{

int i,n, int i,n, broj,broj,suma=0;suma=0;printf("\n Unesi jedan pozitivni cijeli broj:");printf("\n Unesi jedan pozitivni cijeli broj:");

scanf("%d",&n);scanf("%d",&n);for( i = 1; i <= n; i++ )for( i = 1; i <= n; i++ )

{{scanf(“%d”,&broj) ;scanf(“%d”,&broj) ;if (broj<1 || broj>100) scanf(“%d”,&broj);if (broj<1 || broj>100) scanf(“%d”,&broj);suma += suma += brojbroj;};} printf("\n printf("\n Zbroj brojeva iznosiZbroj brojeva iznosi %d.\n",%d.\n", suma)suma);;printf("\n printf("\n ProsjekProsjek brojeva iznosi brojeva iznosi %%.2f.2f.\n",.\n", (float) (float) sumasuma/n/n));;}}

PRIMJER:PRIMJER: Program ispisuje sumu prvi Program ispisuje sumu prvi nn prirodnih prirodnih brojeva.brojeva.

Page 147: Primjena računala ak.god. 2013/2014

PETLJE 147

PRIMJER:PRIMJER: Ovaj program računa faktorijelu unesenog Ovaj program računa faktorijelu unesenog broja n. Faktorijel je umnožak svih brojeva od 1 do n:broja n. Faktorijel je umnožak svih brojeva od 1 do n:

n! =1 · 2 · 3 · 4 · ... · ( n – 2 ) · ( n – 1 ) · nn! =1 · 2 · 3 · 4 · ... · ( n – 2 ) · ( n – 1 ) · n

• Rješenje s programskom petljom s poznatim brojem ponavljanja

• Pseudokoduuččitaj (n)itaj (n)fakt:=1fakt:=1za i=1 do nza i=1 do n

fakt:=fakt*ifakt:=fakt*i

ispiši (n,faktispiši (n,fakt)

Page 148: Primjena računala ak.god. 2013/2014

PETLJE 148

Program za izračunavanje N faktorijelarješenje u C-u

#include <stdio.h>#include <stdio.h>voidvoid main()main(){{

int i=2, n;int i=2, n;intint fak=1; fak=1;printf(" Unesi prirodan broj : "); printf(" Unesi prirodan broj : "); // manji od 170 !?// manji od 170 !?scanf("%d",scanf("%d", &n);&n);

for (i;i<=n; i++)for (i;i<=n; i++){fak *=i ;}{fak *=i ;}

printf("\n\n printf("\n\n Faktorijela od %d je %Faktorijela od %d je %dd.\.\n",n,fak);n",n,fak);}}

Page 149: Primjena računala ak.god. 2013/2014

PETLJE 149

PRIMJER: PRIMJER: ISPIS ZNAKOVAISPIS ZNAKOVA

#include<stdio.h>   

int main()

{

     char slovo;

      for( slovo = 'A'; slovo <= 'Z'; slovo++ ) {  printf("%c ", slovo);}        return 0;

}

Page 150: Primjena računala ak.god. 2013/2014

PETLJE 150

• U C++ i deklaracija varijabli može se izvesti u samoj petlji. U našem primjeru to bi izgledalo ovako:

#include <stdio.h>main(){ int zbroj = 0;

for(int brojac = 1; brojac <= 10; zbroj += brojac, brojac++ );

printf("Zbroj = %d\n", zbroj );return 0;}

Page 151: Primjena računala ak.god. 2013/2014

PETLJE 151

Ugniježđena Ugniježđena ForFor petlja petlja

##includeinclude < <stdiostdio..hh>>mainmain()(){ {

int i,j;int i,j;for(i=1;i<10;i++)for(i=1;i<10;i++)

{{for(j=1;j<10;j++)for(j=1;j<10;j++)

printf("%3d",i*j);printf("%3d",i*j);printf("\n");printf("\n");

}}}}

Page 152: Primjena računala ak.god. 2013/2014

PETLJE 152

4.2. Petlja s izlazom na vrhu4.2. Petlja s izlazom na vrhu: : whilewhile

uvjetuvjet

formatwhile (uvjet_izvođenja) naredba;

Blok naredbi

PrekidPrekidponavljanjaponavljanja

dada

nene

iliwhile (uvjet_izvođenja) { blok_naredbi; }

NNaredba aredba ćće se izvre se izvrššavati sve dok izraz ima avati sve dok izraz ima vrijednost istinevrijednost istine (razli(različčit od nule)it od nule)

Page 153: Primjena računala ak.god. 2013/2014

PETLJE 153

wwhilehile petlja petlja

a != 0

a = 5 primjerint a = 5;int b;while (a != 0){ printf("\n Unesi cijeli broj b:"); scanf("%d",&b); a = a - b; }

a = a -b

učitaj:b (a = 0)(a = 0)

PrekidPrekidponavljanjaponavljanja

dada

nene

Page 154: Primjena računala ak.god. 2013/2014

PETLJE 154

wwhilehile petlja petlja

• Kolika je vrijednost varijable a i b Kolika je vrijednost varijable a i b nakon izvršenog blok naredbi?nakon izvršenog blok naredbi?

void main()void main(){{int a=25,b=0,c=4;int a=25,b=0,c=4;while (a>b)while (a>b){{ a-=c;a-=c;

b++;b++;}}printf("\n a=%d\tb=%d,,,\n",a,b);printf("\n a=%d\tb=%d,,,\n",a,b);

}}

Page 155: Primjena računala ak.god. 2013/2014

PETLJE 155

Primjer programa s petljom while 

#include <stdio.h>void main(){ 

  int  brojac = 0;      while( brojac <= 10 )

{ printf("%d\n",brojac);         ++brojac; }        }

Page 156: Primjena računala ak.god. 2013/2014

PETLJE 156

Primjer: Primjer: Suma svih parnih brojeva od 1 do n.Suma svih parnih brojeva od 1 do n.

/*/*Suma svih parnih brojeva od 1 do n*/Suma svih parnih brojeva od 1 do n*/#include#include <stdio.h> <stdio.h>voidvoid main()main(){{  

int  int  n, in, i , suma=0, suma=0; ;  i=1;i=1;

printf("\n Unesite vrijednost za n!");printf("\n Unesite vrijednost za n!");scanf("%d", &n);scanf("%d", &n);

        while( while( ii <= <= nn ) ) { { if( i%2==0 )if( i%2==0 )

suma+=i;suma+=i;                  ii++; } ++; }         printf("\n printf("\n Suma svih parnih brojeva od 1 do %d iznosiSuma svih parnih brojeva od 1 do %d iznosi %d\ %d\

nn", n,", n, suma);suma); }}

Page 157: Primjena računala ak.god. 2013/2014

PETLJE 157

Primjer: izraPrimjer: izraččunati prosjek nepoznatog broja unati prosjek nepoznatog broja pozitivnihpozitivnih cijelih brojeva (brojevi se ucijelih brojeva (brojevi se uččitavaju dok se itavaju dok se ne unese 0ne unese 0))..

#include <stdio.h>#include <stdio.h>void main () void main () {{ int suma, broj, n;int suma, broj, n;

suma=0; n=0;suma=0; n=0;printf(“Unesi broj”);printf(“Unesi broj”);scanf(“d%”,&broj);scanf(“d%”,&broj); /* inicijalno /* inicijalno sstanje */tanje */while (broj!=0)while (broj!=0) {{ if (broj>0) if (broj>0)

{{ suma +=broj;suma +=broj; ++n;++n; }}

scanf(“d%”,&broj); scanf(“d%”,&broj); /* sva ostala /* sva ostala ččitanja */itanja */

}}if (n>0) printf(“Prosjek = %f\n”, float suma/n);if (n>0) printf(“Prosjek = %f\n”, float suma/n);}}

Page 158: Primjena računala ak.god. 2013/2014

PETLJE 158

4.3. Petlja s izlazom na dnu4.3. Petlja s izlazom na dnu: : do_whiledo_while

formatdo{ blok_naredbi;} while (uvjet_izvođenja);

PrekidPrekidponavljanjaponavljanja

uvjetuvjet

Blok naredbi

dada

neneNNaredba aredba ćće se izvre se izvrššavati avati

sve dok sve dok uvjetuvjet ima ima vrijednost istinevrijednost istine

ZaZa razliku od razliku od whilewhile petlje petlje vrijednost vrijednost uvjetauvjeta se se kontrolira na krajukontrolira na kraju prolaza prolaza kroz petljukroz petlju

Page 159: Primjena računala ak.god. 2013/2014

PETLJE 159

do_whiledo_while petlja petlja

a != 0

primjerint a = 5;int b;do{ printf("\n Unesi cijeli broj b:"); scanf("%d",&b); a = a - b; }while (a != 0);

a = a -b

učitaj:b

(a = 0)(a = 0)

prekidprekidponavljanjaponavljanja

dada

nene

Page 160: Primjena računala ak.god. 2013/2014

PETLJE 160

Primjer

• Sljedeći program ispisuje broj, koji unese korisnik, od kraja. To čini koristeći ostatak dijeljenja ( % operator ) da bi krajnje desnu znamenku upisao u  varijablu  d_znamenka.

• Početni broj se zatim dijeli sa 10, i operacija se ponavlja dok broj ne postane jednak 0.

Page 161: Primjena računala ak.god. 2013/2014

PETLJE 161

#include <stdio.h>void    main(){   int  broj, d_znamenka;             printf("Unesite broj koji će se ispisati od kraja.\n");

    scanf("%d", &broj);     do

{   d_znamenka = broj % 10;                       

printf("%d", d_znamenka);                        broj = broj / 10; }

while( broj != 0 );       printf("\n"); }

Page 162: Primjena računala ak.god. 2013/2014

PETLJE 162

Uz pomoć do while petlje ispisati brojeve veće od 500 i manjih 700 koji su djeljivi sa 17. Ispisati koliko ima takvih brojeva. #include <stdio.h>void main(){int n,i; n=500; i=0; do {n++; if(n%17==0) {i++; printf(" %d-ti broj je %d \n",i,n); }} while(n<700);printf("\n Ukupno je takvih brojeva %d\n", i); }

Page 163: Primjena računala ak.god. 2013/2014

PETLJE 163

BBeskonačna peljaeskonačna pelja

• Ukoliko je u stukturi petlje uvjet za ponavljanje petlje uvijek istinit, dobije se beskonačna pelja

for(int brojac = 1;;brojac++ ); for(int brojac = 1;;brojac++ );

for(int brojac = 1; brojac <= 10; );for(int brojac = 1; brojac <= 10; );

for(int brojac = 1; brojac <= 10; for(int brojac = 1; brojac <= 10; brojac--,brojac++ );brojac--,brojac++ );

Page 164: Primjena računala ak.god. 2013/2014

PETLJE 164

5. Kontrola toka programa Kontrola toka programa Skokovi u programuSkokovi u programu

• Naredba BreakNaredba Break• Naredba ContinueNaredba Continue• Naredba GoToNaredba GoTo

Page 165: Primjena računala ak.god. 2013/2014

PETLJE 165

Naredbe skokaNaredbe skoka

• Bezuvjetni skok• Uvjetni skok

– Pomoću ovih naredbi se može eksplicitno zadati da se izvršenje programa nastavi naredbom koja je označena nekim imenom

Page 166: Primjena računala ak.god. 2013/2014

PETLJE 166

Prijevremeni prekid ponavljanja: break

Primjerint a;do { printf("Unesi broj"); scanf ("%d",&a); if (a==5)

break; //prekida petlju printf("\n%d",a);}while (a!=0);

Učitaj: a

ispis: a

a= =5

a!=0

prijevremenprijevremenii

prekidprekidponavljanjaponavljanja

ddaa

ddaa

nnee

nnee

regularniregularniprekidprekid

ponavljanjaponavljanja

Rezultat izvođenja1.primjer: 2.primjer:a=2 a=2a=2 a=2a=3 a=5a=3 <prijevremenia=0 prekid><regularni prekid>

*

ZadatakProgram opetovano učitava varijablu a.

Regularni prekid petlje: (a==0). Prijevremeni prekid petlje: (a= =5).

Page 167: Primjena računala ak.god. 2013/2014

PETLJE 167

Program koristi Program koristi breakbreak naredbu u naredbu u beskonačnoj pelji, koja ispisuje sve brojeve beskonačnoj pelji, koja ispisuje sve brojeve od 0 do 10 i prekida se kad se unese broj 5od 0 do 10 i prekida se kad se unese broj 5

#include <stdio.h>void main(){  int  brojac = 0;   while( brojac <= 10 ) {    

printf("%d\n", brojac); if( brojac==5) break; 

    ++brojac;  }}

Page 168: Primjena računala ak.god. 2013/2014

PETLJE 168

Skok na kraj petlje: continue

Primjerint a;do { printf("Unesi broj a "); scanf ("%d",&a); if (a<=0)

continue; //preskok ispisa printf("\n%d",a);}while (a<=100);

Učitaj: a

ispis: a

a<=0

a<=100

dada

dada

nene

prekidprekidponavljanjaponavljanja

Rezultat izvođenja1.primjer: 2.primjer:a=2 <unos> a=2 <unos>a=2 <ispis> a=2 <ispis>a=0 <unos> a=5 <unos><preskok ispisa> a=5 <ispis>a=101 <unos> a=101 <unos>a=101 <ispis> a=101 <ispis><prekid> <prekid>

ZadatakProgram opetovano učitava varijablu a. Prekid

ponavljanja: (a>100). Preskok akcije:a negativno ili nula.

nene

Page 169: Primjena računala ak.god. 2013/2014

PETLJE 169

Ako želimo da se u našem programu ispišu svi brojevi od 0 do 10 osim broja 5, tada ćemo while

petlju modificirati na slijedeći način:

##includeinclude <stdio.h> <stdio.h>

voidvoid main() main()

{ { 

      int  brojac = -1;int  brojac = -1;

      while( brojac < 10)while( brojac < 10)

{ ++brojac;{ ++brojac;

if( brojac==5) if( brojac==5) continue;continue;

            printf("%d\n", brojac); }printf("%d\n", brojac); }

}}

Page 170: Primjena računala ak.god. 2013/2014

PETLJE 170

Naredba goto

• Naredba goto omogućava bezuvjetni skok na neku drugu naredbu unutar iste funkcije

• Opći oblik je:

goto oznaka_programske_linije;

• NIJE POŽELJNO KORISITITI

Page 171: Primjena računala ak.god. 2013/2014

PETLJE 171

Razmatrat ćemo slučaj kada korisnik upisuje neku vrijednost, a onda se provjerava pripada li ona zadanom rasponu,  npr. između  1 i 100

Sve dok uvjet nije zadovoljen unos i provjera se ponavlja

Page 172: Primjena računala ak.god. 2013/2014

PETLJE 172

#include <stdio.h> void main()   {  

int broj;  { 

unos: printf("Unesite broj izmedju 1 i 100\n\n");     scanf("%d", &broj );       if( (broj <1) (broj>100))                      

{                      printf("Broj je izvan zadanog raspona\n\

n"); goto unos;  

          }           printf("Broj je %d\n", broj ); }}

Page 173: Primjena računala ak.god. 2013/2014

PETLJE 173

Program provjerava je li znak kojeg upisuje korisnik između  A-Z. #include#include <stdio.h> <stdio.h> voidvoid main() main(){{ charchar znak; znak;

intint uvjet = 0; uvjet = 0;whilewhile(!uvjet)(!uvjet)

{{ printf("Unesite znak A-Z\n");printf("Unesite znak A-Z\n");

scanf(" %c", &znak);scanf(" %c", &znak); ifif((znak >= 'A') && (znak <='Z'))((znak >= 'A') && (znak <='Z'))

uvjet = 1;uvjet = 1; elseelse

printf("Znak je izvan dozvoljenog printf("Znak je izvan dozvoljenog raspona\n");raspona\n");

}} printf("Upisani znak je %c\n", znak);printf("Upisani znak je %c\n", znak);} }

Page 174: Primjena računala ak.god. 2013/2014

PETLJE 174

Izračunavanje broja dana; obično rješenjeIzračunavanje broja dana; obično rješenje

#include<iostream.h>

int main () {

int Sij,Velj,Ozu,Tra,Svi,Lip; int Srp,Kol,Ruj,Lis,Stu,Pro,DD,MM,GG,i;

Sij=Ozu=Svi=Srp=Kol=Lis=Pro=31; Tra=Lip=Ruj=Stu=30;

do{

int Velj=28;

cout<<“unesi godinu(GG): “;cin>> GG;cout<<“ unesi mjesec(MM): “;cin>> MM;cout<<“ unesi dan(DD): “;cin>> DD;cout<<endl;

if (GG%4)==0Velj=29;

int Suma=0;

deklaracija

početak

inicijalizacija

ponavljanje

veljača!

učitavanje

prestupnagodina

suma dana!

Page 175: Primjena računala ak.god. 2013/2014

PETLJE 175

Izračunavanje broja dana; switch-rješenjeIzračunavanje broja dana; switch-rješenje

include<iostream.h>int main {

//deklaracija mjeseci//inicijalizacija mjesecido {

//učitavanje datuma//prestupna godinaint Suma=0;switch (MM) {

case 12:Suma=Suma+Stu;

case 11:Suma=Suma+Lis;

case 10:Suma=Suma+Ruj;

case 9:Suma=Suma+Kol;

case 8:Suma=Suma+Srp;

case 7:Suma=Suma+Lip;

case 6:Suma=Suma+Svi;

case 5:Suma=Suma+Tra;

Page 176: Primjena računala ak.god. 2013/2014

PETLJE 176

Rješenje br. 2Rješenje br. 2

case 4:Suma=Suma+Ozu;

case 3:Suma=Suma+Velj;

case 2:Suma=Suma+Sij;

case 1:Suma=Suma+DD;

}//ispis//indikacija kraja

} while (i==1);return 0;

}

Page 177: Primjena računala ak.god. 2013/2014

PETLJE 177

1.1. Definirati varijable (brojac, x, broj poz., Definirati varijable (brojac, x, broj poz., broj neg., broj nula.)broj neg., broj nula.)

2.2. Upisati elementeUpisati elemente

3.3. Ispitati elemente pomoću IF naredbeIspitati elemente pomoću IF naredbe

4.4. Prebrojati broj pozitivnih, negativnih i Prebrojati broj pozitivnih, negativnih i broj nulabroj nula

5.5. Ispisati rezultateIspisati rezultate

Algoritam

Zadajte 10 brojeva. Izračunate i ispiši Zadajte 10 brojeva. Izračunate i ispiši broj pozitivnih brojeva, broj negativnih broj pozitivnih brojeva, broj negativnih brojeva i broj pojavljivanja nulebrojeva i broj pojavljivanja nule..

Page 178: Primjena računala ak.god. 2013/2014

PETLJE 178

#include <stdio.h> void main(){int brojac;int x, brpoz=0, brneg=0, brnula=0;for (brojac=1; brojac<=10; brojac++){

printf ("Upisi brojeve :\n");scanf(“ %d\n ",&x);if(x>0)

brpoz=brpoz+1;else if(x<0)

brneg=brneg+1;else

brnula=brnula+1;}printf("Broj pozitivnih je %d,Broj negativnih je %d, Broj nula je %d\n",

brpoz, brneg, brnula);}

Page 179: Primjena računala ak.god. 2013/2014

PETLJE 179

#include <stdio.h>void main() { int min,redni,broj, n,i; printf(" Upišite broj n:\n"); scanf("%d",&n); printf(" \n Upišite broj :\n"); scanf("%d",&broj); min=broj; redni=1;

for (i=2;i<=n;i++) { printf(" Upišite broj :\n"); scanf("%d",&broj);

if (broj<min) { min=broj; redni=i;} }

printf("\nNajmanji broj je %d\n",min); printf("to je %d broj po redu\n",redni);}

Unijeti n brojeva i ispisati najmanji broj, kao i njegov redni Unijeti n brojeva i ispisati najmanji broj, kao i njegov redni broj.broj.

Page 180: Primjena računala ak.god. 2013/2014

Dodatak:

• Kontrola toka programa pomoću programskih petlji:

180

Page 181: Primjena računala ak.god. 2013/2014

• PROGRAMSKE PETLJE-Omogućavaju višestruka uvjetna ponavljanja blokova

naredbi.

-Programske petlje s ispitivanjem uvjeta na početku (for,while)

-Programske petlje s ispitivanjem uvjeta na kraju(do-while)

Page 182: Primjena računala ak.god. 2013/2014

• FOR PETLJAfor(izraz1; izraz2; izraz3)

{

blok naredbi;

}-Izvršavanje petlje teče u koracima:

1.Postavi kontrolnu varijablu petlje na početnu vrijednost (izraz1)

2.Ispitaj da li je uvjet ponavljanja bloka naredbi petlje zadovoljen (izraz2):

NE: završi petlju;

DA: izvrši blok naredbi;

: dodijeli kontrolnoj varijabli novu vrijednost (izraz3);

: idi na 2 korak;

-izraz1 – poč. stanje.

-izraz2 – uvjet koji mora biti zadovoljen za ponavljanje bloka naredbi.

-izraz3 – izraz koji mijenja vrijednost kontrolne varijable petlje.

Page 183: Primjena računala ak.god. 2013/2014

Ispis brojeva od 1 do 10 pomoću for petlje

int main()

{

int i;

for (i=1; i<=10; i++)

{

printf(“%d”,i);

}

}

Page 184: Primjena računala ak.god. 2013/2014

• WHILE PETLJAwhile(uvjet)

{

blok naredbi;

}

-Blok naredbi u petlji se ponavlja sve dok je uvjet istinit (true), odnosno različit od nule. Kad uvjet postane lažan (false), odnosno jednak nuli, blok naredbi se neće izvršiti.

-Uvjet ponavljanja petlje se ispituje na početku petlje. To znači da blok naredbi ne mora biti izvršen niti jednom.

-I for i while petlja pripadaju istoj skupini petlji, što znači da se svaka for petlja može zamijeniti programskom petljom while.

Vrijedi i obrat.

Page 185: Primjena računala ak.god. 2013/2014

For petlja

for(izraz1;izraz2;izraz3)

{

blok naredbi;

}

Istovjetna je while petlji

izraz1;

while(izraz2)

{

blok naredbi;

izraz3;

}

Page 186: Primjena računala ak.god. 2013/2014

Ispis brojeva od 1 do 10 pomoću while petlje

int main()

{

int i=1;

while(i<=10)

{

printf(“%d”,i);

i++; //ako uklonimo ovu naredbu dobijemo beskonačnu petlju

}

}

Page 187: Primjena računala ak.god. 2013/2014

• DO WHILE PETLJAdo

{

blok naredbi;

} while(uvjet);-Izvršavanje petlje teče u koracima:

1.Izvrši blok naredbi.

2.Ispitaj da li je uvjet ponavljanja bloka naredbi petlje zadovoljen :

NE: završi petlju.

DA: idi na korak 1.

-Blok naredbi se mora izvršiti barem jednom.