You are on page 1of 10

Prvi domai zadatak iz Struktura podataka

Rok za predaju domaeg zadatka: ponedjeljak, 26.mart 2008. godine do 12 sati.


Svaki zadatak treba da je u posebnoj datoteci (Zadatak1.pas, Zadatak2.pas, Zadatak3.pas,
Zadatak4.pas, Zadatak5.pas, Zadatak6.pas, Zadatak7.pas). Na poetku svake datoteke, kao
komentar, napisati ime i prezime i broj indeksa. Sve datoteke sa ekstenzijom .pas (i samo njih,
nije potrebno slati .exe i .bak datoteke) upakovati u arhivu primjenom programa WinRAR (ne
koristite ZIP jer mail server moe odbiti vau poruku). Npr. ako je vae ime Marko Markovi,
arhiva treba da bude Marko_Markovic_Domaci1.rar. Ovu arhivu poslati na mail
uvod@rc.pmf.ac.ac.yu.
Svako prepisivanje kanjava se oduzimanjem bodova svim studentima koji su umijeani.
Disciplinska komisija odluie od kaznama .

Zadatak 1
Ivana posmatra teniske meeve na turniru u Tivtu. Za vrijeme zagrijavanja
igraa na ekranu su se pojavile njihove statistike. Ivani je zapela za oko
istorija meeva dvaju igraa. Primijetila je da neto nije u redu sa
prethodnim rezultatima, tj. da neki od njih nisu ispravni. Dosjetila se da trai
od vas da joj napiete program koji provjerava rezultate.
Teniski me sastoji se od setova, a svaki set od gemova. Vae sljedea
pravila:
Igra dobija set ako ima 6 ili vie gemova, i barem dva gema vie od
protivnika.
Posebno, u prvom ili drugom setu (ali ne i u treem), ako je rezultat
6:6, igra se jo jedan zadnji gem u kojem se odluuje pobjednik tog
seta (tzv. tie-break).
Me zavrava kad jedan od igraa osvoji dva seta. Taj igra je
pobjednik.
Rezultat je ispravan ako je mogu me koji se odvija prema gornjim
pravilima, a zavrava tim rezultatom.Dodatno, ako je jedan od igraa Roe
Federer (u ulazu "federer"), onda rezultat u kojem je on izgubio neki set ne
moe biti ispravan (jer opte je poznato da je Federer vanzemaljac i da nikad
ne gubi meeve).
Napiite program koji e pomoi Ivani da provjeri ispravnost rezultata
svakog mea.

Ulazni podaci

U prvom redu nalaze se imena dvaju igraa odvojena jednim razmakom. Oba
imena su nizovi od po najvie 20 malih slova engleske abecede. Imena e biti
razliita.
U drugom redu nalazi se prirodan broj N (1 N 50), broj dosadanjih
susreta dvaju igraa.
Svaki od sljedeih N redova sadri rezultat po jednog mea, koji se sastoji od
rezultata pojedinih setova odvojenih po jednim razmakom. Broj setova u
svakom meu je izmeu 1 i 5.
Rezultati setova su u obliku "A:B", gdje su A i B brojevi gemova koje je
osvojio svaki od igraa. Ti brojevi su cijeli, izmeu 0 i 99 (ukljuivo).

Izlazni podaci

Za svaki od meeva u ulazu, istim redom kojim su u ulazu, ispiite u jedan


red "da" ako je rezultat ispravan ili "ne" ako nije ispravan.

Primjeri test podataka


ulaz
sampras
agassi
6

izlaz

da

ulaz
federerroddick
1
2:64:6

izlaz

ne

6:26:4
3:67:52:6
6:57:4
7:67:6
6:23:6
6:21:66:8

da
ne
da
ne
da

Zadatak 2
Aleksa i Nikola postavljaju tenkie na drvenu plou podijeljenu na N * N
kvadratia. Tenk se moe u jednom potezu pomaknuti na jedno od etiri
susjednih polja i taj pomak nazivamo korakom. Kaemo da tenk uva red i
kolonu u kojem se nalazi. Ni u kojem trenutku na istom polju ne smiju biti
dva ili vie tenka.
Nakon vie sati igranja, Nikolina mama ih je pozvala na ruak, a oni su
odluili postaviti tenkove tako svaki tenk uva jednu kolonu i jedan red,
odnosno da se u svakom redu i svakoj koloni nalazi tano jedan tenk. To
moraju uraditi u minimalnom broju koraka.
Napiite program koji e pronai minimalni broj koraka potreban za
postavljanje tenkova, svaki u svoj red i kolonu, te niz koraka koji je potrebno
uiniti.

Ulazni podaci
U prvom redu nalazi se prirodan broj N (5 N 500).
U sljedeih N redova nalaze se po dva broja R i S (1 R, S N) koji
oznaavaju red i kolonu u kojem se pojedini tenk nalazi u trenutku kad je
Nikolina mama zvala na ruak. Nijedna dva tenka ne nalaze se na istom
polju.
Redovi su numerisani odozgo prema dolje, a kolone slijeva na desno. Tenkovi
su numerisani od 1 do N redom kojim su navedeni u ulazu.

Izlazni podaci

U prvi red upiite broj K minimalni broj koraka.


U sljedeih K redova upiite broj B i karakter C, odvojene razmakom. Broj B
oznaava redni broj tenkia koji elite pomaknuti, a karakter C oznaava
smjer i to 'L' lijevo, 'R' desno, 'U' gore, 'D' dolje.
Napomena: Rjeenje ne mora biti jedinstveno.

Primjeri test podataka


ulaz
5
1 1
1 2
1 3
1 4
1 5
izlaz
10
1 D
2 D
3 D
4 D
1 D

ulaz
5
2 3
3 2
3 3
3 4
4 3
izlaz
8
1 R
1 R
2 U
2 U
4 D

ulaz
6
1 1
1 2
2 1
5 6
6 5
6 6
izlaz
8
2 R
2 D
3 D
3 R

2
3
1
2
1

D
D
D
D
D

4 D
5 L
5 L

4
4
5
5

U
L
L
U

Zadatak 3
Matija gleda na teletekstu rezultate fudbalskih utakmica i tabelu lige. U
tabeli se za svaku ekipu nalazi pet podataka: ukupan broj odigranih
utakmica, broj pobjeda, broj nerijeenih utakmica, broj poraza i broj bodova.
Ekipa za svaku pobjedu dobija 3 boda, a za svaki nerijeen rezultat 1 bod.
Matija je primijetio da se vrijednosti nekih polja u tablici mogu odrediti iz
drugih.
Napiite program koji dopunjava tabelu u kojoj su vrijednosti nekih polja
nepoznate.
Podaci razliitih ekipa nisu povezani, npr. mogue je da u tablici pie da su
sve ekipe pobijedile u svim utakmicama (iako to u stvarnoj ligi nije mogue).
Za svaku ekipu je broj odigranih utakmica najvie 100.

Ulazni podaci
U prvom redu nalazi se prirodan broj N (1 N 1000), broj ekipa u ligi.
Svaki od sljedeih N redova sadri po pet polja tabele za jednu ekipu
odvojenih po jednim razmakom, redom pet podataka kao to je opisano u
tekstu zadatka. Polje tabele sadrava cijeli broj (najmanje 0) ako je
vrijednost polja poznata ili znak '?' (upitnik) ako je vrijednost nepoznata.
Ulazni podaci nee biti kontradiktorni i uvijek e biti mogue jednoznano
odrediti vrijednosti nepoznatih polja.

Izlazni podaci
Potrebno je tampati tabelu sa upisanim vrijednostima polja gdje nedostaju
u ulazu.

Primjeri test podataka


ulaz
5
27213366
271863?
?155750
?1475?
?14?847

izlaz
27213366
27186360
27155750
26147549
27145847

Zadatak 4
Dat su sljedei tipovi
TYPE Datum = record
dan. mjesec, godina: integer
end;
Radnik = record
ime: string[30];
godine_staza:integer;
plata:real;
zaposlen:datum;
end;
NizRadnika = array[1..80] of Radnik;
1. Napisati funkciju DobarDatum koja ima jedan argument tipa Datum i
koja vraa TRUE ako je argument funkcije ispravan datum i FALSE
ako nije ispravan. Obratiti panju na prestupne godine (one koje su
djeljive sa 4 a nisu sa 100, a jesu sa 400. Npr. 2000, 1996 i 1892 su
prestupne a 1900, 1800 i 2007 nisu prestupne).
2. Napisati funkciju IskusniRadnici koja ima tri argumenta:
n broj radnika (prirodan broj)
rad - niz radnika od n elemenata
gran - realan broj
i koja tampa imena svih radnika iz niza rad koji imaju vie od gran
godina slube. Funkcija vraa broja takvih radnika.
Napisati program koji testira napisane funkcije.

Zadatak 5
Dat su sljedei tipovi
TYPE Tacka = record
x,y:real;
End;
Krug = record
Centar : tacka;
R : real; {r poluprecnik}
end;
NizKrugova = array[1..80] of Krug;
Scena = record
broj_elemenata:integer; {Manje od 80}
krugovi:NizKrugova;
end;
1.
2.

3.

4.

5.

6.

Napisati funkciju Presjek koja ima dva argumenta


k1 i k2 tipa Krug i koja vraa TRUE ako krugovi k1 i k2 imaju
zajednikih taaka i nulu, ako krugovi nemaju presjeka.
Napisati proceduru UcitajDat(imedat:string; var
sc:scena) koja iz tekstualne datoteke ije je ime dato argumentom
imedat uitava podatke o krugovima u argument sc. U svakom redu
tekstualne datoteke upisana su po tri realna broja razdvojena jednom
bjelinom, gdje su prva dva broja koordinate centra a trei broj je
duina poluprenika. Smatrati da nema vie od 80 redova u datoteci.
Napisati proceduru UcitajDatBin(imedat:string;
var sc:scena) koja iz binarne datoteke ije je ime dato argumentom
imedat uitava podatke o krugovima u argument sc. Datoteka je tipa
FILE of KRUG;
Napisati
proceduru
PromjenaDatBin(imedat:string; pos:integer; x:krug) koja mijenja
element na poziciji pos u binarnoj datoteci imedat elementom x. Ako je
pozicija van datoteke, procedura ne treba da radi nita.
Napisati funkciju BigCircle koja ima jedan
argument tipa Scena i koja vraa indeks onog kruga iz Scene (ako
takav krug postoji) koji ima povrinu veu od sume povrina svih
ostalih krugova u Sceni i 0 ako takava krug ne postoji.
Napisati funkciju BoundingCircle koja ima jedna
argument tipa Scena i koja tampa koordinate centra i poluprenik
onog kruga koji u sebi sadri sve ostale krugove iz date scene, ako
takav krug postoji. Funkcija vraa TRUE ako takav krug postoji i
FALSE ako ne postoji.
Napisati program koji testira napisane funkcije.

Zadatak 6
Napisati program koji uitava prirodan broj n i zatim n slova engleske
abecede i tampa sve mogue rijei sastavljene od uitanih slova u obrnutom
alfabetskom poretku. Napisati funkciju IstaSlova koja provjerava da li meu
uitanim slovima ima istih i vraa broj razliitih uitanih slova. Ako ima istih
slova, upozoriti korisnika da sva slova moraju biti razliita i uitavati slova
sve dok sva ne budu razliita. Npr., za ulaz n=3 i slova a m p treba
tampati:
pma
pam
mpa
map
apm
amp

Zadatak 7
Napisati procedure Zmija1, Zmija2 i Zmija3 koje imaju po tri argumenta:
prirodne brojeve m i n koji predstavljaju dimenzije matrice cijelih brojeva i
cio broj k i koja tampa zmijaste matrice koje poinju brojem k (vidi sliku) .
Zmija1, m=5,n=4,k=8

Zmija2, m=5,n=4,k=8

Zmija3, m=5,n=4,k=8

9
14
17

10
13
18

11

12
19

10
11

9
12
16

13
15
20

14

21
22

21
20

9
22
27

10 11

23 12
24 13

23
24

22
25

21
26

20
27

17
18

19
24

23
25

26
27

19
18

26
17

25
16

15
16

14
15

You might also like