Uvod u organizaciju i arhitekturu računara 2 1

Слични документи
Funkcije predavač: Nadežda Jakšić

PROMENLJIVE, TIPOVI PROMENLJIVIH

Microsoft PowerPoint - Bitovi [Compatibility Mode]

P1.2 Projektovanje asemblera

Precesor Intel 8086

OPIS RAČUNARSKOG SISTEMA Računarski sistem se sastoji od procesora, operativne memorije, tajmera i terminala. Sve komponente računarskog sistema su me

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Funkcije predavač: Nadežda Jakšić

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language

RACUNARSKA ELEKTRONIKA – VEŽBE 3

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Konstrukcija i analiza algoritama Nina Radojičić februar Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne fun

Logicko projektovanje racunarskih sistema I

P11.3 Analiza zivotnog veka, Graf smetnji

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

Microsoft PowerPoint - C-4-1

P1.3 Projektovanje makroasemblera

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

AR2019

Algoritmi i arhitekture DSP I

Zbirka resenih zadataka iz arhitekture racunara

Uvod u računarstvo 2+2

2_Arhitektura racunara

Microsoft Word - 02 Elementi programskog jezika Pascal

LAB PRAKTIKUM OR1 _ETR_

Microsoft Word - 1. REALNI BROJEVI- formulice

Увод у организацију и архитектуру рачунара 1

Pojačavači

My_P_Red_Bin_Zbir_Free

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Grananje u programu predavač: Nadežda Jakšić

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

P9.1 Dodela resursa, Bojenje grafa

Microsoft Word - 1.Operacije i zakoni operacija

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

Programski jezik C

Matematka 1 Zadaci za vežbe Oktobar Uvod 1.1. Izračunati vrednost izraza (bez upotrebe pomoćnih sredstava): ( ) [ a) : b) 3 3

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language

Zadatak T=5: Jedinica WBSD propušta vred Potiče iz polja Rwb.LMD Signal Rwb.WRLMD izaziva propuštanje ove vrednosti 2. Vrednost 0000

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Microsoft Word - 11 Pokazivaci

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Uvod u računarstvo 2+2

Logičke izjave i logičke funkcije

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

1 Polinomi jedne promenljive Neka je K polje. Izraz P (x) = a 0 + a 1 x + + a n x n = n a k x k, x K, naziva se algebarski polinom po x nad poljem K.

I колоквијум из Основа рачунарске технике I СИ- 2017/2018 ( ) Р е ш е њ е Задатак 1 Тачка А Потребно је прво пронаћи вредности функција f(x

Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: min c T x Ax = b x 0 x Z n Gde pretpostavljamo da je A celobrojna matrica

6-8. ČAS Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: Gde pretpostavljamo da je A celobrojna matrica dimenzije,. Takođe

Алгебарски изрази 1. Запиши пет произвољних бројевних израза. 2. Израчунај вредност израза: а) : ; б) : (

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

Математика 1. Посматрај слику и одреди елементе скуупова: а) б) в) средњи ниво А={ } B={ } А B={ } А B={ } А B={ } B А={ } А={ } B={ } А B={ } А B={ }

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

13E114PAR, 13S113PAR DOMAĆI ZADATAK 2018/2019. Cilj domaćeg zadatka je formiranje petlje softverske protočnosti za minimalni broj ciklusa.

Slide 1

Програмирај!

Microsoft Word - Matematika_kozep_irasbeli_javitasi_0802.doc

JEDNAKOSTI I JEDNAČINE,

MATEMATIKA EKSTERNA PROVJERA ZNANJA UČENIKA NA KRAJU III CIKLUSA OSNOVNE ŠKOLE UPUTSTVO VRIJEME RJEŠAVANJA TESTA: 70 MINUTA Pribor: grafitna olovka i

Орт колоквијум

08 RSA1

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

Uvod u takmičarsko programiranje

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

Microsoft Word - O nekim klasicnim kvadratnim Diofantovim jednacinama.docx

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Microsoft Word - 6ms001

INF INFORMATIKA INF.27.HR.R.K1.20 INF D-S INF D-S027.indd :50:41

03 SUBP

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

070-ALIP2-udzbenik.indb

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

М А Т Е М А Т И К А Први разред (180) Предмети у простору и односи међу њима (10; 4 + 6) Линија и област (14; 5 + 9) Класификација предмета према свој

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

Edukacioni racunarski sistem

Рационални Бројеви Скуп рационалних бројева 1. Из скупа { 3 4, 2, 4, 11, 0, , 1 5, 12 3 } издвој подскуп: а) природних бројева; б) целих броје

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Microsoft Word - SIORT1_2019_K1_resenje.docx

Elementi praćenja i ocjenjivanja za nastavni predmet Matematika u 4. razredu Elementi praćenja i ocjenjivanja za nastavni predmet Matematika u 4. razr

Fortran

My_P_Trigo_Zbir_Free

RAČUNARSKI SISTEM Ne postoji jedinstvena definicija pojma računarski sistem. Računarski sistem predstavlja skup mašina i pridruženih metoda (realizova

ELEKTROTEHNIČKI FAKULTET, UNIVERZITET U BEOGRADU KATEDRA ZA ELEKTRONIKU UVOD U ELEKTRONIKU - 13E041UE LABORATORIJSKA VEŽBA Primena mikrokontrolera

PowerPoint Presentation

7. а) 3 4 ( ) ; б) ( ) ( 2 5 ) ; в) ( ) 3 16 ; г) ( ). 8. а) ( г) ) ( ) ; б)

Математика основни ниво 1. Одреди елементе скупова A, B, C: a) б) A = B = C = 2. Запиши елементе скупова A, B, C на основу слике: A = B = C = 3. Броје

Skripte2013

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Транскрипт:

Uvod u organizaciju i arhitekturu računara 2 1

1 Asemblersko programiranje u Intel 64 arhitekturi 1.1 Sintaksa Opšta sintaksa asemblera je takva da se čita linija po linija. Linije mogu biti prazne u kom slučaju se ignorišu. Linija takode može biti direktiva (počinje simbolom.) ili instrukcija. Komentarima se smatra sav sadrzaj do kraja linije nakon simbola #. Linija takode može sadržati samo komentar. Definicija labele se sastoji od identifikatora iza koga stoji simbol :. Identifikator mora početi slovom ili _ a može sadržati slova, brojeve i _. Labele zamenjuju adrese podataka i instrukcija. One se prilikom prevodenja programa prevode u memorijske adrese. Direktive imaju posebno značenje:.intel_syntax noprefix - označava da se koristi Intel-ova sintaksa, dok se imena registara koriste bez prefiksa %.data - započinje sekciju inicijalizovanih podataka.bss - započinje sekciju neinicijalizovanih podataka.text - započinje sekciju koda.asciz - kreira se ASCII niska na čijem se kraju automatski navodi terminirajuća nula.int - kreira se jedan ili niz celih brojeva, članovi su razvojeni zapetom.byte - kreira se jedan ili niz bajtova.word - kreira se jedan ili niz slogova od dva bajta.long - kreira se jedan ili niz slogova dužine četiri bajta.quad - kreira se jedan ili niz slogova dužine osam bajtova.global ime - označava se labela ime kao globalna, čime se omogućava linkeru da poveže definisane simbole. Jedna instrukcija se sastoji od koda instrukcije i operanda (jednog ili više) ukoliko instrukcija zahteva operande. Svaka instrukcija ima svoju simboličku oznaku. Opšti oblik instrukcije sa dva argumenta je instr dest, src Operandi mogu biti Registarski - navodi se registar Memorijski - navodi se adresa na kojoj se nalazi vrednost sa kojom radimo Neposredni - navodi se sama vrednost sa kojom radimo Memorijsko adresiranje ima oblik [B + S I + D], gde je B bazna adresa, S je faktor, I je indeks, dok je D pomeraj. Izostavljanjem nekog od ovih elemenata dobijaju se različite kombinacije izračunavanja adrese operanda. Na primer, moguće je navesti samo baznu adresu [B], ili baznu adresu i pomeraj [B + D]. Oblik [B + S I] je zgodan prilikom rada sa nizovima: u bazni registar se smesti adresa početka niza, a u indeksni registar se smesti tekući indeks (koji se ažurira u svakoj iteraciji). Za faktor se uzima veličina elementa niza. U slučaju da instrukcija koja sadrži memorijski operand nema ni jedan registarski operand, tada se mora eksplicitno specificirati širina memorijskog operanda. Ovo se radi navodenjem jednog od prefiksa: byte ptr - za jednobajtni podatak word ptr - za dvobajtni podatak dword ptr - za četvorobajtni podatak qword ptr - za osmobajtni podatak Ovo nije neophodno ako registarski operand postoji u instrukciji, zato što onda njegova širina implicitno odreduje širinu operanada koji se koriste. 2

1.2 Registri opšte namene Intel 64 arhitektura ima 16 64-bitnih registara opšte namene: RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, kao i registre R8-R15. Nizim delovima registara se može pristupiti preko oznaka EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, uz dodatak registara R8D-R15D. Ovi registri su generalno opšte namene, mada u praksi neki imaju specijalne uloge. Tako, na primer, RSP se uvek koristi kao pokazivač vrha steka, RBP je pokazivač tekućeg okvira steka. Ostali registri u nekim situacijama mogu imati specijalne uloge (npr. pri množenju i deljenju se uvek implicitno koriste registri RAX i RDX, dok se pri radu sa stringovima za pokazivače uvek koriste registri RSI i RDI). Za brojačke petlje se uglavnom koristi registar RCX, pošto odredene instrukcije kontrole toka implicitno koriste i menjaju ovaj registar. 1.3 Instrukcije 1.3.1 Instrukcije transfera MOV op1, op2 - premeštanje (op1 = op2) MOVZX op1, op2 - u prvi operand se smešta vrednost drugog operanda proširena nulama MOVSX op1, op2 - u prvi operand se smešta vrednost drugog operanda proširena u skladu sa znakom LEA op1, op2 - učitavanje adrese drugog operanda u prvi operand, pri čemu je drugi operand memorijski operand. Prilikom premeštanja vrednosti, ukoliko nije navedeno drugačije, premešta se vrednost koja je veličine registra koji učestvuje u operaciji. Što znači da ako se kao operand navede memorijska lokacija, onda se radi sa veličinom koju odreduje registar. 1.3.2 Aritmetičke instrukcije ADD op1, op2 - sabiranje (op1 = op1 + op2) SUB op1, op2 - oduzimanje (op1 = op1 - op2) CDQE - označeno proširivanje eax na rax CDQ - označeno proširivanje eax na edx:eax CQO - označeno proširivanje rax na rdx:rax MUL op - množenje neoznačenih celih brojeva (rdx:rax = rax * op) IMUL op - množenje označenih celih brojeva (rdx:rax = rax * op) DIV op - deljenje neoznačenih celih brojeva (rax = rdx:rax / op, rdx = rdx:rax % op) IDIV op - deljenje označenih celih brojeva (rax = rdx:rax / op, rdx = rdx:rax % op) NEG op - promena znaka (op = -op) INC op - uvećanje (op = op + 1) DEC op - umanjenje (op = op - 1) Oznaka rdx:rax znači 128-bitni ceo broj čiji su viši bitovi u rdx a niži u rax. 1.3.3 Logičke instrukcije AND op1, op2 - bitovska logička konjukcija (op1 = op1 & op2) OR op1, op2 - bitovska logička disjunkcija (op1 = op1 op2) XOR op1, op2 - bitovska logička ekskluzivna disjunkcija (op1 = op1 ^ op2) NOT op - bitovska negacija (op = ~op) SHL op1, op2 - shift-ovanje ulevo (op1 = op1 << op2). op2 je konstanta. SHR op1, op2 - shift-ovanje udesno (logičko) (op1 = op1 >> op2). op2 je konstanta. SAR op1, op2 - shift-ovanje udesno (aritmetičko) (op1 = op1 >> op2). op2 je konstanta. 3

1.3.4 Instrukcije poredenja CMP op1, op2 - uporedivanje (oduzimanje bez upisivanja rezultata) TEST op1, op2 - testiranje bitova (bitovska konjukcija bez upisivanja rezultata) 1.3.5 Instrukcije za rad sa stekom PUSH op - postavljanje na stek POP op - skidanje sa steka 1.3.6 Instrukcije kontrole toka JMP op - bezuslovni skok na adresu op (memorijski operand) CALL op - bezuslovni skok uz pamćenje povratne adrese na steku. RET - skida sa steka adresu i skače na tu adresu. JZ op - skače ako je rezultat prethodne instrukcije nula. JE op - skače ako je rezultat prethodnog poredenja jednakost (ekvivalentno sa JZ) JNZ op - skače ako je rezultat prethodne operacije različit od nule JNE op - skače ako je rezultat prethodnog poredenja različitost (ekvivalentno sa JNZ) JA op - skače ako je rezultat prethodnog poredenja veće (neoznačeni brojevi) JB op - skače ako je rezultat prethodnog poredenja manje (neoznačeni brojevi) JAE op - skače ako je rezultat prethodnog poredenja vece ili jednako (neoznačeni brojevi) JBE op - skače ako je rezultat prethodnog poredenja manje ili jednako (neoznačeni brojevi) JG op - skače ako je rezultat prethodnog poredenja veće (označeni brojevi) JL op - skače ako je rezultat prethodnog poredenja manje (označeni brojevi) JGE op - skače ako je rezultat prethodnog poredenja veće ili jednako (označeni brojevi) JLE op - skače ako je rezultat prethodnog poredenja manje ili jednako (označeni brojevi) Slično, postoje i negacije gornjih instrukcija uslovnog skoka: JNA, JNB, JNAE, JNBE, JNG, JNL, JNGE, JNLE. 1.4 Konvencije za pozivanje funkcija Instrukcija kojom se poziva funkcija je call naziv Celobrojni parametri funkcija, uključujući i adrese, prenose se, redom, preko registara rdi, rsi, rdx, rcx, r8, r9. Ukoliko ima više od šest parametara, ostali se smeštaju na stek u obrnutom redosledu - s desna na levo. Povratna vrednost funkcije se nalazi u rax registru. Prilikom poziva funkcije, moguće je da će ona izmeniti neke registre. Registri koji pripadaju pozivajućoj funkciji su rbx, rbp, r12-15. Sadržaj ovih registara se mora sačuvati ukoliko se menja u funkciji. Ostali registri se mogu menjati bez čuvanja. Registri koji pripadaju pozvanoj funkciji su rax, rdi, rsi, rdx, rcx, r8-r11. Na sadržaje ovih registara ne može računati pozivajuća funkcija. Ukoliko je korišćen stek prilikom poziva funkcije, neophodno je da vrh steka bude poravnat sa adresom deljivom sa 16. Na početku svake funkcije se nalazi prolog u kome je potrebno izvršiti sledeće instrukcije push rbp mov rbp, rsp sub rsp, N 4

Alternativa je ENTER N, 0 gde N označava broj bajtova koji odvajamo za lokalne promenljive. Na kraju svake funkcije se nalazi epilog u kome se izvršavaju instrukcije mov rsp, rbp pop rbp LEAVE RET Alternativa je Povratak iz funkcije se izvršava instrukcijom Ova instrukcija skida povratnu adresu sa steka i prelazi na izvršavanje instrukcije sa te adrese. 1.5 Prevodenje Izvorni kod sa asemblerskim funkcijama 1.s se prevodi na sledeći način: gcc 1.s Moguće je prevoditi kod iz više izvornih datoteka navodeći ih u jednoj komandi: gcc 1.c 1.s 1.6 Zadaci Za svaku od sledećih funkcije potrebno je napisati program u C-u koji poziva datu funkciju. 1 Napisati program u asembleru koji ispisuje pozdravnu poruku na izlaz. 2 Napisati funkciju int suma(int, int) koja sabira dva cela broja. 3 Napisati funkciju int razlika(int, int) koja oduzima dva cela broja. 4 Napisati funkciju unsigned negacija(unsigned) koja računa bitovku negaciju. 5 Napisati funkciju int izraz(int, int, int) koja izračunava izraz (4a b + 1)/2 + c/4, za prosledene a, b, i c kao argumente. 6 Napisati funkciju int aritmetika(int, int) koja za prosledena dva operanda računa sledeće: zbir, razliku, proizvod, količnik, suprotnu vrednost, bitovsku konjunkciju, bitovsku disjunkciju, bitovsku negaciju, prvi broj šiftovan u levo za vrednost drugog operanda, prvi broj šiftovan aritmetički u desno za vrednost drugog operanda. 7 Napisati funkciju int max(int, int) koja vraca maksimum argumenata. 8 Napisati funkciju int min(int, int) koja računa minimum dva broja. 9 Napisati funkciju int deljiv_4(int) koja vraca 1 ako je argument deljiv sa 4 a 0 ako nije. 10 Napisati funkciju unsigned prestupna(unsigned) koja proverava da li je godina data argumentom prestupna (ako je deljiva sa 4; izuzetak tome su godine deljive sa 100; izuzetak tom izuzetku su godine deljive sa 400). 11 Napisati funkciju unsigned suma(unsigned n) koja racuna sumu prvih n prirodnih brojeva, pocev od 1. 5

12 Napisati funkciju unsigned suma_cifara(unsigned) koja racuna sumu dekadnih cifara argumenta. 13 Napisati funkciju unsigned broj_jedinica(unsigned) koja vraca broj jedinica u binarnom zapisu argumenta. 14 Napisati funkciju int deljiv_16(int) koja vraca 1 ako je argument deljiv sa 16 a 0 ako nije. 15 Napisati funkciju unsigned min(unsigned, unsigned, unsigned) koja racuna minimum argumenata. 16 Napisati funkciju unsigned najveca_cifra(unsigned) koja racuna najvecu dekadnu cifru argumenta. 17 Napisati funkciju unsigned faktorijel(unsigned) koja vraca faktorijel argumenta. 18 Napisati funkciju unsigned nzd(unsigned, unsigned) koja racuna NZD svojih argumenata Euklidovim algoritmom (nzd(a, 0) = a; nzd(a, b) = nzd(b, a%b)). 19 Napisati funkciju unsigned ojler(unsigned) koja implementira Ojlerovu funkciju (f(n) jednaka je broju brojeva k koji su manji od n i uzajamno prosti od n). Koristiti prethodnu funkciju za računanje nzd. 20 Napisati funkciju unisigned prost(unsigned) koja vraca 1 ukoliko je broj prost, a inace vraca 0. 21 Napisati funkciju void zameni(int*, int*) koja zamenjuje vrednosti svojim argumentima. 22 Napisati funkciju void kolicnik(unsigned, unsigned, unsigned*, unsigned*) koja računa količnik i ostatak dva broja. Ove dve vrednosti treba proslediti preko pokazivača. 23 Napisati funkciju void bitovska_aritmetika(unsigned, unsigned, unsigned*, unsigned*, unsigned*, unsigned*) koja za prva dva prosledjena argumenta izracunava bitovsku konjunkciju, bitovsku disjunkciju, bitovsku ekskluzivnu disjunkciju i negaciju prvog argumenta. Ove cetiri vrednosti treba proslediti preko pokazivaca. 24 Napisati funkciju int suma_niza(int*, int) koja računa sumu elemenata niza. 25 Napisati funkciju int najveci(int*, int) koja računa najveći element u nizu. 26 Napisati funkciju void obrni(int*, int) koja vrši obrtanje niza. 27 Napisati funkciju void fibonaci(int, int*) koja prvih n Fibonačijevih brojeva smešta u niz. 28 Napisati funkciju void izdvoji_proste(int*, int, int*) koja iz niza brojeva izdvaja samo proste brojeve i smešta ih u drugi niz. 29 Napisati funkciju int zbir_apsolutnih(int*, int) koja računa zbir apsolutnih vrednosti brojeva u nizu. 30 Napisati funkciju int suma_razlika(int*, int) koja računa sumu razlika a[1] a[0] + a[2] a[1] +... + a[n 1] a[n 2] za dati niz a. 31 Napisati funkciju int najveci_3(int*, int) koja pronalazi najveći broj u nizu koji je deljiv sa 3. 32 Napisati funkciju int deljiv(int, int) koji za prosledena dva pozitivna broja vraća vrednost 1 ukoliko je prvi broj deljiv drugim brojem, u suprotnom vraća vrednost 0. Napisati zatim funkciju void izdvoji_deljive(int*, int, int*, int*) koja iz datog niza izdvaja u drugi niz brojeve koji su deljivi sa sedam koristeći prethodnu funkciju. 33 Napisati funkciju int savrsen_stepen(unsigned n, unsigned* m, unsigned* k) koja vraća 1 ako postoje m, k >= 2 takvi da m k = n a 0 inaće. Ukoliko postoje traženi m i k, vratiti ih preko pokazivača m i k. 34 Napisati funkciju void izbaci_neparne(long* niz, unsigned* duzina) koja izbacuje neparne elemente iz niza koji je dat prvim argumentom i čija je dužina u drugom argumentu. 6

35 Napisati funkciju int savrsen(int) koja ispituje da li je broj x savršen. Broj je savršen ako je jednak zbiru svojih pravih delilaca, npr. 6 je takav). 36 Napisati funkciju void faktorizacija(int, int*, int*) koja radi faktorizaciju broja: za dati broj x u niz A upisati njegove proste faktore, a u niz B odgovarajuće višestrukosti. Npr. 120 = 2 3 3 5, pa u niz A treba upisati 2, 3, 5, a u niz B redom 3, 1, 1 (višestrukosti faktora 2, 3, 5 respektivno). 37 Napisati program int clan_niza(int) koji izračunava n-ti član niza koji je dat rekurentnom formulom A0 = 1, An = 4 An 1 + 3, n >= 1. 38 Napisati funkciju int vrednost(int) koji za ceo broj x izračunava vrednost f(x) = min{24, x2}. Napisati zatim funkciju void smesti(int*, int, int*, int*) koji od niza X dužine n formira novi niz Y koji se sastoji od vrednosti funkcije f(x) primenjene na sve članove niza X čija je vrednost parna. Neka je niz X = 2, 3, 6, 1, 7, 8, 4, 0. Posle pokretanja programa niz Y treba da ima članove Y = 4, 24, 24, 16, 0. 39 Napisati funkciju int sadrzi(int*, int, int) koji za dati niz A različitih elemenata i broj c, proverava da li niz A sadrži član koji ima vrednost c. Ukoliko ne sadrži, funkcija vraća negativnu vrednosti, dok u suprotnom vraća poziciju tog člana. Adresa niza A, duzina niza i broj c su dati kao argumenti funkcija. Napisati zatim funkciju void napravi_niz(int*, int*, int, int*, int) koji na osnovu dva niza A i B, menja niz C na sledeći način: za svaki element C[i] niza C, ukoliko postoji element A[j] niza A takav da je A[j] = C[i], element C[i] se zamenjuje sa B[j]. U suprotnom, C[i] ostaje nepromenjen. Pretpostaviti da su svi elementi niza A različiti, da su nizovi A i B jednakih dužina. UPUTSVO: koristiti funkciju iz prvog dela zadatka za proveru da li se element C[i] nalazi u nizu A. Primer, ako su nizovi A : 42, 35, 90, 21; B : 84, 7, 30, 22; i C : 32, 35, 42, 9, 12, 0, po završetku programa niz C treba da izgleda ovako 32, 7, 84, 9, 12, 0. 40 Napisati funkciju int s_niz(int, int, int) koji računa niz S n po sledećoj rekurentnoj formuli: S 1 = a, S 2 = bis n = 32S n 1 S n 2 (a i b su celobrojni parametri i predstavljaju ulazne promenljive). 41 Napisati funkciju unsigned long vrednost(unsigned long) koji za nenegativni celobrojni parametar n izračunava vrednost 2 0 0 1 + 2 1 1 2 + 2 2 2 3 +... + 2 n 1 (n 1) n + 2 n n (n + 1). 42 Napisati funkciju int izracunaj(int, int, int) koja za tri pozitivna celobrojna argumenta x, y i k izračunava proizvod 2k(x 1)(y 1). Napisati zatim funkciju void napravi(int*, int*, int, int*) koja od dva niza X i Y prirodnih brojeva dužine n formira niz Z, tako da je Z i = 2k(X i 1)(Y i 1), pri čemu je k = 1 ako je X i + Y i neparan broj, a inače je k = 0. 43 Napisati funkciju int izracunaj2(int, int, int) za cele brojeve n, a i b izračunava ( 2)n (31a b 4). 44 Napisati funkciju int hipotenuza(int, int) koji za date vrednosti kateta x i y izračunava ceo deo hipotenuze z. Formula za izračunavanje hipotenuze z kada su zadate katete x i y glasi z = sqrt(x 2 + y 2 ). Za računanje celog dela od z treba iskoristiti činjenicu da je to najveći broj čiji kvadrat nije veći od z 2. 7