Click here to load reader

PROGRAMIRANJE1 - Програмирање 1 · 1Uvodnizadaci Zadatak1.1.10 Napisatiprogramkojizaunetipozitivantrocifrenibrojna standardni izlaz ispisuje njegove cifre jedinica, desetica

  • View
    2

  • Download
    1

Embed Size (px)

Text of PROGRAMIRANJE1 - Програмирање 1 · 1Uvodnizadaci Zadatak1.1.10...

  • PROGRAMIRANJE 1

  • Milena Vujošević Janičić, Jovana Kovačević,Danijela Simić, Anđelka Zečević

    PROGRAMIRANJE 1Zbirka zadataka

    Beograd2017.

  • Autori:dr Milena Vujošević Janičić, docent na Matematičkom fakultetu u Beogradudr Jovana Kovačević, docent na Matematičkom fakultetu u BeograduDanijela Simić, asistent na Matematičkom fakultetu u BeograduAnđelka Zečević, asistent na Matematičkom fakultetu u Beogradu

    PROGRAMIRANJE 1Zbirka zadataka

  • Sadržaj

    1 Uvodni zadaci 11.1 Naredba izraza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2 Kontrola toka 292.1 Naredbe grananja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.2 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.3 Petlje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672.4 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942.5 Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532.6 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

    3 Predstavljanje podataka 2033.1 Nizovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2033.2 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2203.3 Pokazivači . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2613.4 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2683.5 Niske . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2883.6 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.7 Višedimenzioni nizovi . . . . . . . . . . . . . . . . . . . . . . . . . 3203.8 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3343.9 Strukture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3633.10 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

    4 Ulaz i izlaz programa 4094.1 Datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4094.2 Rešenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

    v

  • 1

    Uvodni zadaci

    1.1 Naredba izraza

    Zadatak 1.1.1 Napisati program koji na standardni izlaz ispisuje tekstZdravo svima!.

    Primer 1Interakcija sa programom:Zdravo svima!

    [Rešenje 1.1.1]

    Zadatak 1.1.2 Napisati program za uneti ceo broj ispisuje njegov kvadrati njegov kub.

    Primer 1Interakcija sa programom:Unesite ceo broj: 4Kvadrat: 16Kub: 64

    Primer 2Interakcija sa programom:Unesite ceo broj: -14Kvadrat: 196Kub: -2744

    [Rešenje 1.1.2]

    Zadatak 1.1.3 Napisati program koji za uneta dva cela broja ispisuje najpreunete vrednosti, a zatim i njihov zbir, razliku, proizvod, ceo deo pri deljenjuprvog broja drugim brojem i ostatak pri deljenju prvog broja drugim brojem.

    1

  • 1 Uvodni zadaci

    Napomena: Pretpostaviti da je unos korektan, tj. da druga uneta vrednost nije0.

    Primer 1Interakcija sa programom:Unesi vrednost celobrojne promenljive x: 7Unesi vrednost celobrojne promenljive y: 27 + 2 = 97 - 2 = 57 * 2 = 147 / 2 = 37 % 2 = 1

    Primer 2Interakcija sa programom:Unesi vrednost celobrojne promenljive x: -3Unesi vrednost celobrojne promenljive y: 8-3 + 8 = 5-3 - 8 = -11-3 * 8 = -24-3 / 8 = 0-3 % 8 = -3

    [Rešenje 1.1.3]

    Zadatak 1.1.4 Napisati program koji pomaže kasirki da izračuna ukupanračun ako su poznate cene dva kupljena artikla. Napomena: Pretpostaviti da sucene artikala pozitivni celi brojevi i da je unos korektan.

    Primer 1Interakcija sa programom:Unesi cenu prvog artikla: 173Unesi cenu drugog artikla: 2024Ukupna cena iznosi 2197

    Primer 2Interakcija sa programom:Unesi cenu prvog artikla: 384Unesi cenu drugog artikla: 555Ukupna cena iznosi 939

    [Rešenje 1.1.4]

    Zadatak 1.1.5 Napisati program koji za unetu količinu jabuka u kilogra-mima i unetu cenu po kilogramu ispisuje ukupnu vrednost date količine jabuka.Napomena: Pretpostaviti da je cena jabuka pozitivan ceo broj i da je unos ko-rektan.

    Primer 1Interakcija sa programom:Unesite kolicinu jabuka (u kg): 6Unesite cenu (u dinarima): 82Molimo platite 492 dinara.

    Primer 1Interakcija sa programom:Unesite kolicinu jabuka (u kg): 10Unesite cenu (u dinarima): 93Molimo platite 930 dinara.

    [Rešenje 1.1.5]

    Zadatak 1.1.6 Napisati program koji pomaže kasirki da obračuna kusurkoji treba da vrati kupcu. Za unetu cenu artikla, količinu artikla i iznos koji jekupac dao, program treba da ispiše vrednost kusura. Napomena: Pretpostaviti

    2

  • 1.1 Naredba izraza

    da su cene svih artikala pozitivni celi brojevi, kao i da su unete vrednosti ispravne,tj. da se može vratiti kusur.

    Primer 1Interakcija sa programom:Unesite cenu, kolicinu i iznos: 132 2 500Kusur je 236 dinara.

    Primer 2Interakcija sa programom:Unesite cenu, kolicinu i iznos: 59 6 2000Kusur je 1646 dinara.

    [Rešenje 1.1.6]

    Zadatak 1.1.7 Napisati program koji za uneta vremena poletanja i sletanjaaviona ispisuje dužinu trajanja leta. Napomena: Pretpostaviti da su poletanje isletanje u istom danu kao i da su sve vrednosti ispravno unete.

    Primer 1Interakcija sa programom:Unesite vreme poletanja: 8 5Unesite vreme sletanja: 12 41Duzina trajanja leta je 4 h i 36 min

    Primer 2Interakcija sa programom:Unesite vreme poletanja: 13 20Unesite vreme sletanja: 18 45Duzina trajanja leta je 5 h i 25 min

    [Rešenje 1.1.7]

    Zadatak 1.1.8 Date su dve celobrojne promenljive. Napisati program kojirazmenjuje njihove vrednosti.

    Primer 1Interakcija sa programom:Unesi dve celobrojne vrednosti: 5 7pre zamene: x=5, y=7posle zamene: x=7, y=5

    Primer 2Interakcija sa programom:Unesi dve celobrojne vrednosti: 237 -592pre zamene: x=237, y=-592posle zamene: x=-592, y=237

    [Rešenje 1.1.8]

    Zadatak 1.1.9 Date su dve celobrojene promenljive a i b. Napisati programkoji promenljivoj a dodeljuje njihovu sumu, a promenljivoj b njihovu razliku.Napomena: Ne koristiti pomoćne promenljive.

    Primer 1Interakcija sa programom:Unesi dve celobrojne vrednosti: 5 7Nove vrednosti su: a=12, b=-2

    Primer 2Interakcija sa programom:Unesi dve celobrojne vrednosti: 237 -592Nove vrednosti su: a=-355, b=829

    3

  • 1 Uvodni zadaci

    Zadatak 1.1.10 Napisati program koji za uneti pozitivan trocifreni broj nastandardni izlaz ispisuje njegove cifre jedinica, desetica i stotina. Napomena:Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesi trocifreni broj: 697jedinica 7, desetica 9, stotina 6

    Primer 2Interakcija sa programom:Unesi trocifreni broj: 504jedinica 4, desetica 0, stotina 5

    [Rešenje 1.1.10]

    Zadatak 1.1.11 Napisati program koji za unetu cenu proizvoda ispisujenajmanji broj novčanica koje je potrebno izdvojiti prilikom plaćanja proizvoda.Na raspolaganju su novčanice od 5000, 2000, 1000, 500, 200, 100, 50, 20, 10 i 1dinar. Napomena: Pretpostaviti da je cena proizvoda pozitivan ceo broj.

    Primer 1Interakcija sa programom:Unesite cenu proizvoda: 83678367=1*5000+ 1*2000 +1*1000 +0*500 +1*200 +1*100 +1*50 +0*20 +1*10 +7*1

    Primer 2Interakcija sa programom:Unesite cenu proizvoda: 934934=0*5000+ 0*2000 +0*1000 +1*500 +2*200 +0*100 +0*50 +1*20 +1*10 +4*1

    [Rešenje 1.1.11]

    Zadatak 1.1.12 Napisati program koji učitava pozitivan trocifreni broj sastandardnog ulaza i ispisuje broj dobijen obrtanjem njegovih cifara. Napomena:Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesi trocifreni broj: 892Obrnuto: 298

    Primer 2Interakcija sa programom:Unesi trocifreni broj: 230Obrnuto: 32

    [Rešenje 1.1.12]

    Zadatak 1.1.13 Napisati program koji za uneti pozitivan četvorocifrenibroj:

    4

  • 1.1 Naredba izraza

    (a) izračunava proizvod cifara

    (b) izračunava razliku sume krajnjih i srednjih cifara

    (c) izračunava sumu kvadrata cifara

    (d) izračunava broj koji se dobija ispisom cifara u obrnutom poretku

    (e) izračunava broj koji se dobija zamenom cifre jedinice i cifre stotine

    Napomena: Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesite cetvorocifreni broj: 2371Proizvod cifara: 42Razlika sume krajnjih i srednjih: -7Suma kvadrata cifara: 63Broj u obrnutom poretku: 1732Broj sa zamenjenom cifrom jedinica i stotina: 2173

    Primer 2Interakcija sa programom:Unesite cetvorocifreni broj: 3570Proizvod cifara: 0Razlika sume krajnjih i srednjih: -9Suma kvadrata cifara: 83Broj u obrnutom poretku: 753Broj sa zamenjenom cifrom jedinica i stotina: 3075

    [Rešenje 1.1.13]

    Zadatak 1.1.14 Napisati program koji ispisuje broj koji se dobija izbaci-vanjem cifre desetica u unetom prirodnom broju.

    Primer 1Interakcija sa programom:Unesite broj: 1349Rezultat je: 139

    Primer 2Interakcija sa programom:Unesite broj: 825Rezultat je: 85

    Zadatak 1.1.15 Sa standardnog unosa se unosi pozitivan prirodan broj ni pozitivan dvocifreni broj m. Napisati program ispisuje broj dobijen umetanjembroja m između cifre stotina i cifre hiljada broja n. Napomena: Za neke ulaznepodatke može se dobiti neočekivan rezultat zbog prekoračenja, što ilustruje testprimer broj 2.

    5

  • 1 Uvodni zadaci

    Primer 1Interakcija sa programom:Unesite pozitivan prirodan broj: 12345Unesite pozitivan dvocifreni broj: 67Novi broj je 1267345

    Primer 2Interakcija sa programom:Unesite pozitivan prirodan broj: 50000000Unesite pozitivan dvocifreni broj: 12Novi broj je 705044704

    [Rešenje 1.1.15]

    Zadatak 1.1.16 Napisati program koji učitava realnu vrednost izraženuu inčima, konvertuje tu vrednost u centimetre i ispisuje je zaokruženu na dvedecimale. Uputstvo: Jedan inč ima 2.54 centimetra.

    Primer 1Interakcija sa programom:Unesi broj inca: 4.694.69 in = 11.91 cm

    Primer 2Interakcija sa programom:Unesi broj inca: 71.42671.43 in = 181.42 cm

    [Rešenje 1.1.16]

    Zadatak 1.1.17 Napisati program koji učitava dužinu izraženu u miljama,konvertuje tu vrednost u kilometre i ispisuje je zaokruženu na dve decimale.Uputstvo: Jedna milja ima 1.609344 kilometara.

    Primer 1Interakcija sa programom:Unesi broj milja: 50.4250.42 mi = 81.14 km

    Primer 2Interakcija sa programom:Unesi broj milja: 327.128327.128 mi = 526.46 km

    [Rešenje 1.1.17]

    Zadatak 1.1.18 Napisati program koji učitava težinu izraženu u funtama,konvertuje tu vrednost u kilograme i ispisuje je zaokruženu na dve decimale.Uputstvo: Jedna funta ima 0.45359237 kilograma.

    Primer 1Interakcija sa programom:Unesi broj funti: 2.782.78 lb = 1.26 kg

    Primer 2Interakcija sa programom:Unesi broj funti: 89.43789.437 lb = 40.57 kg

    [Rešenje 1.1.18]

    6

  • 1.1 Naredba izraza

    Zadatak 1.1.19 Napisati program koji učitava temperaturu izraženu ufarenhajtima, konvertuje tu vrednost u celzijuse i ispisuje je zaokruženu na dvedecimale. Uputstvo: Veza između farenhajta i celzijusa je zadata narednomformulom F = 9·C5 + 32

    Primer 1Interakcija sa programom:Unesi temperaturu u F: 100.93100.93 F = 38.29 C

    Primer 2Interakcija sa programom:Unesi temperaturu u F: 25.56225.562 F = -3.58 C

    [Rešenje 1.1.19]

    Zadatak 1.1.20 Napisati program koji za unete realne vrednosti a11, a12,a21, a22 ispisuje vrednost determinante matrice:[

    a11 a12a21 a22

    ]Pri ispisu vrednost zaokružiti na 4 decimale.

    Primer 1Interakcija sa programom:Unesite brojeve: 1 2 3 4-2.0000

    Primer 2Interakcija sa programom:Unesite brojeve: -1 0 0 1-1.0000

    Primer 3Interakcija sa programom:Unesite brojeve: 1.5 -2 3 4.512.7500

    Primer 4Interakcija sa programom:Unesite brojeve: 0.01 0.01 0.5 70.0650

    Zadatak 1.1.21 Napisati program koji za unete realne vrednosti dužinastranica pravougaonika ispisuje njegov obim i površinu. Ispisati tražene vrednostizaokružene na dve decimale. Napomena: Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesite duzine stranica: 4.3 9.4Obim: 27.40Povrsina: 40.42

    Primer 2Interakcija sa programom:Unesite duzine stranica: 10.756 36.2Obim: 93.91Povrsina: 389.37

    [Rešenje 1.1.21]

    7

  • 1 Uvodni zadaci

    Zadatak 1.1.22 Napisati program koji za unetu realnu vrednost dužinepoluprečnika kruga ispisuje njegov obim i površinu zaokružene na dve decimale.Napomena: Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesite duzinu poluprecnika kruga: 4.2Obim: 26.39, povrsina: 55.42

    Primer 2Interakcija sa programom:Unesite duzinu poluprecnika kruga: 14.932Obim: 93.82, povrsina: 700.46

    [Rešenje 1.1.22]

    Zadatak 1.1.23 Napisati program koji za unetu realnu vrednost dužinestranice jednakostraničnog trougla ispisuje njegov obim i površinu zaokružene nadve decimale. Napomena: Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesite duzinu stranice trougla: 5Obim: 15.00Povrsina: 10.82

    Primer 2Interakcija sa programom:Unesite duzinu stranice trougla: 2Obim: 6.00Povrsina: 1.73

    [Rešenje 1.1.23]

    Zadatak 1.1.24 Napisati program koji za unete realne vrednosti dužinastranica trougla ispisuje njegov obim i površinu zaokružene na dve decimale.Napomena: Pretpostaviti da je unos ispravan.

    Primer 1Interakcija sa programom:Unesite duzine stranica trougla: 3 4 5Obim: 12.00Povrsina: 6.00

    Primer 2Interakcija sa programom:Unesite duzine stranica trougla: 4.3 9.7 8.8Obim: 22.80Povrsina: 18.91

    [Rešenje 1.1.24]

    Zadatak 1.1.25 Pravougaonik čije su stranice paralelne koordinatnimosama zadat je svojim realnim koordinatama suprotnih temena (gornje levo idonje desno teme). Napisati program koji ispisuje njegov obim i površinu zao-kružene na dve decimale.

    8

  • 1.1 Naredba izraza

    Primer 1Interakcija sa programom:Unesite koordinate gornjeg levog temena: 4.3 5.8Unesite koordinate donjeg desnog temena: 6.7 2.3Obim: 11.80Povrsina: 8.40

    Primer 2Interakcija sa programom:Unesite koordinate gornjeg levog temena: -3.7 8.23Unesite koordinate donjeg desnog temena: -0.56 2Obim: 18.74Povrsina: 19.56

    Zadatak 1.1.26 Napisati program koji za tri uneta cela broja ispisujenjihovu artimetičku sredinu zaokruženu na dve decimale.

    Primer 1Interakcija sa programom:Unesite tri cela broja: 11 5 4Aritmeticka sredina unetih brojeva je 6.67

    Primer 2Interakcija sa programom:Unesite tri cela broja: 3 -8 13Aritmeticka sredina unetih brojeva je 2.67

    [Rešenje 1.1.26]

    Zadatak 1.1.27 Napisati program koji pomaže moleru da izračuna povr-šinu zidova prostorije koju treba da okreči. Za unete dimenzije sobe u metrima(dužinu, širinu i visinu), program treba da ispiše površinu zidova za krečenje podpretpostavkom da na vrata i prozore otpada oko 20%. Omogućiti i da na osnovuunete cene usluge po kvadratnom metru program izračuna ukupnu cenu krečenja.Sve realne vrednosti ispisati zaokružene na dve decimale.

    Primer 1Interakcija sa programom:Unesite dimenzije sobe: 4 4 3Unesite cenu po m2: 500Moler treba da okreci 51.20 m2Cena krecenja je 25600.00

    Primer 2Interakcija sa programom:Unesite dimenzije sobe: 13 17 3Unesite cenu po m2: 475Moler treba da okreci 320.80 m2Cena krecenja je 152380.00

    [Rešenje 1.1.27]

    Zadatak 1.1.28 Napisati program koji za unete pozitivne prirodne brojevex, p i c ispisuje broj koji se dobija ubacivanjem cifre c u broj x na poziciju p.

    9

  • 1 Uvodni zadaci

    Napomena: Podrazumevati da je unos ispravan, tj. da je broj p manji od ukupnogbroja cifara broja x. Numeracija cifara počinje od nule, odnosno cifra najmanjetežine nalazi se na nultoj poziciji. Uputstvo: Koristiti funkciju pow iz math.hbiblioteke.

    Primer 1Interakcija sa programom:Unesite redom x, p i c: 140 1 2Rezultat je: 1420

    Primer 1Interakcija sa programom:Unesite redom x, p i c: 12345 2 9Rezultat je: 123945

    [Rešenje 1.1.28]

    Zadatak 1.1.29 Napisati program koji za uneta dva cela broja a i b dodeljujepromenljivoj rezultat vrednost 1 ako važi uslov:

    a) a i b su različiti brojevi

    b) a i b su parni brojevi

    c) a i b su pozitivni brojevi, ne veći od 100

    U suprotnom, promenljivoj rezultat dodeliti vrednost 0. Ispisati vrednost pro-menljive rezultat.

    Primer 1Interakcija sa programom:Unesite dva cela broja: 4 8a) rezultat=1b) rezultat=1c) rezultat=1

    Primer 2Interakcija sa programom:Unesite dva cela broja: 3 -11a) rezultat=1b) rezultat=0c) rezultat=0

    [Rešenje 1.1.29]

    Zadatak 1.1.30 Napisati program koji za uneta dva cela broja ispisujenjihov maksimum.

    Primer 1Interakcija sa programom:Unesite dva cela broja: 19 256Maksimum je 256

    Primer 2Interakcija sa programom:Unesite dva cela broja: -39 57Maksimum je 57

    [Rešenje 1.1.30]

    10

  • 1.2 Rešenja

    Zadatak 1.1.31 Napisati program koji za uneta dva cela broja ispisujenjihov minimum.

    Primer 1Interakcija sa programom:Unesite dva cela broja: 4 8Minimum je 4

    Primer 2Interakcija sa programom:Unesite dva cela broja: -3 -110Minimum je -110

    [Rešenje 2.1.36]

    Zadatak 1.1.32 Napisati program koji za unete realne vrednosti promen-ljivih x i y ispisuje vrednost sledećeg izraza:

    rez =min(x, y) + 0.51 +max2(x, y)

    zaokruženu na dve decimale.

    Primer 1Interakcija sa programom:Unesite dva realna broja: 5.7 11.2Rezultat je: 0.05

    Primer 1Interakcija sa programom:Unesite dva realna broja: -9.34 8.99Rezultat je: -0.11

    [Rešenje 1.1.32]

    1.2 Rešenja

    Rešenje 1.1.1

    /* Navedeni program definise funkciju koja se zove main. Program2 moze da definise vise funkcija, ali obavezno mora da definise

    funkciju koja se zove main i izvrsavanje programa uvek pocinje4 od te funkcije. Pored naziva, zapis svake funkcije cine i

    povratna vrednost funkcije (u ovom slucaju int), lista6 argumenata koje funkcija koristi (u ovom slucaju funkcija nema

    argumenata pa se navode samo prazne zagrade, ()) i telo8 funkcije koje je ograniceno viticastim zagradama ({ i }). O

    ovim pojmovima bice vise reci u narednim poglavljima.10

    Unutar tela funkcije navode se naredbe. Unutar navedenog12 programa postoji jedna naredba koja predstavlja poziv funkcije

    printf. Funkcija printf sluzi za ispis teksta na standardni

    11

  • 1 Uvodni zadaci

    14 izlaz (obicno ekran). Deklaracija ove funkcije data je uzaglavlju stdio.h koje je potrebno ukljuciti direktivom #include

    16 na pocetku samog programa.

    18 Da bismo pokrenuli program, prvo ga moramo prevesti u izvrsnudatoteku. Na primer, ako je navedeni program sacuvan kao

    20 zdravo.c, ako koristimo gcc kompajler koji je sastavni deostandardnih Linux distribucija, prevodjenje iz komandne linije

    22 se vrsi narednom naredbom: gcc zdravo.c Ukoliko nije bilogresaka prilikom prevodjenja, bice generisana izvrsna datoteka

    24 pod nazivom a.out koja se pokrece navodjenjem sledece naredbe:./a.out Ukoliko je bilo gresaka prilikom prevodjenja, one se

    26 moraju otkloniti a postupak prevodjenja se mora ponoviti. */

    28 #include

    30 int main(){

    32 /* printf: funkcija pomocu koje se vrsi ispisSpecijalni karakter \n : prelazak u novi red

    34 Svaka naredba zavrsava se karakterom ; */printf("Zdravo svima!\n");

    36

    /* Povratna vrednost 0 se obicno koristi da oznaci da je prilikom38 izvrsavanja programa sve proslo u redu. */

    return 0;40 }

    Rešenje 1.1.2

    #include 2

    int main()4 {

    /* Svaka promenljiva u programu mora biti deklarisana na pocetku6 main funkcije. Deklaracija se sastoji iz naziva promenljive

    (u ovom slucaju n) ispred kog se navodi tip promenljive (u8 ovom slucaju celobrojni tip, int). */

    10 int n;

    12 /* Vrednost promenljive se ucitava pomocu funkcije scanf kojaje, kao i funkcija printf, sastavni deo standardne biblioteke.

    14 Argumenti funkcije scanf koji se navode u zagradama ( i ) irazdvajaju zarezima, oznacavaju sledece: "%d" - format za tip

    16 podatka koji ce biti ucitan (%d za int, svaki tip ima svojformat) &n - adresa promenljive x (o adresama ce biti vise

    18 reci u narednim zadacima).

    20 Ucitavanje se vrsi sa standardnog ulaza (obicno tastatura). */printf("Unesite ceo broj: ");

    12

  • 1.2 Rešenja

    22 scanf("%d", &n);

    24 /* Funkcija printf ispisuje tekst "Uneti broj: ", a nakon toga,umesto formata %d, ispisuje vrednost promenljive n. */

    26 printf("Uneti broj: %d\n", n);/* Umesto formata %d, ispisuje vrednost izraza n*n. */

    28 printf("Kvadrat: %d\n", n * n);/* Umesto formata %d, ispisuje vrednost izraza n*n*n. */

    30 printf("Kub: %d\n", n * n * n);

    32 return 0;}

    Rešenje 1.1.3

    #include2

    int main()4 {

    /* Promenljive istog tipa mogu se deklarisati jedna za drugom. */6 int x, y, rezultat;

    8 printf("Unesi vrednost celobrojne promenljive x: ");scanf("%d", &x);

    10

    printf("Unesi vrednost celobrojne promenljive y: ");12 scanf("%d", &y);

    14 /* Dodeljujemo vrednost promenljivoj rezultat. */rezultat = x + y;

    16 printf("%d + %d = %d\n", x, y, rezultat);

    18 /* Mozemo ispisivati direktno vrednost izraza x-y i bez njegovogdodeljivanja posebnoj promenljivoj */

    20 printf("%d - %d = %d\n", x, y, x - y);printf("%d * %d = %d\n", x, y, x * y);

    22

    /* Kada bilo koju artimeticku operaciju primenimo na dve24 promenljive istog tipa (u ovom slucaju dva celobrojne

    promenljive), rezultat ce biti tog istog tipa. Specijalno, za26 operaciju deljenja: kada operator / primenimo na dva

    celobrojna argumenta x i y, kao rezultat dobijemo ceo deo pri28 deljenju broja x brojem y, a ne kolicnik. Na primer, rezultat

    primene operatora / na 7 i 2 je 3, a ne 3.5. */30 printf("%d / %d = %d\n", x, y, x / y);

    32 /* Operator % izracunava ostatak pri celobrojnom deljenju dvecelobrojne promenljive. Na primer, 7%2 ima vrednost 1 (jer je

    34 7=3*2+1). Da bismo odstampali karakter %, u naredbi printfpisemo %% */

    36 printf("%d %% %d = %d\n", x, y, x % y);

    13

  • 1 Uvodni zadaci

    38 return 0;}

    Rešenje 1.1.4

    Rešenje ovog zadatka svodi se na rešenje zadatka 1.1.3, na deo koji se odnosina izračunavanje zbira dva broja. Zbog pretpostavke da su cene artikala pozitivniceli brojevi, tip promenljivih za artikle treba da bude unsigned int.

    Rešenje 1.1.5

    Rešenje ovog zadatka svodi se na rešenje zadatka 1.1.3, na deo koji se odnosina izračunavanje proizvoda dva broja. Zbog pretpostavke da su cene artikalapozitivni celi brojevi, tip promenljivih za artikle treba da bude unsigned int.

    Rešenje 1.1.6

    1 #include

    3 int main(){

    5 /* S obzirom da su sve promenljive pozitivini celi brojevi,koristimo tip unsigned int (skraceno unsigned) */

    7 unsigned cena;unsigned kolicina;

    9 unsigned iznos;unsigned kusur;

    11

    /* Ucitavamo potrebne podatke. Unutar jednog scanf-a mozemo13 ucitati vise podataka odjednom. Za svaki treba navesti

    odgovarajuci format za tip podataka koji se unosi (%u za15 unsigned). */

    printf("Unesite cenu, kolicinu i iznos: ");17 scanf("%u%u%u", &cena, &kolicina, &iznos);

    19 /* Izracunavamo kusur: */kusur = iznos - kolicina * cena;

    21

    /* I ispisujemo trazenu vrednost: */23 printf("Kusur je %u dinara.\n", kusur);

    25 return 0;}

    Rešenje 1.1.7

    14

  • 1.2 Rešenja

    #include 2

    int main()4 {

    6 unsigned poletanje, poletanje_sat , poletanje_minut;unsigned sletanje, sletanje_sat , sletanje_minut;

    8 unsigned duzina, duzina_sat , duzina_minut;

    10 printf("Unesite vreme poletanja: ");scanf("%u%u", &poletanje_sat , &poletanje_minut);

    12

    14 printf("Unesite vreme sletanja: ");scanf("%u%u", &sletanje_sat , &sletanje_minut);

    16

    /* Pretvoricemo i vreme poletanja i vreme sletanja u sekunde */18 poletanje = poletanje_sat * 3600 + poletanje_minut * 60;

    sletanje = sletanje_sat * 3600 + sletanje_minut * 60;20

    /* I izracunati razliku u sekundama */22 duzina = sletanje - poletanje;

    24 /* Izdvajamo broj sati i broj minuta. */duzina_sat = duzina / 3600;

    26 duzina_minut = (duzina % 3600) / 60;

    28 /* I ispisujemo rezultat */printf("Duzina trajanja leta je %u h i %u min\n", duzina_sat ,

    30 duzina_minut);

    32 return 0;}

    Rešenje 1.1.8

    #include2

    int main()4 {

    int x, y;6 int p;

    8 printf("Unesi dve celobrojne vrednosti:");scanf("%d%d", &x, &y);

    10

    printf("pre zamene: x=%d, y=%d\n", x, y);12

    /* Pomocna promenljiva p je potrebna da sacuva vrednost14 promenljive x pre nego sto se ona izmeni i dobije vrednost

    15

  • 1 Uvodni zadaci

    promenljive y. */16 p = x;

    x = y;18 y = p;

    printf("posle zamene: x=%d, y=%d\n", x, y);20

    return 0;22 }

    Rešenje 1.1.10

    1 #include

    3 int main(){

    5 /* S obzirom da broj treba da bude pozitivan, koristimo tipunsigned. */

    7 unsigned x;

    9 /* Promenljive koje cuvaju cifre treba da budu najmanjegcelobrojnog tipa jer nece sadrzati druge vrednosti osim

    11 jednocifrenih celih brojeva. Zbog toga za njih biramo tipchar. */

    13 char cifra_jedinice;char cifra_desetice;

    15 char cifra_stotine;

    17 printf("Unesi trocifreni broj:");scanf("%u", &x);

    19

    /* Na primer, neka je uneti broj 374. Potrebno je da koriscenjem21 racunskih operacija za rad sa celim brojevima pristupimo

    njegovoj cifri jedinice, cifri desetice i cifri stotine.23

    Primetimo najpre sledece: 374/10 = 37 374%10 = 4 Dakle,25 operacijama celobrojnog deljenja i ostatka pri deljenju mozemo

    iz svakog broja izdvojiti njegovu poslednju cifru (u ovom27 slucaju 4) i broj sastavljen od svih cifara osim poslednje (u

    ovom slucaju 37).29

    Cifri jedinice sada lako pristupamo koriscenjem ostatka pri31 deljenju sa 10. Ona iznosi upravo 4.

    33 Pri trazenju cifre desetice mozemo ponovo primeniti principizdvajanja poslednje cifre kao ostatka pri deljenju sa 10.

    35 Razlika je sto ne mozemo deseticu izdvojiti ako primenimo %10na 374 (time dobijamo 4), vec %10 primenjujemo na 37, pri cemu

    37 37 dobijamo kao ceo deo pri deljenju broja 374 brojem 10.Dakle, cifru desetice dobijamo kao (374/10)%10.

    39

    S obzirom da znamo da je u pitanju trocifreni broj, cifru

    16

  • 1.2 Rešenja

    41 stotine mozemo izdvojiti celobrojnim deljenjem sa 100: 374/100iznosi upravo 3. */

    43 cifra_jedinice = x % 10;cifra_desetice = (x / 10) % 10;

    45 cifra_stotine = x / 100;

    47 /* Ako zelimo da odstampamo numericku vrednost promenljive tipachar, koristimo format %d. Ako zelimo da odstampamo karakter

    49 ciji je ASCII kod jednak vrenosti te promenljive, koristimo %c(na primer, ako bismo promenljivu cija je vrednost 65 stampali

    51 pomocu formata %d, ispis bi bio 65, ali ako bismo je stampalipomocu formata %c, ispis bi bio A). U ovom slucaju nam je

    53 neophodna numericka vrednost. */printf("jedinica %d, desetica %d, stotina %d\n", cifra_jedinice ,

    55 cifra_desetice , cifra_stotine);

    57 /* 2. nacin, bez uvodjenja dodatnih promenljivih cifra_jedinice,cifra_desetice i cifra_stotine:

    59

    printf("Cifre unetog broja su %d,%d,%d\n", x%10, (x/10)%10,61 x/100); */

    return 0;63 }

    Rešenje 1.1.11

    1 #include

    3 int main(){

    5 unsigned x;printf("Unesi cenu:");

    7 scanf("%u", &x);

    9 /* Na primer, neka je uneta cena 8347 dinara. Vrednost x/5000predstavlja broj novcanica od 5000 dinara pomocu kojih mozemo

    11 sakupiti celokupnu sumu. 8347 celobrojno deljeno sa 5000(operacija / nad celim brojevima) iznosi 1. */

    13 printf("%u=%u*5000+ ", x, x / 5000);/* Potrebna nam je 1 novcanica od 5000 dinara, a koliko nam je

    15 potrebno ostalih novcanica? Za to moramo pristupiti preostalojsumi. Jedan nacin je da nadjemo ostatak pri deljenju unete

    17 vrednosti x (u primeru 8347) sa 5000 (operacija %). On iznosi3347. Ovu vrednost dodeljujemo promeljivoj x. */

    19 x = x % 5000;

    21 /* Nastavljamo postupak trazenjem broja novcanica od 2000 dinarai redom za ostale monete. */

    23 printf("%u*2000 +", x / 2000);x = x % 2000;

    25 printf("%u*1000 +", x / 1000);

    17

  • 1 Uvodni zadaci

    x = x % 1000;27 printf("%u*500 +", x / 500);

    x = x % 500;29 printf("%u*200 +", x / 200);

    x = x % 200;31 printf("%u*100 +", x / 100);

    x = x % 100;33 printf("%u*50 +", x / 50);

    x = x % 50;35 printf("%u*20 +", x / 20);

    x = x % 20;37 printf("%u*10 +", x / 10);

    x = x % 10;39 printf("%u*1\n", x);

    41 return 0;}

    Rešenje 1.1.12

    1 #include

    3 int main(){

    5 unsigned x;unsigned obrnuto_x;

    7 char cifra_jedinice;char cifra_desetice;

    9 char cifra_stotine;

    11 printf("Unesi trocifreni broj:");scanf("%u", &x);

    13

    cifra_jedinice = x % 10;15 cifra_desetice = (x / 10) % 10;

    cifra_stotine = x / 100;17

    obrnuto_x = cifra_jedinice * 100 +19 cifra_desetice * 10 + cifra_stotine;

    21 printf("Obrnuto: %u\n", obrnuto_x);

    23 return 0;}

    Rešenje 1.1.13

    1 #include

    18

  • 1.2 Rešenja

    3 int main(){

    5

    unsigned n, broj_obrnuto , broj_zamena;7 char j, d, s, h;

    int proizvod_cifara , razlika_cifara , suma_kvadrata;9

    /* Ucitavamo vrednost sa ulaza */11 printf("Unesite cetvorocifreni broj: ");

    scanf("%u", &n);13

    /* Izdvajamo cifre broja i to redom: j -jedinice, d - desetice,15 s - stotine i h - hiljade */

    j = n % 10;17 d = (n / 10) % 10;

    s = (n / 100) % 10;19 h = n / 1000;

    21 /* Izracunavamo proizvod cifara */proizvod_cifara = j * d * s * h;

    23 printf("Proizvod cifara: %d\n", proizvod_cifara);

    25 /* Izracunavamo razliku sume krajnjih i srednjih cifara */razlika_cifara = (h + j) - (s + d);

    27 printf("Razlika sume krajnjih i srednjih: %d\n", razlika_cifara);

    29 /* Izracunavamo sumu kvadrata cifara */suma_kvadrata = j * j + d * d + s * s + h * h;

    31 printf("Suma kvadrata cifara: %d\n", suma_kvadrata);

    33 /* Odredjujemo broj zapisan istim ciframa ali u obrnutomredosledu */

    35 broj_obrnuto = j * 1000 + d * 100 + s * 10 + h;printf("Broj u obrnutom poretku: %u\n", broj_obrnuto);

    37

    /* Odredjujemo broj u kojem su cifra jedinica i cifra stotina39 zamenile mesta */

    broj_zamena = h * 1000 + j * 100 + d * 10 + s;41 printf("Broj sa zamenjenom cifrom jedinica i stotina: %u\n",

    broj_zamena);43

    45 return 0;}

    Rešenje 1.1.15

    #include 2

    int main()4 {

    19

  • 1 Uvodni zadaci

    unsigned broj, novibroj;6 unsigned levi, desni, m;

    8 printf("Unesite pozitivan prirodan broj: ");scanf("%u", &broj);

    10 printf("Unesite pozitivan dvocifreni broj:");scanf("%u", &m);

    12

    /* Na primer, za unete broj 12345 i 67, potrebno je ubaciti 6714 izmedju cifre hiljade (2) i cifre stotine (3). Rezultat je

    12|67|345. Potrebno je da razdvojimo uneti broj na levi i16 desni deo: 12 i 345 i izmedju njih umetnemo broj m */

    18 levi = broj / 1000;desni = broj % 1000;

    20

    /* Kada levi deo pomnozimo sa 100 000, dobijamo 1 200 000 Kada m22 pomnozimo sa 1000, dobijamo 67 000 Dobijene vrednosti saberemo

    sa desnim delom 345 --------- Konacan rezultat: 1 267 345 */24 novibroj = levi * 100000 + m * 1000 + desni;

    26 printf("Novi broj je %u\n", novibroj);

    28 return 0;}

    Rešenje 1.1.16

    1 #include

    3 int main(){

    5 /* float - realni tip jednostruke tacnosti */float in;

    7 float cm;

    9 printf("Unesi broj inca: ");

    11 /* "%f" - format za unos/ispis float promenljivih */scanf("%f", &in);

    13

    /* 1 inch = 2.54 cm */15 cm = in * 2.54;

    17 /* "%.2f" - ispis realne promenljive na 4 decimale */printf("%.2f in = %.2f cm\n", in, cm);

    19

    return 0;21 }

    20

  • 1.2 Rešenja

    Rešenje 1.1.17 Zadatak se rešava analogno zadatku 1.1.16.

    Rešenje 1.1.18 Zadatak se rešava analogno zadatku 1.1.16.

    Rešenje 1.1.19 Zadatak se rešava analogno zadatku 1.1.16.

    Rešenje 1.1.21

    #include 2

    int main()4 {

    float a, b;6 float obim, povrsina;

    8 /* Ucitavamo potrebne podatke */printf("Unesite duzine stranica pravougaonika: ");

    10 scanf("%f%f", &a, &b);

    12 /* Obim */obim = 2 * (a + b);

    14

    /* Povrsina */16 povrsina = a * b;

    18 /* Ispisujemo trazene vrednosti */printf("Obim: %.2f\n", obim);

    20 printf("Povrsina: %.2f\n", povrsina);

    22 /* Zavrsavamo sa programom */return 0;

    24 }

    Rešenje 1.1.22

    1 #include #include

    3

    /* Zaglavlje math.h sadrzi deklaracije velikog broja matematickih5 funkcija i konstanti. U ovom zadatku se koristi zbog konstante

    pi (M_PI)7

    Ukoliko se koristi i neka funkcija matematicke biblioteke, za9 prevodjenje je neophodno ukljuciti opciju -lm npr. gcc primer.c

    -lm */11 int main()

    {13 float r;

    21

  • 1 Uvodni zadaci

    float O;15 float P;

    printf("Unesite duzinu poluprecnika kruga:");17 scanf("%f", &r);

    19 O = 2 * r * M_PI;P = r * r * M_PI;

    21

    printf("Obim: %.2f, povrsina: %.2f\n", O, P);23

    return 0;25 }

    Rešenje 1.1.23

    #include 2 #include

    4 int main(){

    6 float a;float P, O;

    8

    printf("Unesi duzinu stranice trougla:");10 scanf("%f", &a);

    12 O = 3 * a;P = (a * a * sqrt(3)) / 4;

    14

    printf("Obim: %.2f\n", O);16 printf("Povrsina: %.2f\n", P);

    18 return 0;}

    Rešenje 1.1.24

    #include 2 #include

    4 int main(){

    6 float a, b, c;float obim, s, povrsina;

    8

    /* Ucitavamo potrebne podatke */10 printf("Unesite duzine stranica trougla: ");

    scanf("%f%f%f", &a, &b, &c);12

    22

  • 1.2 Rešenja

    /* Obim */14 obim = a + b + c;

    16 /* Povrsina - koristicemo Heronov obrazac */s = obim / 2;

    18 povrsina = sqrt(s * (s - a) * (s - b) * (s - c));

    20 /* Ispisujemo trazene vrednosti */printf("Obim: %.2f\n", obim);

    22 printf("Povrsina: %.2f\n", povrsina);

    24 return 0;}

    Rešenje 1.1.26

    1 #include

    3 int main(){

    5 int a, b, c;float as;

    7

    printf("Unesite tri cela broja:");9 scanf("%d%d%d", &a, &b, &c);

    11 /* pogresan nacin: as = (a+b+c)/3;

    13 Ukoliko podelimo zbir a+b+c sa 3, to ce biti primenaoperatora / na dva cela broja. Na ovaj nacin izracunacemo

    15 koliko iznosi a+b+c celobrojno podeljeno sa 3. To znaci da ceza unete vrednosti 11, 5 i 4 aritmeticka sredina biti 6.00.

    17 Zaista, zbir 11+5+4 iznosi 20, a kada 20 celobrojno podelimosa 3 dobijamo 6. Ovu celobrojnu vrednost dodeljujemo realnoj

    19 promenljivoj as, cime se ona konvertuje u 6.000000 iispisujemo je zaokruzenu na dve decimale. Izlaz iz programa bi

    21 bio pogresan: 6.00.

    23 Da bismo dobili kolicnik prilikom primene operatora / na dvacela broja, a ne celobrojno deljenje, jedan argument mora da

    25 bude realan broj. Jedan nacin je da umesto sa celobrojnomtrojkom (3) deljenje izvedemo sa realnom trojkom (3.0): */

    27 as = (a + b + c) / 3.0;

    29 /* Trazeni kolicnik mozemo dobiti na razne nacine:as=1.0*(a+b+c)/3; ili as=(0.0+a+b+c)/3; ili

    31 as=((float)(a+b+c))/3; itd. */

    33 printf("Aritmeticka sredina unetih brojeva je %.2f\n", as);return 0;

    35 }

    23

  • 1 Uvodni zadaci

    Rešenje 1.1.27

    1 #include

    3 int main(){

    5 unsigned duzina, sirina, visina;unsigned cena;

    7 float povrsina_za_krecenje;float ukupna_cena;

    9

    /* Ucitavamo duzinu, sirinu i visinu sobe */11 printf("Unesite dimenzije sobe: ");

    scanf("%u%u%u", &duzina, &sirina, &visina);13

    /* Ucitavamo cenu krecenja */15 printf("Unesite cenu po m2: ");

    scanf("%u", &cena);17

    /* Povrsina za krecenje odgovara povrsini kvadra - bez poda jer19 se on ne kreci */

    povrsina_za_krecenje = 0.8 * (duzina * sirina +21 2 * duzina * visina +

    2 * sirina * visina);23 ukupna_cena = povrsina_za_krecenje * cena;

    25 /* Ispisujemo trazene podatke */printf("Moler treba da okreci %.2f m2\n", povrsina_za_krecenje);

    27

    printf("Cena krecenja je %.2f\n", ukupna_cena);29

    /* Zavrsavamo sa programom */31 return 0;

    }

    Rešenje 1.1.28

    1 #include #include

    3

    int main()5 {

    unsigned x, p;7 char c;

    unsigned levo, desno;9 unsigned novo_x;

    24

  • 1.2 Rešenja

    11 /* Ucitavamo potrebne vrednosti. Sa unosom podataka tipa charmoramo biti pazljivi i o tome ce vise biti reci u narednim

    13 poglavljima kod zadataka za rad sa funkcijama getchar iputchar. Zbog toga cemo ovde za ucitavanje podataka zatraziti

    15 da podatke razdvajamo blanko znakovima (a ne znakom za novired, zarezom ili nekim drugim separatorom). Ovaj zahtev

    17 navodimo u format stringu funkcije scanf tako stospecifikatore promenljivih razdvajamo blanko znakovima.

    19

    Ukoliko specifikatore promenljivih u format stringu pisemo21 spojeno, tada ih prilikom unosa mozemo razdvojiti bilo kojim

    karakterom. Zbog toga blanko znakove u format stringu funkcije23 scanf treba izbegavati i ovo je redak slucaj kada je njihova

    upotreba opravdana.25

    Ako zelimo da odstampamo znak ", u format stringu funkcije27 printf navodimo \". */

    printf("Unesite vrednosti u formatu \"x p c\": ");29 scanf("%u %u %c", &x, &p, &c);

    31 /* Kada ucitavamo karaktersku promenljivu, njena numerickavrednost je jednaka ASCII kodu unetog karaktera. Na primer,

    33 ako karakter '0' ucitamo u promenljivu c, njena numerickavrednost bice 48. Da bismo pretvorili ovu numericku vrednost u

    35 numericku vrednost koja odgovara cifri, od nje oduzimamo ASCIIkod karakterske konstante '0' koji iznosi upravo 48. */

    37 c = c - '0';

    39 /* Odredjujemo deo broja koji se nalazi desno od pozicije p */desno = x % (unsigned) pow(10, p);

    41

    /* Odredjujemo deo broja koji se nalazi levo od pozicije p */43 levo = x / (unsigned) pow(10, p);

    45 /* Odredjujemo novi broj */novo_x =

    47 levo * (unsigned) pow(10, p + 1) +c * (unsigned) pow(10, p) + desno;

    49

    /* Ispisujemo dobijenu vrednost */51 printf("Rezultat je: %u\n", novo_x);

    53 /* Zavrsavamo sa programom */return 0;

    55

    }

    Rešenje 1.1.29

    1 #include

    25

  • 1 Uvodni zadaci

    3 int main(){

    5 int a, b, rezultata, rezultatb, rezultatc;

    7 printf("Unesite dva cela broja:");scanf("%d%d", &a, &b);

    9

    /* Izraz a!=b ima vrednost 1 ako je ova relacija tacna, a 0 ako11 je netacna */

    rezultata = a != b;13

    /* Izraz a%2==0 && b%2==0 je konjunkcija koja se sastoji od dve15 relacije jednakosti. Izraz a%2==0 ima vrednost 1 ako je ova

    relacija tacna, a 0 u suprotnom. */17

    rezultatb = (a % 2 == 0 && b % 2 == 0);19

    /* Izraz a>0 && a0 && b 0 && a 0 && b

  • 1.2 Rešenja

    19

    max = (a > b) ? a : b;21

    printf("Maksimum je %d\n", max);23

    return 0;25 }

    Rešenje 2.1.36 Zadatak se rešava analogno zadatku 2.1.36

    Rešenje 1.1.32

    1 #include

    3 int main(){

    5 float a, b, rez;float min, max;

    7 printf("Unesite dva realna broja:");scanf("%f%f", &a, &b);

    9

    /* Odredjujemo minimalnu i maksimalnu vrednost unetih brojeva */11 min = (a < b) ? a : b;

    max = (a > b) ? a : b;13

    /* Racunamo vrednost promenljive rez */15 rez = (min + 0.5) / (1 + max * max);

    17 printf("Rezultat je %.2f\n", rez);

    19 return 0;}

    27

  • 1 Uvodni zadaci

    28

  • 2

    Kontrola toka

    2.1 Naredbe grananja

    Zadatak 2.1.1 Napisati program koji za dva uneta cela broja ispisuje njihovminimum.

    Primer 1Interakcija sa programom:Unesite dva cela broja: 5 18Minimum je 5.

    Primer 2Interakcija sa programom:Unesite dva cela broja: 43 -16Minimum je -16.

    [Rešenje 2.1.1]

    Zadatak 2.1.2 Napisati program koji za dva uneta cela broja ispisuje njihovmaksimum.

    Primer 1Interakcija sa programom:Unesite dva cela broja: 141 67Maksimum je 141.

    Primer 2Interakcija sa programom:Unesite dva cela broja: -893 -54Maksimum je -54.

    Zadatak 2.1.3 Napisati program koji za uneti realan broj ispisuje njegovuapsolutnu vrednost zaokruženu na dve decimale.

    29

  • 2 Kontrola toka

    Primer 1Interakcija sa programom:Unesite jedan realan broj: 7.42Njegova apsolutna vrednost je: 7.42

    Primer 2Interakcija sa programom:Unesite jedan realan broj: -562.428Njegova apsolutna vrednost je: 562.43

    Primer 3Interakcija sa programom:Unesite jedan realan broj: 0Njegova apsolutna vrednost je: 0.00

    Primer 4Interakcija sa programom:Unesite jedan realan broj: 52Njegova apsolutna vrednost je: 52.00

    [Rešenje 2.1.3]

    Zadatak 2.1.4 Napisati program koji za uneti ceo broj ispisuje njegovurecipročnu vrednost zaokruženu na četiri decimale.

    Primer 1Interakcija sa programom:Unesite jedan ceo broj: 22Reciprocna vrednost unetog broja: 0.0455.

    Primer 2Interakcija sa programom:Unesite jedan ceo broj: -9Reciprocna vrednost unetog broja: -0.1111.

    Primer 3Interakcija sa programom:Unesite jedan ceo broj: 0Nedozvoljeno deljenje nulom.

    Primer 4Interakcija sa programom:Unesite jedan ceo broj: 57298Reciprocna vrednost unetog broja: 0.0000.

    [Rešenje 2.1.4]

    Zadatak 2.1.5 Napisati program koji učitava tri cela broja i ispisuje zbirpozitivnih.

    Primer 1Interakcija sa programom:Unesite tri cela broja: 1 3 -6Suma unetih pozitivnih brojeva: 4

    Primer 2Interakcija sa programom:Unesite tri cela broja: -15 81 0Suma unetih pozitivnih brojeva: 81

    Primer 3Interakcija sa programom:Unesite tri cela broja: -719 -48 -123Suma unetih pozitivnih brojeva: 0

    Primer 4Interakcija sa programom:Unesite tri cela broja: 16 2 576Suma unetih pozitivnih brojeva: 594

    [Rešenje 2.1.5]

    30

  • 2.1 Naredbe grananja

    Zadatak 2.1.6 U prodavnici je organizovana akcija da svaki kupac dobijenajjeftiniji od tri artikla za jedan dinar. Napisati program koji za unete cenetri artikla izračunava ukupnu cenu, kao i koliko dinara se uštedi zahvaljujućipopustu. Napomena: Pretpostaviti da su cene artikala pozitivni celi brojevi.

    Primer 1Interakcija sa programom:Unesite cene tri artikla: 35 125 97Cena sa popustom: 223Usteda: 34

    Primer 2Interakcija sa programom:Unesite cene tri artikla: 1034 15 25Cena sa popustom: 1060Usteda: 14

    Primer 3Interakcija sa programom:Unesite cene tri artikla: 500 500 500Cena sa popustom: 1001Usteda: 499

    Primer 4Interakcija sa programom:Unesite cene tri artikla: 247 133 126Cena sa popustom: 381Usteda: 125

    [Rešenje 2.1.6]

    Zadatak 2.1.7 Napisati program koji za uneti četvorocifreni broj ispisujenjegovu najveću cifru.

    Primer 1Interakcija sa programom:Unesite broj: 6835Najveca cifra je: 8

    Primer 2Interakcija sa programom:Unesite broj: 238Greska: Niste uneli cetvorocifren broj!

    Primer 3Interakcija sa programom:Unesite broj: 7777Najveca cifra je: 7

    Primer 4Interakcija sa programom:Unesite broj: -2002Najveca cifra je: 2

    [Rešenje 2.1.7]

    Zadatak 2.1.8 Napisati program koji za uneto vreme (broj sati iz intervala[0, 24) i broj minuta iz intervala [0, 60)) ispisuje koliko je sati i minuta ostalo doponoći.

    Primer 1Interakcija sa programom:Unesite vreme (broj sati u itervalu [0,24),broj minuta u intervalu [0,60)): 18 19Do ponoci je ostalo 5 sati i 41 minuta.

    Primer 2Interakcija sa programom:Unesite vreme (broj sati u itervalu [0,24),broj minuta u intervalu [0,60)): 23 7Do ponoci je ostalo 0 sati i 53 minuta.

    31

  • 2 Kontrola toka

    Primer 3Interakcija sa programom:Unesite vreme (broj sati u itervalu [0,24),broj minuta u intervalu [0,60)): 24 20Neispravan unos.

    Primer 4Interakcija sa programom:Unesite vreme (broj sati u itervalu [0,24),broj minuta u intervalu [0,60)): 14 0Do ponoci je ostalo 10 sati i 0 minuta.

    [Rešenje 2.1.8]

    Zadatak 2.1.9 Napisati program koji za učitani karakter ispisuje unetikarakter i njegov ASCII kod. Ukoliko je uneti karakter malo (veliko) slovo,ispisati i odgovarajuće veliko (malo) slovo i njegov ASCII kod.

    Primer 1Interakcija sa programom:Unesite karakter: 0Uneti karakter: 0, njegov ASCII kod: 48

    Primer 2Interakcija sa programom:Unesite karakter: ?Uneti karakter: ?, njegov ASCII kod: 63

    Primer 3Interakcija sa programom:Unesite karakter: AUneti karakter: A, njegov ASCII kod: 65odgovarajuce malo slovo: a, njegov ASCII kod: 97

    Primer 4Interakcija sa programom:Unesite karakter: vUneti karakter: v, njegov ASCII kod: 118odgovarajuce veliko slovo: V, njegov ASCII kod: 86

    [Rešenje 2.1.9]

    Zadatak 2.1.10 Napisati program koji za unetih pet karaktera ispisujekoliko je među njima malih slova.

    Primer 1Interakcija sa programom:Unesite karaktere: A u E f hBroj malih slova: 3

    Primer 2Interakcija sa programom:Unesite karaktere: k L M 9 oBroj malih slova: 2

    [Rešenje 2.1.10]

    32

  • 2.1 Naredbe grananja

    Zadatak 2.1.11 Program učitava pet karaktera. Napisati koliko se putapojavilo veliko ili malo slovo a.

    Primer 1Interakcija sa programom:Unesite karaktere: aBcAe2

    Primer 2Interakcija sa programom:Unesite karaktere: aa4A_3

    Primer 3Interakcija sa programom:Unesite karaktere: aAaAa5

    Primer 4Interakcija sa programom:Unesite karaktere: B6(vV0

    [Rešenje 2.1.11]

    Zadatak 2.1.12 Program učitava pet karaktera. Ispisati koliko puta su sepojavile cifre.

    Primer 1Interakcija sa programom:Unesite karaktere: A1cA32

    Primer 2Interakcija sa programom:Unesite karaktere: 2a45_2

    Primer 3Interakcija sa programom:Unesite karaktere: 439865

    Primer 4Interakcija sa programom:Unesite karaktere: B6(vV1

    [Rešenje 2.1.12]

    Zadatak 2.1.13 Napisati program koji za unetu godinu ispisuje da li jeprestupna.

    Primer 1Interakcija sa programom:Unesite godinu: 2016Godina je prestupna.

    Primer 2Interakcija sa programom:Unesite godinu: 1997Godina nije prestupna.

    Primer 3Interakcija sa programom:Unesite godinu: 2000Godina je prestupna.

    Primer 4Interakcija sa programom:Unesite godinu: 1900Godina nije prestupna.

    33

  • 2 Kontrola toka

    [Rešenje 2.1.13]

    Zadatak 2.1.14 Broj je Armstrongov ako je jednak zbiru kubova svojihcifara. Napisati program koji za dati trocifren broj proverava da li je Armstron-gov.

    Primer 1Interakcija sa programom:Unesite broj: 153Broj je Amstrongov.

    Primer 2Interakcija sa programom:Unesite broj: 111Broj nije Amstrongov.

    Primer 3Interakcija sa programom:Unesite broj: 84Greska: Niste uneli trocifren broj!

    Primer 4Interakcija sa programom:Unesite broj: 371Broj je Amstrongov.

    [Rešenje 2.1.14]

    Zadatak 2.1.15 Napisati program koji ispisuje proizvod parnih cifara une-tog četvorocifrenog broja.

    Primer 1Interakcija sa programom:Unesite cetvorocifreni broj: 8123Proizvod parnih cifara: 16

    Primer 2Interakcija sa programom:Unesite cetvorocifreni broj: 3579Nema parnih cifara.

    Primer 3Interakcija sa programom:Unesite cetvorocifreni broj: -1234Proizvod parnih cifara: 8

    Primer 4Interakcija sa programom:Unesite broj: 288Broj nije cetvorocifren!

    [Rešenje 2.1.15]

    Zadatak 2.1.16 Napisati program koji učitava četvorocifreni broj i ispisujebroj koji se dobija kada se unetom broju razmene najmanja i najveća cifra. Na-pomena: U slučaju da se najmanja ili najveća cifra pojavljuju na više pozicija,uzeti prvo pojavljivanje.

    Primer 1Interakcija sa programom:Unesite broj: 28638263

    Primer 2Interakcija sa programom:Unesite broj: 247Broj nije cetvorocifren!

    34

  • 2.1 Naredbe grananja

    Primer 3Interakcija sa programom:Unesite broj: 11929112

    Primer 4Interakcija sa programom:Unesite broj: -4239-4932

    [Rešenje 2.1.16]

    Zadatak 2.1.17 Napisati program koji ispituje da li se tačke A(x1, y1) iB(x2, y2) nalaze u istom kvadrantu i ispisuje odgovor DA ili NE.

    [Rešenje 2.1.17]

    Zadatak 2.1.18 Napisati program koji ispituje da li se tačke A(x1, y1),B(x2, y2) i C(x3, y3) nalaze na istoj pravoj i ispisuje odgovor DA ili NE.

    Zadatak 2.1.19 Napisati program za rad sa intervalima. Za dva intervalarealne prave [a1, b1] i [a2, b2], program treba da odredi:

    a) dužinu zajedničkog dela ta dva intervala

    b) najveći interval sadržan u datim intervalima (presek), a ako on ne postojidati odgovarajuću poruku.

    c) dužinu realne prave koju pokrivaju ta dva intervala

    d) najmanji interval koji sadrži date intervale.

    Primer 1Interakcija sa programom:Unesite redom a1, b1, a2 i b2: 2 9 4 11Duzina zajednickog dela: 5Presek intervala: [4,9]Zajednicka duzina intervala: 9Najmanji interval: [2, 11]

    Primer 2Interakcija sa programom:Unesite redom a1, b1, a2 i b2: 1 2 10 13Duzina zajednickog dela: 0Presek intervala: prazanZajednicka duzina intervala: 4Najmanji interval: [1, 13]

    Zadatak 2.1.20 Napisati program koji za uneti ceo broj x ispisuje njegovznak, tj da li je broj jednak nuli, manji od nule ili veći od nule.

    Primer 1Interakcija sa programom:Unesite jedan ceo broj: 17Broj je veci od nule.

    Primer 2Interakcija sa programom:Unesite jedan ceo broj: 0Broj je jednak nuli.

    35

  • 2 Kontrola toka

    Primer 3Interakcija sa programom:Unesite jedan ceo broj: -586Broj je manji od nule.

    Primer 4Interakcija sa programom:Unesite jedan ceo broj: 62Broj je veci od nule.

    [Rešenje 2.1.20]

    Zadatak 2.1.21 Napisati program koji za unete koeficijente kvadratnejednačine ispisuje koliko realnih rešenja jednačina ima i ako ih ima, ispisuje ihzaokružene na dve decimale.

    Primer 1Interakcija sa programom:Unesite koeficijente A, B i C: 1 3 2Jednacina ima dva razlicita realna resenja:

    -1.00 i -2.00

    Primer 2Interakcija sa programom:Unesite koeficijente A, B i C: 1 1 1Jednacina nema resenja.

    [Rešenje 2.1.21]

    Zadatak 2.1.22 Napisati program koji za uneti četvorocifreni broj prove-rava da li su njegove cifre uređene rastuće, opadajuće ili nisu uređene i štampaodgovarajuću poruku.

    Primer 1Interakcija sa programom:Unesite cetvorocifreni broj: 1389Cifre su uredjene neopadajuce.

    Primer 2Interakcija sa programom:Unesite cetvorocifreni broj: -9622Cifre su uredjene nerastuce.

    Primer 3Interakcija sa programom:Unesite cetvorocifreni broj: 6792Cifre nisu uredjene.

    Primer 4Interakcija sa programom:Unesite cetvorocifreni broj: 88Uneti broj nije cetvorocifren.

    [Rešenje 2.1.22]

    Zadatak 2.1.23 Napisati program koji učitava karakter i:

    a) ako je c malo slovo, ispisuje odgovarajuće veliko

    b) ako je c veliko slovo, ispisuje odgovarajuće malo

    36

  • 2.1 Naredbe grananja

    c) ako je c cifra, ispisuje poruku cifra

    d) u ostalim slučajevima, ispisuje karakter c između dve zvezdice.

    Primer 1Interakcija sa programom:Unesite karakter: Kk

    Primer 2Interakcija sa programom:Unesite karakter: 8cifra

    Primer 3Interakcija sa programom:Unesite karakter: >*>*

    Primer 4Interakcija sa programom:Unesite karakter: oO

    [Rešenje 2.1.23]

    Zadatak 2.1.24 U nizu 12345678910111213....9899 ispisani su redom brojeviod 1 do 99. Napisati program koji za uneti ceo broj k (1 ≥k ≥189) ispisuje cifrukoja se nalazi na k-toj poziciji datog niza.

    Primer 1Interakcija sa programom:Unesite k: 13Na 13-toj poziciji je broj 1.

    Primer 2Interakcija sa programom:Unesite k: 105Na 105-toj poziciji je broj 7.

    [Rešenje 2.1.24]

    Zadatak 2.1.25 Data je funkcija f(x) = 2 · cos(x) − x3. Napisati pro-gram koji za učitanu vrednost realne promenljive x i vrednost celobrojne pro-menljive k koje može biti 1, 2 ili 3 izračunava vrednost funkcije F (k, x) =f(f(f(...f(x))) gde je funkcija f primenjena k-puta i ispisuje je zaokruženu na dvedecimale. U slučaju neispravnog ulaza, odštampati odgovarajuću poruku o grešci.

    Primer 1Interakcija sa programom:Unesite redom x i k: 2.31 2F(2.31, 2)=2557.52

    Primer 2Interakcija sa programom:Unesite redom x i k: 12 1F(12, 1)=-1726.31

    Primer 3Interakcija sa programom:Unesite redom x i k: 2.31 0Greska: nedozvoljena vrednost za k

    Primer 4Interakcija sa programom:Unesite redom x i k: 1 3F(1, 3)=-8.74

    37

  • 2 Kontrola toka

    [Rešenje 2.1.25]

    Zadatak 2.1.26 Napisati program koji za uneti redni broj dana u nedelji is-pisuje ime odgovarajućeg dana. U slučaju pogrešnog unosa ispisati odgovarajućuporuku.

    Primer 1Interakcija sa programom:Unesite broj: 4U pitanju je: cetvrtak

    Primer 2Interakcija sa programom:Unesite broj: 7U pitanju je: nedelja

    Primer 3Interakcija sa programom:Unesite broj: 8Greska: nedozvoljeni unos!

    Primer 4Interakcija sa programom:Unesite broj: 2U pitanju je: utorak

    [Rešenje 2.1.26]

    Zadatak 2.1.27 Napisati program koji za uneti karakter ispituje da li jesamoglasnik.

    Primer 1Interakcija sa programom:Unesite jedan karakter: AUneti karakter je samoglasnik.

    Primer 2Interakcija sa programom:Unesite jedan karakter: iUneti karakter je samoglasnik.

    Primer 3Interakcija sa programom:Unesite jedan karakter: fUneti karakter nije samoglasnik.

    Primer 4Interakcija sa programom:Unesite jedan karakter: 4Uneti karakter nije samoglasnik.

    [Rešenje 2.1.27]

    Zadatak 2.1.28 Napisatiti program koji učitava dva cela broja i jedan odkaraktera +, -, *, / ili % i ispisuje vrednost izraza dobijenog primenom dateoperacije na date argumente. U slučaju pogrešnog unosa ispisati odgovarajućuporuku.

    Primer 1Interakcija sa programom:Unesite operator i dva cela broja: - 8 11Rezultat je: -3

    Primer 2Interakcija sa programom:Unesite operator i dva cela broja: / 14 0Greska: deljenje nulom nije dozvoljeno!

    38

  • 2.1 Naredbe grananja

    Primer 3Interakcija sa programom:Unesite operator i dva cela broja: ? 5 7Greska: nepoznat operator!

    Primer 4Interakcija sa programom:Unesite operator i dva cela broja: / 19 5Rezultat je: 3

    [Rešenje 2.1.28]

    Zadatak 2.1.29 Napisati program koji za uneti dan i mesec ispisuje godišnjedoba kojem pripadaju. Napomena: Podrazumevati da je unos korektan.

    Primer 1Interakcija sa programom:Unesite dan i mesec: 14 10jesen

    Primer 2Interakcija sa programom:Unesite dan i mesec: 2 8leto

    Primer 3Interakcija sa programom:Unesite dan i mesec: 27 2zima

    Primer 4Interakcija sa programom:Unesite dan i mesec: 19 5prolece

    [Rešenje 2.1.29]

    Zadatak 2.1.30 Napisati program koji za unetu godinu i mesec ispisujenaziv meseca kao i koliko dana ima u tom mesecu te godine.

    [Rešenje 2.1.30]

    Zadatak 2.1.31 Napisati program koji za uneti datum u formatu dan.me-sec.godina. proverava da li je korektan.

    Primer 1Interakcija sa programom:Unesite datum: 25.11.1983.Datum je korektan!

    Primer 2Interakcija sa programom:Unesite datum: 1.17.2004.Datum nije korektan!

    [Rešenje 2.1.31]

    Zadatak 2.1.32 Napisati program koji za korektno unet datum u formatudan.mesec.godina. ispisuje datum prethodnog dana.

    39

  • 2 Kontrola toka

    Primer 1Interakcija sa programom:Unesite datum: 30.4.2008.Prethodni datum: 29.4.2008.

    Primer 2Interakcija sa programom:Unesite datum: 1.12.2005.Prethodni datum: 30.11.2005.

    [Rešenje 2.1.32]

    Zadatak 2.1.33 Napisati program koji za korektno unet datum u formatudan.mesec.godina. ispisuje datum narednog dana.

    Primer 1Interakcija sa programom:Unesite datum: 30.4.2008.Naredni datum: 1.5.2008.

    Primer 2Interakcija sa programom:Unesite datum: 1.12.2005.Naredni datum: 2.12.2005.

    Zadatak 2.1.34 Korisnik unosi tri cela broja: P , Q i R. Nakon toga unosii dva karaktera, op1 i op2. Ovi karakteri predstavljaju operacije nad unetimbrojevima i imaju naredno značenje:

    • karakter k predstavlja logičku konjukciju

    • karakter d predstavlja logičku disjunkciju

    • karakter m predstavlja relaciju manje

    • karakter v predstavlja relaciju veće

    Program treba da sračuna vrednost izraza P op1 Q op2 R i da ga ispiše.

    Primer 1Interakcija sa programom:Unesite tri cela broja: 0 1 2Unesite dva karaktera cela broja: k m1

    Primer 2Interakcija sa programom:Unesite tri cela broja: -3 -1 0Unesite dva karaktera cela broja: d k0

    * Zadatak 2.1.35 Program učitava jedan karakter i osam realnih brojevakoji predstavljaju koordinate četiri tačke: A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4).Na osnovu unetog karaktera ispisuje se odgovarajuća poruka na standardni izlaz:

    • ukoliko je uneti karakter k - proverava da li su date tačke temena pravouga-onika čije su stranice paralelne koordinatnim osama i u slučaju da jesu, is-pisuje vrednost obima datog pravougaonika. Možemo podrazumevati da će

    40

  • 2.2 Rešenja

    korisnik koordinate tačaka unosi redom A,B,C,D, pri čemu ABCD opisujepravougaonik čije su stranice AB,BC,CD,DA, a dijagonale AC i BD. Naprimer, tačke (1, 1), (2, 1), (2, 2), (1, 2) čine pravougaonik čije su stranice pa-ralelne koordinatnim osama i čiji je obim 4 a tačke (1, 1), (2, 2), (3, 3), (4, 4)ne čine pravougaonik.

    • ukoliko je uneti karakter h - proverava da li su unete tačke kolinearne iukoliko jesu, ispisuje jednačinu prave kojoj pripadaju. Na primer, tačke(1, 2), (2, 3), (3, 4), (4, 5) su kolinearne i pripadaju pravoj y = x + 1, tačke(1, 1), (1, 2), (1, 3), (1, 4) su kolinearne i pripadaju pravoj x = 1, a tačke(1, 1), (2, 1), (2, 2), (1, 2) nisu kolinearne.

    • ukoliko je uneti karakter j - Kramerovim pravilom proverava da li je sistemjednačina x1∗p+x2∗q = x4−x3, y1∗p+y2∗q = y4−y3 određen, neodređenili nema rešenja, i u slučaju da je određen ispisuje rešenja.

    [Rešenje 2.1.35]

    Zadatak 2.1.36 Polje šahovske table se definiše parom prirodnih brojevane većih od 8: prvi se odnosi na red, drugi na kolonu. Ako su dati takvi parovi,napisati program koji proverava:

    a) da li su polja (k, m) i (l, n) iste boje

    b) da li kraljica sa (k, l) ugrožava polje (m, n)

    c) da li konj sa (k, l) ugrožava polje (m, n)

    2.2 Rešenja

    Rešenje 2.1.1

    1 #include

    3 int main(){

    5 int a, b, min;printf("Unesite dva cela broja: ");

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

    9 /* Promenljiva min dobija vrednost promenljive a. */min = a;

    41

  • 2 Kontrola toka

    11

    /* Ako je b

  • 2.2 Rešenja

    9 scanf("%d", &x);

    11 /* Obratiti paznju: x==0 - relacija jednakosti (da li jepromenljiva x jednaka nuli) x=0 - naredba dodele (promenljiva

    13 x dobija vrednost nula) */

    15 /* Proveravamo da li je uneti broj jednak nuli. Ako jeste,prekidamo sa daljim izvrsavanjem programa navodjenjem naredbe

    17 return. Argument -1 u naredbi return oznacava da program nijeuspesno zavrsen */

    19 if (x == 0) {printf("Nedozvoljeno deljenje nulom\n");

    21 return -1;}

    23

    /* Primenom operatora / na argumente 1 i x dobijamo rezultat25 celobrojnog deljenja ovih argumenata. Da bismo dobili

    kolicnik, koji je realna vrednost, neophodno je da jedan od27 argumenata zapisemo kao realnu vrednost, npr celobrojnu

    vrednost 1 zapisemo kao realnu vrednost 1.0. Ovakav postupak29 se naziva implicitna konverzija. */

    31 rx = 1.0 / x;printf("Reciprocna vrednost unetog broja:%.4f\n", rx);

    33

    return 0;35 }

    Rešenje 2.1.5

    1 #include

    3 int main(){

    5 int a, b, c;int s;

    7 printf("Unesite tri cela broja:");scanf("%d%d%d", &a, &b, &c);

    9

    /* inicijalizujemo promenljivu s na nulu */11 s = 0;

    13 /* U naredbi dodele s=s+a vrednost izraza sa desne strane znakajednakosti dodeljujemo promenljivoj sa leve strane znaka

    15 jednakosti. Staru vrednost promenljive s saberemo sa vrednoscupromenljive a i dobijenu vrednost upisemo u promenljivu s. */

    17

    if (a > 0)19 s = s + a;

    21 /* s+=b je skraceni zapis za s=s+b */

    43

  • 2 Kontrola toka

    23 if (b > 0)s += b;

    25

    if (c > 0)27 s += c;

    29 printf("Suma unetih pozitivnih brojeva: %d\n", s);return 0;

    31 }

    Rešenje 2.1.6

    #include 2

    int main()4 {

    unsigned a, b, c;6 unsigned min;

    unsigned cena_bez_popusta , cena_sa_popustom;8

    printf("Unesite cene tri artikla:");10 scanf("%u%u%u", &a, &b, &c);

    12 /*Racunamo minimum tri broja. Dodeljujemo promenljivoj min

    14 vrednost prvog broja. */min = a;

    16

    /*18 Ako je drugi broj manji od minimuma, to znaci da promenljiva

    min ne sadrzi najmanji broj. Dodeljujemo joj vrednost drugog20 broja. */

    if (min > b)22 min = b;

    24 /*Ako je treci broj manji od minimuma, to znaci da promenljiva

    26 min ne sadrzi najmanji broj. Dodeljujemo joj vrednost trecegbroja. */

    28 if (min > c)min = c;

    30

    cena_bez_popusta = a + b + c;32 cena_sa_popustom = cena_bez_popusta - min + 1;

    34 printf("Cena sa popustom: %u\nUsteda: %u\n",cena_sa_popustom , cena_bez_popusta - cena_sa_popustom);

    36

    return 0;38 }

    44

  • 2.2 Rešenja

    Rešenje 2.1.7

    1 #include #include

    3

    int main()5 {

    int n, j, d, s, h, max;7

    /* Ucitavamo broj */9 printf("Unesite cetvorocifreni broj: ");

    scanf("%d", &n);11

    /* Za slucaj da je broj negativan, uzimamo apsolutnu vrednost13 unetog broja */

    n = abs(n);15

    /* Ako uneti broj nije cetvorocifren, ispisujemo poruku o gresci17 i prekidamo izvrsavanje programa. */

    if (n < 1000 || n > 9999) {19 printf("Greska: Niste uneli cetvorocifren broj!\n");

    return -1;21 }

    23 /* Ako je broj cetvorocifren, izdvajamo cifre broja: j -jedinice,d - desetice, s - stotine i h - hiljade */

    25 j = n % 10;d = (n / 10) % 10;

    27 s = (n / 100) % 10;h = n / 1000;

    29

    /* Odredjujemo maksimalnu cifru */31 max = j;

    33 if (d > max)max = d;

    35

    if (s > max)37 max = s;

    39 if (h > max)max = h;

    41

    /* II nacin: if(j>d && j>s && j>h) max=j; if(d>j && d>s && d>h)43 max=d; if(s>j && s>d && s>h) max=s; if(h>j && h>d && h>s)

    max=h; */45

    /* Ispisujemo rezultat */47 printf("Najveca cifra je: %d\n", max);

    45

  • 2 Kontrola toka

    49 return 0;}

    Rešenje 2.1.8

    #include2

    int main()4 {

    int sati;6 int minuti;

    int preostali_sati;8 int preostali_minuti;

    10 /* Ukoliko naredbu printf zelimo da napisemo u dva reda, i tomprilikom prekidamo deo pod navodnicima, to mozemo uraditi

    12 navodjenjem navodnika na kraju prvog i na pocetku narednogreda: */

    14

    printf("Unesite vreme (broj sati u itervalu [0,24),\n"16 "broj minuta u intervalu [0,60)):");

    scanf("%d%d", &sati, &minuti);18

    /* U slucaju da je unos neispravan, ispisujemo poruku o gresci i20 prekidamo dalje izvrsavanje programa.

    22 Uslov u if naredbi je disjunkcija (operator ||) sastavljena od4 disjunkata. Svaki od njih je izraz sa relacionim operatorom

    24 i ima vrednost 1 ako je izraz tacan i 0 u suprotnom. Da bidisjunkcija bila tacna, bar jedan od disjunkata mora da bude

    26 tacan. Zbog lenjog izracunavanja, vrednost disjunkata ce bitiracunata do vrednosti prvog disjunkta koji je tacan. To je

    28 znak da je uslov u if naredbi ispunjen i nema potrebe racunativrednosti drugih disjunkata. */

    30

    if (sati > 24 || sati < 0 || minuti > 59 || minuti < 0) {32 printf("Neispravan unos.\n");

    return -1;34 }

    36 preostali_sati = 24 - sati - 1;preostali_minuti = 60 - minuti;

    38

    if (preostali_minuti == 60) {40 preostali_sati++;

    preostali_minuti = 0;42 }

    44 /* Ukoliko naredbu printf zelimo da napisemo u dva reda i pritomne prekidamo deo pod navodnicima, to mozemo uraditi bez

    46

  • 2.2 Rešenja

    46 navodjenja dodatnih karaktera: */printf("Do ponoci je ostalo %d sati i %d minuta\n",

    48 preostali_sati , preostali_minuti);

    50 return 0;}

    Rešenje 2.1.9

    #include 2

    int main()4 {

    char c;6 printf("Unesite jedan karakter:");

    scanf("%c", &c);8

    printf("Uneti karakter: %c, njegov ASCII kod: %d\n", c, c);10

    /* Razlika izmedju ASCII koda svakog malog i odgovarajuceg12 velikog slova je konstanta koja se moze sracunati izrazom

    'a'-'A' (i iznosi 32) */14

    if (c >= 'A' && c = 'a' && c = 'a' && c1

  • 2 Kontrola toka

    /* I ako jeste, uvecavamo broj malih slova */15 broj_malih_slova++;

    }17

    /* Proveravamo da li je drugi karakter malo slovo */19 if (c2 >= 'a' && c2 = 'a' && c3 = 'a' && c4 = 'a' && c5

  • 2.2 Rešenja

    U slucaju da je uslov ispunjen, uvecavamo brojac br_a za jedan17 pomocu operatora inkrementacije ++ */

    if (tolower(getchar()) == 'a')19 br_a++;

    if (tolower(getchar()) == 'a')21 br_a++;

    if (tolower(getchar()) == 'a')23 br_a++;

    if (tolower(getchar()) == 'a')25 br_a++;

    if (tolower(getchar()) == 'a')27 br_a++;

    29 printf("%d\n", br_a);

    31 return 0;}

    Rešenje 2.1.12

    1 #include #include

    3

    int main()5 {

    int br_cif = 0;7

    /* Funkcija isdigit vraca 1 ako je dati karakter cifra i 0 u9 suprotnom. Nalazi se u biblioteci ctype.h. */

    if (isdigit(getchar()))11 br_cif++;

    if (isdigit(getchar()))13 br_cif++;

    if (isdigit(getchar()))15 br_cif++;

    if (isdigit(getchar()))17 br_cif++;

    if (isdigit(getchar()))19 br_cif++;

    21 printf("%d\n", br_cif);

    23 return 0;}

    Rešenje 2.1.13

    1 #include

    49

  • 2 Kontrola toka

    3 int main(){

    5 int x;printf("Unesite godinu:");

    7 scanf("%d", &x);

    9 if ((x % 4 == 0 && x % 100 != 0) || x % 400 == 0)printf("Godina je prestupna\n");

    11 elseprintf("Godina nije prestupna\n");

    13

    return 0;15 }

    Rešenje 2.1.14

    1 #include #include /* abs */

    3

    int main()5 {

    int n, j, d, s;7

    /* Ucitavamo broj */9 printf("Unesite broj: ");

    scanf("%d", &n);11

    /* Uzimamo apsolutnu vrednost broja za slucaj da je uneti broj13 negativan */

    n = abs(n);15

    /* Ako broj nije trocifren, izdajemo poruku o gresci i prekidamo17 dalje izvrsavanje programa */

    if (n < 100 || n > 999) {19 printf("Greska: Niste uneli trocifren broj!\n");

    return -1;21 }

    23 /*Izdvajamo cifre broja: j -jedinice, d - desetice, s - stotine */

    25 j = n % 10;d = (n / 10) % 10;

    27 s = n / 100;

    29 /* Proveravamo da li je broj Amstrongov */if (n == j * j * j + d * d * d + s * s * s)

    31 printf("Broj je Amstrongov.\n");else

    33 printf("Broj nije Amstrongov.\n");

    35 return 0;

    50

  • 2.2 Rešenja

    }

    Rešenje 2.1.15

    1 #include

    3 int main(){

    5 int n, j, d, s, h;int broj_parnih , proizvod_parnih;

    7

    printf("Unesite cetvorocifreni broj: ");9 scanf("%d", &n);

    11 n = abs(n);

    13 if (n < 1000 || n > 9999) {printf("Broj nije cetvorocifren.\n");

    15 return -1;}

    17

    /* Izdvajamo cifre broja: j -jedinice, d - desetice, s - stotine19 i h - hiljade */

    j = n % 10;21 d = (n / 10) % 10;

    s = (n / 100) % 10;23 h = n / 1000;

    25 /* Inicijalizujemo broj parnih cifara na 0 */broj_parnih = 0;

    27 /* Postavljamo proizvod parnih cifara na 1 (neutral za mnozenje) */proizvod_parnih = 1;

    29

    /* Proveravamo da li je cifra jedinica parna */31 if (j % 2 == 0) {

    proizvod_parnih = proizvod_parnih * j;33 broj_parnih++;

    }35

    /* Proveravamo da li je cifra desetica parna */37 if (d % 2 == 0) {

    proizvod_parnih = proizvod_parnih * d;39 broj_parnih++;

    }41

    /* Proveravamo da li je cifra stotina parna */43 if (s % 2 == 0) {

    proizvod_parnih = proizvod_parnih * s;45 broj_parnih++;

    }47

    51

  • 2 Kontrola toka

    /* Proveravamo da li je cifra hiljada parna */49 if (h % 2 == 0) {

    proizvod_parnih = proizvod_parnih * h;51 broj_parnih++;

    }53

    /* Proveravamo da li u zapisu broja ima parnih cifara i55 ispisujemo rezultat */

    if (broj_parnih == 0) {57 printf("Nema parnih cifara.\n");

    } else {59 printf("Proizvod parnih cifara: %d\n", proizvod_parnih);

    }61

    return 0;63 }

    Rešenje 2.1.16

    1 #include

    3 int main(){

    5 int broj;scanf("%d", &broj);

    7

    // Da bismo lakse odredili da li je cetvorocifren9 int absBroj = broj < 0 ? -broj : broj;

    if (absBroj = 10000) {11 printf("Broj nije cetvorocifren.");

    return -1;13 }

    15 int a = absBroj % 10;int b = (absBroj / 10) % 10;

    17 int c = (absBroj / 100) % 10;int d = absBroj / 1000;

    19

    int max = a, min = a;21 // cuvamo i stepen da bismo lakse zamenili cifre

    /* Ideja: 4179, mesta menjamo tako sto oduzmemo 9 i dodamo 1, ^ ^23 odnosno oduzemo 100 i dodamo 900 */

    int stepenMax = 1, stepenMin = 1;25

    if (b > max) {27 max = b;

    stepenMax = 10;29 }

    if (b < min) {31 min = b;

    stepenMin = 10;

    52

  • 2.2 Rešenja

    33 }

    35 if (c > max) {max = c;

    37 stepenMax = 100;}

    39 if (c < min) {min = c;

    41 stepenMin = 100;}

    43

    if (d > max) {45 max = d;

    stepenMax = 1000;47 }

    if (d < min) {49 min = d;

    stepenMin = 1000;51 }

    53 int rez;/* Ideja: 4179, mesta menjamo tako sto oduzmemo 9 i dodamo 1, ^ ^

    55 odnosno oduzemo 100 i dodamo 900 */if (broj > 0)

    57 rez = broj - max * stepenMax + min * stepenMax- min * stepenMin + max * stepenMin;

    59 elserez = broj + max * stepenMax - min * stepenMax

    61 + min * stepenMin - max * stepenMin;

    63 printf("%d\n", rez);

    65 return 0;}

    Rešenje 2.1.20

    1 #include

    3 int main(){

    5 int x;printf("Unesite jedan ceo broj:");

    7 scanf("%d", &x);

    9 if (x == 0)printf("Broj je jednak nuli\n");

    11 else if (x < 0)printf("Broj je manji od nule\n");

    13 elseprintf("Broj je veci od nule\n");

    53

  • 2 Kontrola toka

    15

    return 0;17 }

    Rešenje 2.1.21

    1 #include #include

    3

    int main()5 {

    float a, b, c;7 float D;

    float x1, x2;9 printf("Unesite koeficijente A, B i C:");

    scanf("%f%f%f", &a, &b, &c);11

    /* Proveravamo da li je kvadratna jednacina korektno zadata. */13 if (a == 0)

    if (b == 0)15 /* slucaj a==0 && b==0 && c==0 */

    if (c == 0)17 printf("Jednacina ima beskonacno mnogo resenja\n");

    /* slucaj a==0 && b==0 && c!=0 */19 else

    printf("Jednacina nema resenja\n");21 /* slucaj a==0 && b!=0 */

    else {23 x1 = -c / b;

    printf("Jednacina ima jedinstveno realno resenje %.2f\n", x1);25 }

    /* slucaj a!=0 */27 else {

    D = b * b - 4 * a * c;29 if (D < 0)

    printf("Jednacina nema realnih resenja\n");31 else if (D > 0) {

    /* funkcija sqrt nalazi se u biblioteci math.h (prevodjenje33 sa -lm opcijom) */

    x1 = (-b + sqrt(D)) / (2 * a);35 x2 = (-b - sqrt(D)) / (2 * a);

    printf("Jednacina ima dva razlicita realna resenja %.2f ",37 "i %.2f\n", x1, x2);

    } else {39 x1 = (-b) / (2 * a);

    printf("Jednacina ima jedinstveno realno resenje %.2f\n", x1);41 }

    }43

    return 0;45 }

    54

  • 2.2 Rešenja

    Rešenje 2.1.22

    #include 2 #include

    4 int main(){

    6 int x;char c1;

    8 char c10;char c100;

    10 char c1000;

    12 printf("Unesi jedan cetvorocifreni broj:");scanf("%d", &x);

    14

    /* Uzimamo apsolutnu vrednost unetog broja kako u slucaju da je16 negativan ne bismo za cifre dobili negativne brojeve. Funkcija

    abs nalazi se u zaglavlju stdlib.h */18 x = abs(x);

    20 if (x < 1000 || x > 9999) {printf("Uneti broj nije cetvorocifren\n");

    22 return -1;}

    24

    /* Izdvajamo cifre broja. */26 c1 = x % 10;

    c10 = (x / 10) % 10;28 c100 = (x / 100) % 10;

    c1000 = (x / 1000) % 10;30

    if (c1000 = c1)34 printf("Cifre su uredjene nerastuce \n");

    else36 printf("Cifre nisu uredjene\n");

    38 return 0;}

    Rešenje 2.1.23

    1 #include

    3 int main()

    55

  • 2 Kontrola toka

    {5 char c;

    7 printf("Unesite karakter: ");scanf("%c", &c);

    9

    if (c >= 'a' && c = 'A' && c = '0' && c = 10 && k

  • 2.2 Rešenja

    31 /* Ujedno, za neparno k se trazi cifra jedinica izdvojenogbroja */

    33 printf("Na %d-toj poziciji je broj %d.\n", k, broj % 10);

    35 } else {/* Ako je k paran broj, zapisan je ceo broj dvocifrenih

    37 brojeva i zapoceto je sa zapisom sledeceg

    39 9 oduzimamo jer je 9 broj cifara potrebnih za zapisjednocifrenih brojeva */

    41 n = (k - 9) / 2 + 1;

    43 /* Broj o kojem se radi je */broj = 9 + n;

    45

    /* Ujedno, za parno k se trazi cifra desetica izdvojenog47 broja */

    printf("Na %d-toj poziciji je broj %d.\n", k, broj / 10);49

    }51 } else {

    printf("Greska: Nedozvoljena vrednost broja k!\n");53 }

    55 return 0;}

    Rešenje 2.1.25

    1 #include #include

    3

    int main()5 {

    float x;7 int k;

    float F;9

    printf("Unesite redom x i k: ");11 scanf("%f %d", &x, &k);

    13 /* Proveravaju se vrednosti za k */if (k < 1 || k > 3) {

    15 printf("Greska: nedozvoljena vrednost za k!\n");return 0;

    17 }printf("F(%f,%d)=", x, k);

    19

    /* Analiziraju se moguci slucajevi */21 if (k == 1) {

    57

  • 2 Kontrola toka

    F = 2 * cos(x) - x * x * x;23 } else {

    if (k == 2) {25 x = 2 * cos(x) - x * x * x;

    F = 2 * cos(x) - x * x * x;27 } else {

    x = 2 * cos(x) - x * x * x;29 x = 2 * cos(x) - x * x * x;

    F = 2 * cos(x) - x * x * x;31 }

    }33

    /* Ispisuje se rezultat */35 printf("%f\n", F);

    37 return 0;}

    Rešenje 2.1.26

    1 #include

    3 int main(){

    5 int dan;

    7 printf("Unesite broj: ");scanf("%d", &dan);

    9

    switch (dan) {11 case 1:

    printf("ponedeljak\n");13 break;

    case 2:15 printf("utorak\n");

    break;17 case 3:

    printf("sreda\n");19 break;

    case 4:21 printf("cetvrtak\n");

    break;23 case 5:

    printf("petak\n");25 break;

    case 6:27 printf("subota\n");

    break;29 case 7:

    printf("nedelja\n");31 break;

    58

  • 2.2 Rešenja

    default:33 printf("Greska: nedozvoljeni unos!\n");

    }35

    return 0;37 }

    Rešenje 2.1.27

    1 #include

    3 int main(){

    5 char c;printf("Unesite jedan karakter:");

    7 scanf("%c", &c);

    9 /* Da bi se utvrdilo da li je karakter samoglasnik, neophodno jeproveriti da li odgovara nekom od sledecih karaktera:

    11 A,E,I,O,U,a,e,i,o,u */switch (c) {

    13 case 'A':case 'E':

    15 case 'I':case 'O':

    17 case 'U':case 'a':

    19 case 'e':case 'i':

    21 case 'o':case 'u':

    23 printf("Uneti karakter je samoglasnik\n");break;

    25 default:printf("Uneti karakter nije samoglasnik\n");

    27 break;}

    29

    return 0;31 }

    Rešenje 2.1.28

    1 #include

    3 int main(){

    5 char op;int x, y;

    59

  • 2 Kontrola toka

    7

    printf("Unesite operator i dva cela broja: ");9 scanf("%c %d %d", &op, &x, &y);

    11 switch (op) {case '+':

    13 printf("Rezultat je: %d\n", x + y);break;

    15 case '-':printf("Rezultat je: %d\n", x - y);

    17 break;case '*':

    19 printf("Rezultat je: %d\n", x * y);break;

    21 case '/':if (y == 0)

    23 printf("Greska: deljenje nulom nije dozvoljeno!\n");else

    25 printf("Rezultat je: %f\n", x * 1.0 / y);break;

    27 case '%':printf("Rezultat je: %d\n", x % y);

    29 break;default:

    31 printf("Greska: nepoznat operator!\n");}

    33

    return 0;35 }

    Rešenje 2.1.29

    1 #include

    3 int main(){

    5 int d, m;printf("Unesite dan i mesec");

    7 scanf("%d%d", &d, &m);

    9 /* Argument u naredbi switch mora biti celobrojna promenljiva,dok argument u naredbi case mora biti celobrojna konstanta. */

    11 switch (m) {/* Ispitujemo da li vazi m==1 ili m==2 */

    13 case 1:case 2:

    15 printf("zima\n");break;

    17 case 3:if (d < 21)

    19 printf("zima\n");

    60

  • 2.2 Rešenja

    else21 printf("prolece\n");

    break;23 case 4:

    case 5:25 printf("prolece\n");

    break;27 case 6:

    if (d < 21)29 printf("prolece\n");

    else31 printf("leto\n");

    break;33 case 7:

    case 8:35 printf("leto\n");

    break;37 case 9:

    if (d < 23)39 printf("leto\n");

    else41 printf("jesen\n");

    break;43 case 10:

    case 11:45 printf("jesen\n");

    break;47 case 12:

    if (d < 22)49 printf("jesen\n");

    else51 printf("zima\n");

    }53

    return 0;55 }

    Rešenje 2.1.30

    1 #include

    3 int main(){

    5 int godina;int mesec;

    7 int prestupna;

    9 printf("Unesite godinu: ");scanf("%d", &godina);

    11

    if (godina < 0) {

    61

  • 2 Kontrola toka

    13 printf("Lose uneta godina!\n");return -1;

    15 }

    17 /* Provera da li je godina prestupna, zbog februara */if ((godina % 4 == 0 && godina % 100 != 0)

    19 || godina % 400 == 0)prestupna = 1;

    21 elseprestupna = 0;

    23

    printf("Unesite redni broj meseca: ");25 scanf("%d", &mesec);

    27 switch (mesec) {case 1:

    29 printf("Januar, 31 dan\n");break;

    31 case 2:if (prestupna)

    33 printf("Februar, 29 dana\n");else

    35 printf("Februar, 28 dana\n");break;

    37 case 3:printf("Mart, 31 dan\n");

    39 break;case 4:

    41 printf("April, 30 dana\n");break;

    43 case 5:printf("Maj, 31 dan\n");

    45 break;case 6:

    47 printf("Jun, 30 dana\n");break;

    49 case 7:printf("Jul, 31 dan\n");

    51 break;case 8:

    53 printf("Avgust, 31 dan\n");break;

    55 case 9:printf("Septembar , 30 dana\n");

    57 break;case 10:

    59 printf("Oktobar, 31 dan\n");break;

    61 case 11:printf("Novembar , 30 dana\n");

    63 break;case 12:

    62

  • 2.2 Rešenja

    65 printf("Decembar , 31 dan\n");break;

    67 default:printf("Lose unet redni broj meseca!\n");

    69 }

    71 return 0;}

    Rešenje 2.1.31

    1 #include

    3 int main(){

    5 int dan, mesec, godina, dozvoljen_broj_dana;

    7 /* Citamo datum */printf("Unesite datum: ");

    9 scanf("%d.%d.%d", &dan, &mesec, &godina);

    11 /* Proveravamo godinu */if (godina < 0) {

    13 printf("Datum nije korektan (neispravna godina)!\n");return 0;

    15 }

    17 /* Proveravamo mesec */if (mesec < 1 || mesec > 12) {

    19 printf("Datum nije korektan (neispravan mesec)!\n");return 0;

    21 }

    23 /* Ako je mesec korektan, proveravamo broj dana */switch (mesec) {

    25 case 1:case 3:

    27 case 5:case 7:

    29 case 8:case 10:

    31 case 12:/* Dozvoljeni broj dana za januar, mart, maj, jul, avgust,

    33 oktobar i decembar je 31 */dozvoljen_broj_dana = 31;

    35 break;case 2:

    37 /* Proveravamo da li je godina prestupna */if (godina % 4 == 0 && godina % 100 != 0 || godina % 400 == 0)

    39 /* Ako jeste, dozvoljeni broj dana za februar je 29 */dozvoljen_broj_dana = 29;

    63

  • 2 Kontrola toka

    41 else/* Ako nije, dozvoljeni broj dana za februar je 28 */

    43 dozvoljen_broj_dana = 28;break;

    45 case 4:case 6:

    47 case 9:case 11:

    49 /* Dozvoljeni broj dana za april, jun, septembar i novembar je30 */

    51 dozvoljen_broj_dana = 30;break;

    53 }/* Proveravamo dan */

    55 if (dan < 0 || dan > dozvoljen_broj_dana) {printf("Datum nije korektan (neispravan dan)!\n");

    57 return 0;}

    59

    /* Sve provere su ispunjene pa zakljucujemo da je datum korektan */61 printf("Ispravan datum!\n");

    63 return 0;}

    Rešenje 2.1.32

    1 #include

    3 int main(){

    5 int dan, mesec, godina;int prethodni_dan , prethodni_mesec , prethodni_godina;

    7

    /* Citamo datum */9 printf("Unesite datum: ");

    scanf("%d.%d.%d", &dan, &mesec, &godina);11

    /* Racunamo dan, mesec i godinu prethodnog dana */13 prethodni_dan = dan - 1;

    prethodni_mesec = mesec;15 prethodni_godina = godina;

    17 /* I po potrebi vrsimo korekcije */

    19 /* Ako je u pitanju prvi u mesecu */if (prethodni_dan == 0) {

    21 /* Treba korigovati mesec */prethodni_mesec = mesec - 1;

    23 /* Ako je u pitanju januar */if (prethodni_mesec == 0) {

    64

  • 2.2 Rešenja

    25 /* Treba korigovati i godinu */prethodni_mesec = 12;

    27 prethodni_godina = godina - 1;}

    29

    /* Analiziramo redni broj meseca kako bi odredili tacan dan */31 switch (prethodni_mesec) {

    case 1:33 case 3:

    case 5:35 case 7:

    case 8:37 case 10:

    case 12:39 prethodni_dan = 31;

    break;41 case 2:

    if ((prethodni_godina % 4 == 0 && prethodni_godina % 100 != 0)43 || prethodni_godina % 400 == 0)

    prethodni_dan = 29;45 else

    prethodni_dan = 28;47 break;

    case 4:49 case 6:

    case 9:51 case 11:

    prethodni_dan = 30;53 }

    }55

    /* Ispisujemo datum koji smo izracunali */57 printf("Prethodni datum: %d.%d.%d\n",

    prethodni_dan , prethodni_mesec , prethodni_godina);59

    return 0;61 }

    Rešenje 2.1.33 Rešenje je analogno rešenju zadatka 2.1.32.

    Rešenje 2.1.35

    #include2 #include

    4 int main(){

    6 char c;float x1, y1, x2, y2, x3, y3, x4, y4;

    8 float kab, kbc, kad;

    65

  • 2 Kontrola toka

    float dab, dad;10 float delta, deltap, deltaq;

    float O;12 float k, n;

    14 printf("Unesi jedan karakter:");scanf("%c", &c);

    16

    printf("Unesi realne koordinate 4 tacke:");18 scanf("%f%f%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);

    20 switch (c) {case 'k':

    22 if (y1 == y2 && y3 == y4 && x1 == x4 && x2 == x3) {dab = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));

    24 dad = sqrt(pow(x1 - x4, 2) + pow(y1 - y4, 2));O = 2 * dab + 2 * dad;

    26 printf("Obim pravougaonika je %f\n", O);} else

    28 printf("Tacke ne cine pravougaonik sa stranicama ","koje su paralelne koordinatnim osama\n");

    30 break;case 'h':

    32 /*Ukoliko se tacke A(x1,y1) i B(x2,y2) ne nalaze na pravoj

    34 koja je paralelna x osi, izracunamo k,n za pravu odredjenutackama A(x1,y1) i B(x2,y2) */

    36 if ((x1 - x2) != 0) {k = (y1 - y2) / (x1 - x2);

    38 n = y1 - k * x1;/*

    40 Proverimo da li tacke C(x3,y3) i D(x4,y4) nalaze na tojpravoj */

    42 if (y3 == x3 * k + n && y4 == x4 * k + n)printf("Tacke su kolinearne , pripadaju pravoj ",

    44 "y=%f*x+%f\n", k, n);else

    46 printf("Tacke nisu kolinearne\n");}

    48 /*Ukoliko se A i B nalaze na pravoj koja je paralelna x osi,

    50 proverimo da li tacke C(x3,y3) i D(x4,y4) nalaze na tojpravoj */

    52 else if (x3 == x1 && x4 == x1)printf("Tacke su kolinearne , pripadaju pravoj ",

    54 "x=%f\n", x1);else

    56 printf("Tacke nisu kolinearne\n");break;

    58 case 'j':delta = x1 * y2 - x2 * y1;

    60 deltap = x2 * (y4 - y3) - y2 * (x4 - x3);

    66

  • 2.3 Petlje

    deltaq = x1 * (y4 - y3) - y1 * (x4 - x3);62 if (delta != 0)

    printf("Sistem ima jedinstveno resenje %.2f, %.2f\n",64 deltap / delta, deltaq / delta);

    else if (deltap == 0 && deltaq == 0)66 printf("Sistem je neodredjen ili nema resenja.\n");

    else68 printf("Sistem nema resenja\n");

    break;70 default:

    printf("Nekorektan unos\n");72 }

    74 return 0;}

    2.3 Petlje

    Zadatak 2.3.1 Napisati program koji 5 puta ispisuje tekst Mi volimo daprogramiramo.

    Primer 1Interakcija sa programom:Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.

    [Rešenje 2.3.1]

    Zadatak 2.3.2 Napisati program koji učitava ceo broj n i ispisuje n putatekst Mi volimo da programiramo.

    Primer 1Interakcija sa programom:Unesite ceo broj: 6Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.Mi volimo da programiramo.

    Primer 2Interakcija sa programom:Unesite ceo broj 0

    [Rešenje 2.3.2]

    67

  • 2 Kontrola toka

    Zadatak 2.3.3 Napisati program koji učitava pozitivan ceo broj n a potomispisuje sve cele brojeve od 0 do n.

    Primer 1Interakcija sa programom:Unesite ceo pozitivan broj: 40 1 2 3 4

    Primer 2Interakcija sa programom:Unesite ceo pozitivan broj: -10Neispravan unos. Promenljiva mora biti

    pozitivna!

    [Rešenje 2.3.3]

    Zadatak 2.3.4 Napisati program koji učitava dva cela broja n i m ispisujesve cele brojeve iz intervala [n,m].

    (a) Koristiti while petlju.

    (b) Koristiti for petlju.

    (c) Koristiti do-while petlju.

    Primer 1Interakcija sa programom:Unesite dva cela broja: -2 4-2 -1 0 1 2 3 4

    Primer 2Interakcija sa programom:Unesite dva cela broja: 10 6Neispravan unos. Nisu dobro zadate granice

    intervala!

    [Rešenje 2.3.4]

    Zadatak 2.3.5 Napisati program koji učitava ceo pozitivan broj i izračunavanjegov faktorijel. U slučaju neispravnog unosa ispisati odgovarajuću poruku.

    Primer 1Interakcija sa programom:Unesite pozitivan broj: 18Faktorijel = 6402373705728000

    Primer 2Interakcija sa programom:Unesite pozitivan broj: 8Faktorijel = 40320

    Primer 3Interakcija sa programom:Unesite pozitivan broj: 40Broj je veliki, dolazi do

    prekoracenja.

    [Rešenje 2.3.5]

    Zadatak 2.3.6 Sa standradnog ulaza unose se realan broj x i ceo pozitivanbroj n. Napisati program koji izračunava n-ti stepen broja x, tj. xn.

    68

  • 2.3 Petlje

    Primer 1Interakcija sa programom:Unesite redom brojeve x i n:

    4 364.00000

    Primer 2Interakcija sa programom:Unesite redom brojeve x i n:

    5.8 56563.56768

    Primer 3Interakcija sa programom:Unesite redom brojeve x i n:

    11.43 01.00000

    [Rešenje 2.3.6]

    Zadatak 2.3.7 Sa standradnog ulaza unose se realan broj x i ceo broj n.Napisati program koji izračunava n-ti stepen broja x.

    Primer 1Interakcija sa programom:Unesite redom brojeve x i n: 2 -30.125

    Primer 2Interakcija sa programom:Unesite redom brojeve x i n: -3 29.000

    [Rešenje 2.3.7]

    Zadatak 2.3.8 Pravi delioci celog broja su svi delioci sem jedinice i samogtog broja. Napisati program za uneti ceo pozitivan broj x ispisuje sve njegoveprave delioce. U slučaju greške pri unosu podataka ispisati odgovarajuću poruku.

    Primer 1Interakcija sa programom:Unesite ceo broj veci od 0: 1002 4 5 10 20 25 50

    Primer 2Interakcija sa programom:Unesite ceo broj: -6neispravan unos.

    [Rešenje 2.3.8]

    Zadatak 2.3.9 Napisati program koji za uneti prirodan broj uklanja svenule sa njegove desne strane. Ispisati novodobijeni broj.

    Primer 1Interakcija sa programom:Unesite broj: 1200012

    Primer 2Interakcija sa programom:Unesite broj: 856856

    Primer 3Interakcija sa programom:Unesite broj: 14014

    [Rešenje 2.3.9]

    69

  • 2 Kontrola toka

    Zadatak 2.3.10 Napisati program koji učitava ceo broj i ispisuje njegovecifre u obrnutom poretku.

    Primer 1Interakcija sa programom:Unesite ceo broj: 67899 8 7 6

    Primer 2Interakcija sa programom:Unesite ceo broj: -8923455 4 3 2 9 8

    [Rešenje 2.3.10]

    Zadatak 2.3.11 Napisati program koji za uneti prirodan broj ispisuje da lije on deljiv sumom svojih cifara.

    Primer 1Interakcija sa programom:Unesite broj: 12Deljiv je sumom svojih

    cif