You are on page 1of 22

DANI MLADIH INFORMATI^ARA HRVATSKE 1992.

ZADACI
1. Napi{i program koji }e ispisati sve neparne troznamenkaste brojeve kojima
je zbroj znamenaka djeljiv brojem 13.
2. Napi{i program koji }e u~itati ime i prezime, zatim to ispisati vodoravno
i okomito, ali tako da se sva mala slova zamijene velikima.
3. Napi{i program koji }e u~itati broj natjecatelja zatim njihova imena i
postignuti broj bodova na natjecanju za svaki od dva zadatka. Ispisati
koliki je najve}i broj postignutih bodova, a zatim imena svih natjecatelja
koji su postigli najve}i broj bodova.
RJE[ENJA:
1. 1 REM troznamenkasti prosti brojevi kojima
2 REM je zbroj znamenaka djeljiv sa 13
5 CLS
10 FOR N = 101 TO 999 STEP 2
20 K = 0:S = 0
25 REM izra~unaj zbroj znamenaka broja N
30 Z = K MOD 10: REM Z = K - INT(K/10)*10
40 K = K/10: REM K = INT(K/10)
50 S = S + Z: REM zbroj znamenaka
60 IF K > 0 THEN GOTO 30
70 IF S/13 = INT (S/13) THEN PRINT N
80 NEXT N
2. 1 REM pretvori sva mala slova u velika i
2 REM ispisati ime i prezime vodoravno i okomito
5 CLS
10 INPUT "IME I PREZIME"; A$
20 P = ASC("a") - ASC("A"): REM pomak
25 B$ = ""
30 FOR K = 1 TO LEN(A$)
40 Z$ = MID$(A$, K, 1): REM znak
50 C = ASC(Z$): REM kod znaka
60 IF C = 96 AND C = 126 THEN Z$ = CHR$(C-P)
70 B$ = B$ + Z$
80 NEXT K
85 CLS
90 PRINT B$
100 FOR K = 1 TO LEN(B$)
110 PRINT MID$(B$, K, 1)
120 NEXT K
3. 1 REM ispisati najve~i ukupni broj bodova iz dva zadatka
2 REM i ispisati natjecatelje a najvecim brojem bodova
5 CLS
10 INPUT "BROJ NATJECATELJA"; N
12 DIM IME$(N), PRE$(N), Z1(N), Z2(N)
15 MAX = 0
20 FOR K = 1 TO N
25 PRINT K; ". natjecatelj"
30 INPUT "MOLIM IME
:"; IME$(K)
31 INPUT "MOLIM PREZIME :"; PRE$(K)
32 INPUT "PRVI ZADATAK :"; Z1(K)
34 INPUT "DRUGI ZADATAK :"; Z2(K)
40 IF Z1(K) + Z2(K)>MAX THEN MAX = Z1(K) + Z2(K)
50 NEXT K

60 PRINT "NAJVECI BROJ BODOVA"; MAX


65 PRINT "ime", "prezime", "1. zad", "2.zad"
70 FOR K = 1 TO N
80 IF Z1(K) + Z2(K) = MAX THEN PRINT IME$(K), PRE$(K), Z1(K), Z2(K)
90 NEXT K

DANI MLADIH INFORMATI^ARA HRVATSKE 1993.


ZADACI
1. Napi{i program koji u~ita pozitivan cijeli broj i ispi{e brojeve koji
nisu prosti izme|u 1 i N.
2. Napi{i program koji u~ita dva kuta zadana u stupnjevima, minutama i
sekundama manja od 90 stupnjeva i ispi{e njihov zbroj.
3. Napi{i program koji u~ita re~enicu od najvi{e 80 znakova. Izme|u svake
dvije rije~i je to~no jedno prazno mjesto, re~enica ne sadr`i drugih
znakova osim slova i praznina. Ispi{i re~enicu s obrnutim poretkom
rije~i u njoj.
4. Fibonaccijev niz je 0,1,1,2,3,5,8,13... Svaki broj toga niza po~ev{i od
tre}eg ~lana je zbroj prethodna dva. Npr. 1=0+1, 2=1+1, 3=1+2, 5=2+3...
Napi{i program koji izra~unava zbroj prvih N ~lanova toga niza.
RJE[ENJA:
1. 10 CLS: INPUT "UNESITE BROJ "; N$:PRINT
20 N& = VAL(N$)
40 FOR I& = 4 TO N&
50 FOR J& = 2 TO CLNG(SQR(I&))
60 IF I& MOD J& = 0 THEN 90
70 NEXT J&
80 GOTO 100
90 PRINT I&
100 NEXT I&
2. 5 CLS
10 PRINT "UNESI PRVI KUT"
11 INPUT "STUPNJEVI ", D1$
12 INPUT "MINUTE ", M1$
13 INPUT "SEKUNDE ", S1$
20 PRINT
21 PRINT "UNESI DRUGI KUT"
22 INPUT "STUPNJEVI ", D2$
23 INPUT "MINUTE ", M2$
24 INPUT "SEKUNDE ", S2$
30 D1& = VAL(D1$): M1& = VAL(M1$): S1& = VAL(S1$)
40 D2& = VAL(D2$): M2& = VAL(M2$): S2& = VAL(S2$)
50 S& = S1& + S2&: T& = S&/60: S& = S& MOD 60
60 M& = M1& + M2& + T&: T& = M&/60: M& = M& MOD 60
80 D& = D1& + D2& + T&: PRINT
90 PRINT USING "&###&##&##"; "Zbroj kuteva je "; D&; " stupnjeva "; M&; " minuta "; S&; " sekundi"
3. 10 CLS:PRINT "Unesite recenicu"
11 INPUT R$: PRINT
20 R$ = "" + R$: L% = 0
30 FOR I% = LEN(R$) TO 1 STEP -1
40 L% = L% + 1
50 IF MID$(R$, I%, 1) = "" THEN PRINT MID$(R$, I% + 1, l% - 1) + " ";: L% = 0

60 NEXT I%
4. 10 CLS
20 INPUT "Unesite broj ~lanova niza ", N$: PRINT
30 N& = VAL(N$): IF N& <= 2 THEN PRINT N& - 1
40 I& = 3: A& = 0: B& = 1: S& = 1
50 T& = B&: B& = A& + B&: A& = T&: S& = S& + B&
55 REM PRINT I&, B&, S&
60 I& = I& + 1: IF I& <= N& THEN 50
70 PRINT "Zbroj prvih "; N&; " ~lanova je "; S&

DANI MLADIH INFORMATI^ARA 1994.


1. ZADATAK
Napi{i program koji na sredini ekrana ispisuje slovo, te ga u zavisnosti
od pritisnute tipke mi~e po ekranu:
- slovo S jedan red gore
- slovo J jedan red dolje
- slovo I jedan stupac desno
- slovo Z jedan stupac lijevo
u okviru mogu}nosti ekrana.
Izvo|enje programa prekida pritisak na slovo K.
2. ZADATAK
Napi{i program koji }e u~itati ime, prezime i prosje~nu ocjenu za N u~enika.
Treba ispisati:
a - sve podatke za sve u~enike abecednim redosljedom
(podaci za jednog u~enika u jedan red)
b - ime i prezime u~enika s najvi{im prosjekom
c - ime i prezime u~enika s najni`im prosjekom
d - broj odli~nih u~enika
e - broj vrlo dobrih u~enika
f - broj dobrih u~enika
g - broj dovoljnih u~enika
h - broj nedovoljnih u~enika
3. ZADATAK
Napi{i program koji }e za u~itane koordinate lijevog gornjeg ugla nacrtati
najve}u mogu}u {ahovsku plo~u. [ahovska plo~a je ~etverokut podijeljen na
osam redova i osam stupaca u kojem su polja naizmjeni~no bijela i crna.
4. ZADATAK
Napi{i program koji }e u~itati:
a - niz znakova (string)
b - najve}i mogu}i broj znakova u jednom redu.
U~itani niz znakova treba ispisati tako da:
a - broj znakova u jednom redu ne prelazi zadani najve}i mogu}i
broj znakova za svaki red
b - tekst ima poravnati desni rub (marginu); praznine koje ostaju
na kraju reda zbog premje{tanja zadnje rije~i u novi red treba
{to pravilnije rasporediti unutar tog reda
c - prvi red bude uvu~en za proizvoljni broj znakova (mjesta).

RJE[ENJA *************************************************************
1. zadatak
CLS
x = 40: y = 12
xs = 40: Ys = 12
DO
LOCATE Y,X: PRINT "B"
A$ = INKEY$
IF UCASE$(A$) = "S" THEN
Y = Y - 1: IF Y < 1 THEN Y = 23
GOSUB brisi
END IF
IF UCASE$(A$) = "J" THEN
Y = Y + 1: IF Y > 23 THEN Y = 1
GOSUB brisi
END IF
IF UCASE$(A$) = "I" THEN
X = X + 1: IF X > 80 THEN X = 1
GOSUB brisi
END IF
IF UCASE$(A$) = "S" THEN
X = X - 1: IF X < 1 THEN X = 80
GOSUB brisi
END IF
XS = X
YS = Y
LOOP UNTIL UCASE(A$) = "K"
END
brisi:
LOCATE YS, XS: PRINT " "
RETURN
2. zadatak
CLS
INPUT "Unesi broj ucenika: ", n
DIM IME$(n), ocj(n)
FOR X = 1 TO n
PRINT "Unesi prezime i ime za "; X; ". ucenika: ";
INPUT IME$(X)
DO
PRINT "Unesi prosjecnu ocjenu za "; IME$(X); ": ";
INPUT OCJ(X)
LOOP UNTIL OCJ(X) > 0 AND OCJ(X) <= 5
NEXT X
FOR Y = 1 TO n - 1
FOR X = Y + 1 TO n
IF IME$(Y) > IME$(X) THEN SWAP IME$(X), IME$(Y):SWAP OCJE(X), OCJ(Y)
NEXT X
NEXT Y
MIN = OCJ(1): MAXO = 1
MAX = OCJ(1): MINO = 1
PRINT "Abecedni redoslijed ucenika:"
B5 = 0:B4 = 0:B3 = 0:B2 = 0:B1 = 0

FOR X = 1 TO n
PRINT IME$(X), OCJ(X)
IF OCJ(X) < 2 THEN B1 = B1 + 1
IF OCJ(X) >= 2 AND OCJ(X) < 2.5 THEN B2 = B2 + 1
IF OCJ(X) >= 2.5 AND OCJ(X) < 3.5 THEN B3 = B3 + 1
IF OCJ(X) >= 3.5 AND OCJ(X) < 4.5 THEN B4 = B4 + 1
IF OCJ(X) >= 4.5 THEN B5 = B5 + 1
IF OCJ(X) > MAX THEN MAX = OCJ(X): MAXO = X
IF OCJ(X9 < MIN THEN MIN = OCJ(X): MINO = X
NEXT X
PRINT "U~enik sa najvecim prosjekom je "; IME$(maxo); " koji iznosi:"; max
PRINT "U~enik sa najmanjim prosjekom je "; IME$(mino); " koji iznosi:"; min
PRINT "Broj ucenika s nedovoljnim uspjehom: "; b1
PRINT "Broj ucenika s dovoljnim uspjehom: "; b2
PRINT "Broj ucenika s dobrim uspjehom:
"; b3
PRINT "Broj ucenika s vrlo dobrim uspjehom: "; b4
PRINT "Broj ucenika s odlicnim uspjehom: "; b5
3. zadatak
SCREEN 12
DO
INPUT "Unesi x koordinatu lijevog gornjeg ugla ploce:", x
LOOP UNTIL x >= 0 AND x <= 631
DO
INPUT "Unesi y koordinatu lijevog gornjeg ugla ploce:", y
LOOP UNTIL y >= 0 AND <= 455
CLS
sx = (639 - x) / 8
sy = (463 - y) / 8
a=0
COLOR 1
FOR yy = y TO 463 - sy STEP sy
FOR xx = x TO 639 - sx STEP sx
a=a+1
COLOR a MOD 2
LINE (xx, yy) - (xx + sx, yy + sy), , BF
NEXT xx
a=a+1
NEXT yy
LINE (x, y) - (639, 463), , B
4. zadatak
CLS
INPUT "Unesi recenicu: "; rec$
INPUT "Unesi maksimalan broj slova u jednom retku: ";max
prez$ = "
rec$ = " "+ rec$
PRINT
DO
operacija = 0
rad$ = MID$(rec$, 1, max)
zad$ = RIGHT$(rad$, 1)
IF LEN(rec$) <= amx AND operacija = 0 THEN
ispi$ = MID$(praz$, 1, max - LEN(rec$)) + rad$
rec$ = ""
operacija = 1
END IF

IF zad$ <> " " AND MID$(rec$, max + 1, 1) = " " and operacija = 0 THEN
isp$ = LEFT$(rad$, max)
rec$ = RIGHT$(rec$, LEN(rec$) - max)
operacija = 1
END IF
IF zad$ = " " AND operacija = 0 THEN
isp$ = LEFT$(rad$, max - 1)
rec$ = RIGHT$(rec$, LEN(rec$) - max)
stavio = 0: x = 1
DO
IF MID$(ispi$, x, 1) = " " THEN
isp$ = LEFT$(isp$, x - 1) + " " + RIGHT$(isp$, LEN(isp$) - x
stavio = 1
END IF
x=x+1
LOOP UNTIL x > max - 1 OR stavio = 1
IF stavio = 0 THEN isp$ = " " + isp$
operacija = 1
END IF
IF zad$ <> " " AND MID$(rec$, max + 1, 1) <> " " AND operacija = 0 THEN
nasao = 0: x = max
DO
IF MID$(rad$, x, 1) = " " THEN nasao = x
x=x-1
LOOP UNTIL x < 1 OR nasao <> 0
dodaj = max - nasao + 1
isp$ = LEFT$(rad$, nasao - 1)
rec$ = RIGHT$(rec$, LEN(rec$) - nasao)
x = 1: br = 0
DO
IF MID$(isp$, x, 1) = " " THEN
isp$ = LEFT$(isp$, x - 1) + " " + RIGHT$(isp$, LEN(isp$) - x)
br = br + 1
q=0
FOR b = x TO LEN(isp$)
IF MID$(isp$, b, 1) <> " " AND q = 0 THEN x = b - 1:q = 1
NEXT b
END IF
x=x+1
IF x > LEN(isp$) AND br = 0 THEN
isp$ = LEFT$(praz$, dodaj) + isp$
br = dodaj
END IF
IF x > LEN(isp$) THEN x = 1
operacija = 1
LOOP UNTIL br = dodaj
END IF
PRINT isp$
LOOP UNTIL rec$ = ""

DR@AVNO NATJECANJE 1995.


1. ZADATAK

EVO ZA PO^ETAK JEDAN LAKI,LUCKY (^ITAJ:KOJI DONOSI SRE]U)ZADATAK.


TRA@ITE S TIPKOVNICE TRI BROJA PA IH ISPI[ITE NA EKRAN SLO@ENE PO VELI^INI,
TJ.OD NAJMANJEG DO NAJVE]EG.
PRIMJER 1.
ULAZ:
PRVI BROJ ? 5
DRUGI BROJ? 620
TRE]I BROJ? 700
IZLAZ:
5 620 700
PRIMJER 2.
ULAZ:
PRVI BROJ?50
DRUGI BROJ? 432.5
TRE]I BROJ? 16
IZLAZ:
16 50 432.5
PRIMJER 3.
ULAZ:
PRVI BROJ?8
DRUGI BROJ?2
TRE]I BROJ?2500
IZLAZ:
2 8 2500
RJE[ENJE 1. ZADATKA
INPUT "PRVI BROJ"; A1
INPUT "DRUGI BROJ"; A2
INPUT "TRE]I BROJ"; A3
IF A2 < A1 THEN SWAP A1, A2
IF A3 < A2 THEN SWAP A2, A3
IF A2 < A1 THEN SWAP A1, A2
PRINT A1; " "; A2; " "; A3

2. ZADATAK
SVI KOMPJUTERA[I,VELIKI I MALI,ZNAJU ZA ARJ I ZIP,TJ.KOMPRESIRANJE ZAPISA.
PROBAJTE I VI! ZA VAS JEDNO MALO KOMRESIRANJE.
TRA`ITE S TIPKOVNICE NIZ OD NAJVI[E 50 ZNAKOVA KOJI MOGU BITI SVA MALA
SLOVA OSIM ^,],[,`,\.SVAKI PODNIZ OD DVA ILI VI[E ISTIH ZNAKOVA ZAMJENITE
BROJEM PONAVLJANJA I ZNAKOM KOJI SE PONAVLJA (AAA-3A).TO U^INITE ZA SVE
ZNAKOVE U NIZU,PA NOVI NIZ ZNAKOVA ISPI[ITE NA EKRAN.
VO ZA PO^ETAK JEDAN
LAKI,LUCKY (^ITAJ:KOJI DONOSI SRE]U)ZADATAK.
PRIMJER 1.
ULAZ:
NIZ ZNAKOVA ? ABC
IZLAZ:

ABC
PRIMJER 2.
ULAZ:
NIZ ZNAKOVA ? AABC
IZLAZ:
2ABC
PRIMJER 3!
ULAZ:
NIZ ZNAKOVA?AABBBBCC
IZLAZ:
2 A4B2C
PRIMJER 4.
ULAZ:
NIZ ZNAKOVA?EFJJK
IZLAZ:
EF2JK
RJE[ENJE 2. ZADATKA
INPUT "UNESI STRING: "; A$
I=1
R$ = ""
WHILE I <= LEN(A$)
N=1
JOS:
IF MID$(A$, I, 1) = MID$(A$, I + 1, 1) THEN
N=N+1
I=I+1
GOTO JOS
END IF
IF N = 1 THEN
R$ = R$ + MID$(A$, I, 1)
ELSE
R$ = R$ + RIGHT$(STR$(N), LEN(STR$(N)) - 1)
R$ = R$ + MID$(A$, I, 1)
END IF
I=I+1
WEND
PRINT "RJE[ENJE: "; R$
3. ZADATAK
Kako izbje}i prometnu gu`vu i nepotrebno prije|ene kilometre u poku{aju
da taksijem do|ete do odredi{ta? Dobrim i efikasnim kompjuterskim programom
naravno. Kad taksi kre}e program ~ita plan grada sa svim potrebnim podacima
Plan grada prikazan je kao mapa s istim brojem redova i stupaca (N)
Znakovi na mapi grada mogu biti 1,T,P.
Gradom putuje taksist. Po~inje na poziciji sa znakom 1 i slijedi znakove P
Sa svake pozicije taksist se mora pomaknuti na poziciju sa znakom P na kojoj
jo{ nije bio i koja se nalazi jednu poziciju lijevo,desno,gore ili dolje u
odnosu na poziciju na kojoj se nalazi. Postoji samo jedna sljede}a to~ka puta.
Put zavr{ava kad vi{e ne postoju niti jedna pozicija na koju se taksist mo`e
pomaknuti.

Napisati program koji:


1)tra`i veli~inu grada (N manje ili jednako 10)
2)tra`i plan grada tako da to bude po jedan niz znakova (duljine N) za svaki red
3)ispisuje koordinate svih pozicija kojima taksist prolazi(uklju~uju}i po~etnu
i krajnju to~ku puta ) u obliku :RED,STUPAC
4)ispisuje iza svakih koordinata opis skretanja koje na toj poziciji nastupa
Program odre|uje smjer skretanja s gledi{ta voza~a taksija.
Opis sretanja je rije~ LIJEVO ili DESNO
Primjer 1.
Ulaz:
1.red ? TPT
2.red ? 1PT
3.red ? TTT
izlaz:
2,1
2,2 lijevo
1,2
Primjer 2.
Veli~ina grada ? 3
1.red ? TT1
2.red ? TTP
3.red ? TPP
Izlaz:
1,3
2,3
3,3 desno
3,2
Primjer 3.
Ulaz:
Veli~ina grada ? 6
1.red ? TPPPTT
2.red ? 1PTPPT
3.red ? TTTTPT
4.red ? TTTPPT
5.red ? TTTPTT
6.red ? TTTPPT
Izlaz:
2,1
2,2 lijevo
1,2 desno
1,3
1,4 desno
2,4 lijevo
2,5 desno
3,5
4,5 desno
4,4 lijevo
5,4
6,4 lijevo
6,5

RJE[ENJE 3. ZADATKA
INPUT "Veli~ina grada ?"; n
DIM g$(n + 2, n + 2)
DIM f$(3, 3)
FOR i = 1 TO n
PRINT i; ".red";
INPUT x$
g$(i, 0) = "T"
FOR i1 = 1 TO n
g$(i, i1) = MID$(x$, i1, 1)
IF g$(i, i1) = "1" THEN
r=i
s = i1
END IF
NEXT i1
g$(i, n + 1) = "T"
NEXT i
FOR i = 0 TO n + 1
g$(0, 1) = "T"
g$(n + 1, 1) = "T"
NEXT i
g=0
rs = r + 1
ss = 0
DO WHILE (rs <> r) OR (ss <> s)
rs = r
ss = s
IF g$(r + 1, s) = "P" THEN
rs = r + 1
ELSEIF g$(r - 1, s) = "P" THEN
rs = r + 1
ELSEIF g$(r, s + 1) = "P" THEN
ss = s + 1
ELSEIF g$(r, s - 1) = "P" THEN
ss = s - 1
END IF
IF (rs <> r) OR (ss <> a) THEN
IF g = 0 THEN
g=1
ELSE
GOSUB skretanje
END IF
ro = r
so = s
PRINT r; ""; s; ""; skreni$
g$(r, s) = "R"
r = rs
rs = rs + 1
s = ss
END IF
LOOP
PRINT r; ""; s
END
skretanje:
FOR i = 0 TO 2

FOR i1 = 0 TO 2
f$(i, i1) = "."
NEXT i1
NEXT i
f$(1, 1) = "0"
f$(1 + (rs - r), 1 + (ss - s)) = "S"
f$(1 + (ro - r), 1 + (so - s)) = "P"
WHILE f$(2, 1) <> "P"
t$ = f$(0, 1)
f$(0, 1) = f$(1, 2)
f$(1, 2) = f$(2, 1)
f$(2, 1) = f$(1, 0)
f$(1, 0) = t$
WEND
IF f$(1, 0) = "S" THEN
skreni$ = "lijevo"
ELSEIF f$(1, 2) = "S" THEN
skreni$ = "desno"
ELSE
skreni$ = ""
END IF
RETURN
4. ZADATAK
Za svaki posao vodoinstalater mora od jedne duga~ke cijevi izrezati
odre|eni broj razli~itih vrsta cjev~ica (razlikuju se po veli~ini).
Prilikom izrezivanja nije va`no koliko cjev~ica pojedine vrste izre`e,
ve} da ostatak cijevi koji nije iskori{ten bude {to manji.
Napi{i program koji:
1. tra`i duljinu cijevi (D<=100)
2. tra`i broj vrsta cjev~ica (N<=5)
3. tra`i duljinu za svaku od N vrsta cjev~ica
4. nalazi na~in razanja cijevi tako da neiskori{teni ostatak bude
najmanji, te za taj na~in ispisuje duljinu neiskori{tene cijevi i
broj izrezanih cjev~ica za svaku vrstu.
Ako postoji vi{e rje{enja s istim najmanjim ostatkom, dovoljno je
ispisati samo jedno.
Primjer 1.
Ulaz:
Duljina cijevi ?
17
Broj vrsta dijelova ? 2
Unesi duljinu vrste 1 ? 7
Unesi duljinu vrste 2 ? 4
Izlaz:
Najmanji mogu}i ostatak je 1
Dijelova vrste 1: 0
Dijelova vrste 2: 4
Primjer 2.
Ulaz:
Duljina cijevi ?
23
Broj vrsta dijelova ? 3
Unesi duljinu vrste 1 ? 17

Unesi duljinu vrste 2 ? 5


Unesi duljinu vrste 3 ? 4
Izlaz:
Najmanji mogu}i ostatak je 0
Dijelova vrste 1: 0
Dijelova vrste 2: 3
Dijelova vrste 3: 2
RJE[ENJE 4. ZADATKA
DIM le(5), cur(5), best(5)
INPUT "Duljina cijevi: "; dz
ponovo:
INPUT "Broj vrsta dijelova: "; vd
IF (vd<1) OR (vd>5) GOTO ponovo
FOR a = 1 to vd
PRINT "Unesi duljivu vrste "; a; ": ";
INPUT le(a)
cur(a) = 0
NEXT a
bestv = dz
lev = 1
WHILE lev > 0
IF lev < vd THEN lev = lev + 1
ELSE cur(lev) = cur(lev) + 1
END IF
provjeri:
sum = 0
FOR a = 1 to vd
sum = sum + cur(a) * le(a)
NEXT a
IF sum > dz THEN
cur(lev) = 0
lev = lev - 1
IF (lev > 0) THEN
cur(lev) =cur(lev) + 1
GOTO provjeri
ELSE GOTO kraj
END IF
ELSEIF (dz - sum) < bestv THEN
bestv = dz - sum
FOR a = 1 to vd
best(a) = cur(a)
NEXT a
IF bestv = 0 GOTO kraj2
END IF
kraj:
WEND
kraj2:
PRINT "Najmanji moguci ostatak je ";bestv
FOR a = 1 to vd
PRINT "Dijelova vrste "; a; ": "; best(a)
NEXT a

ZADACI ZA PROGRAMSKI JEZIK QBASIC/PASCAL - DMIH '96.


****************************************************
1. zadatak
"Glavni" vuk u jednoj {umi, da bi ostao "glavni", {alje zastra{uju}e
{ifrirane poruke ostalim stanovnicima {ume. Me|utim, otkriven je!
Treba promijeniti {ifre. Evo kako:
- u~itaj dva prirodna broja,
prvi broj M neka je ve}i od 1 i manji od 30000,
drugi broj N neka je ve}i od 1 i manji od M
- ako su ulazni podaci ispravni ispi{i kiliko ima prirodnih brojeva X
za koje vrijedi:
X je ve}i od 1 i manji ili jednak M,
zbroj djeljitelja broja X djeljiv je sa N,
- ako ulazni podaci nisu ispravni ispisati poruku GRE[KA
VA@NO:
- djeljitelji nekog broja X za ovu priliku su i 1 i X
- ne smije{ ispisivati brojeve nego ih samo prebrojiti te ispisati
koliko ih ima
- bodovat }e se samo oni primjeri za koje program ispi{e rje{enje u
vremenu do 30 sekundi
Primjer:

ULAZ: 8, 3

IZLAZ: 4

Rje{enje 1. zadatka
PRINT "Upisite brojeve"
INPUT m
INPUT n
IF (m < 1) OR (m >= 30000) OR (n < 1) OR (n >= m) OR (m <> INT(m)) OR (n <> INT(n)) THEN
PRINT "GRESKA"
ELSE
m% = m
n% = n
DIM a%(m% + 1)
FOR i% = 1 TO m%
a%(i%) = 1
NEXT i%
z% = 0
FOR i% = 2 TO m%
FOR i1& = i TO m% STEP i%
a%(i1&) = (a%(i1&) + (i% MOD n%)) MOD n%
NEXT i1&
IF (a%(i%) MOD n%) = 0 THEN z% = z% + 1
NEXT i%
PRINT z%
END IF
***********************************************************
2. zadatak
Legendarni Robin Hood je u {umi na{ao neku }udnu napravu koja
pokazuje slike i ispu{ta zvukove. Najvi{e mu se svidio {port.
Shvatio je da mo`e birati koji {portski doga|aj }e gledati.
Sve {portove voli podjednako i najva`nije mu je da {to vi{e
vremena provodi gledaju}i {port. Nije mu va`no da emisije gleda
od po~etka do kraja. [portske emisije prikazuju se u razni~itim

terminima i na razli~itim programima, a neki se termini mogu


preklapati. Tvoj zadatak je:
- u~itati broj {portskih emisija N
- u~itati N puta ~etiri broja u obliku:
PRVI BROJ sat po~etka emisije
0 <= broj => 23
DRUGI BROJ minuta po~etka emisije 0 <= broj => 59
TRE]I BROJ sat zavr{etka emisije 0 <= broj => 23
^ETVRTI BROJ minuta zavr{etka emisije 0 <= broj => 59
- ispis{i koliko najvi{e sati i minuta Robin Hood mo`e provesti
pred ~udnom napravom gledaju}i {port u obliku:
BROJ SATI h BROJ MINUTA min
VA@NO:
- podrazumijeva se da su ulazni podaci ispravni
- bodovat }e se samo oni primjeri za koje program ispi{e rje{enje
u vremenu do 30 sekundi
Primjer: ULAZ: 1, 10, 0, 12, 0
IZLAZ: 2 h 0 min
Rje{enje 2. zadatka
DIM broj, tekuci, usporedni, zamjena, ukupno, pocetno AS INTEGER
DIM sat, minute AS INTEGER
INPUT broj
DIM vrijeme(2 * broj), vrsta(2 * broj) AS INTEGER
FOR tekuci = 1 TO broj
INPUT sat
INPUT minute
vrijeme(2 * tekuci - 1) = sat * 60 + minute
vrsta(2 * tekuci - 1) = 1
INPUT sat
INPUT minute
vrijeme(2 * tekuci) = sat * 60 + minute
vrsta(2 * tekuci) = -1
NEXT tekuci
FOR tekuci = 1 TO 2 * broj - 1
FOR usporedni = tekuci + 1 TO 2 * broj
IF vrijeme(tekuci) > vrijeme(usporedni) THEN
zamjena = vrijeme(tekuci)
vrijeme(tekuci) = vrijeme(usporedni)
vrijeme(usporedni) = zamjena
zamjena = vrsta(tekuci)
vrsta(tekuci) = vrsta(usporedni)
vrsta(usporedni) = zamjena
END IF
NEXT
NEXT
usporedni = 0
ukupno = 0
FOR tekuci = 1 TO 2 * broj
IF usporedni = 0 THEN pocetno = vrijeme(tekuci)
usporedni = usporedni + vrsta(tekuci)
IF usporedni = 0 THEN ukupno = ukupno + vrijeme(tekuci) - pocetno
NEXT
sat = ukupno / 60
minute = ukupno MOD 60
PRINT sat; "h "; minute; "min"
**********************************************************

3. zadatak
Bilo bi za o~ekivati da djevojka kao Marianne u slobodno vrijeme veze,
uzgaja cvije}e ili ne{to sli~no, ali ona rje{ava kri`aljke. Pomozi joj!
Napi{i program koji }e:
- u~itati 8 rije~i od to~no 4 znaka
- ako su ulazni podaci to~no upisani:
1. ispisati sva mogu}a rje{enja kri`aljke od ~etiri reda i ~etiri
stupca koja se mogu slo`iti od zadanih rije~i u obliku kao u
primjeru
2. ispisati poruku NEMA RJE[ENJA ako ne postoji niti jedno rje{enje
- ako ulazni podaci nisu to~no upisani ispisati poruku GRE[KA.
VA@NO:
- bodovat }e se samo oni primjeri za koje program ispi{e rje{enje u
vremenu do 30 sekundi
- za neispravne ulazne podatke poruku GRE[KA treba ispisati nakon {to
je u~itano svih 8 rije~i
Rje{enje 3. zadatka
DECLARE SUB krizaljka (poz!)
DIM SHARED rj$(10, 4), used(10), kr$(5, 5), st(10)
COMMON SHARED t
t=0
FOR i = 0 TO 7
used(i) = 0
st(i) = INT(.5 + i * .5)
NEXT i
PRINT "Upis podataka:"
FOR i = 0 TO 7
PRINT i; ".";
INPUT a$
IF LEN(a$) <> 4 THEN gr = 1
IF gr = 0 THEN
FOR i1 = 1 TO 4
rj$(i, i1 - 1) = MID$(a$, i1, 1)
NEXT i1
END IF
NEXT i
IF gr = 0 THEN
krizaljka (0)
IF t = 0 THEN PRINT "NEMA RJESENJA"
ELSE
PRINT "GRESKA"
END IF
SUB krizaljka (poz)
p=0
IF poz = 7 THEN
FOR rr = 0 TO 7
IF used(rr) = 0 THEN
p=1
FOR i = 0 TO 3
IF kr$(i, 3) <> rj$(rr, i) THEN p = 2
NEXT i
IF p = 1 THEN
FOR a = 0 TO 3
PRINT

FOR b = 0 TO 3
PRINT kr$(a, b);
NEXT b
NEXT a
PRINT
t=t+1
END IF
END IF
NEXT rr
ELSE
IF poz MOD 2 = 0 THEN
pom = INT(poz / 2)
FOR rr = 0 TO 7
IF used(rr) = 0 THEN
p=0
FOR i = 0 TO st(poz) - 1
IF kr$(pom, i) <> rj$(rr, i) THEN p = 1
NEXT i
IF p = 0 THEN
used(rr) = 1
FOR i = st(poz) TO 3
kr$(pom, i) = rj$(rr, i)
NEXT i
krizaljka (poz + 1)
used(rr) = 0
END IF
END IF
NEXT rr
ELSE
pom = INT(poz / 2)
FOR rr = 0 TO 7
IF used(rr) = 0 THEN
p=0
FOR i = 0 TO st(poz) - 1
IF kr$(i, pom) <> rj$(rr, i) THEN p = 1
NEXT i
IF p = 0 THEN
used(rr) = 1
FOR i = st(poz) TO 3
kr$(i, pom) = rj$(rr, i)
NEXT i
krizaljka (poz + 1)
used(rr) = 0
END IF
END IF
NEXT rr
END IF
END IF
END SUB
***********************************************************
4. zadatak
U toj istoj {umi, poruke koje odjekuju {umom zapisuje, analizira
i arhivira lovac. Me|utim, prije nego poruku stavi u arhivu, treba je
urediti. Tekst neure|ene poruke zapisan je u datoteci PORUKA.TXT.
Datoteka je napravljena na slijede}i na~in:
- u prvom redu nalazi se broj re~enica (N) koje datoteka sadr`i,
- u svakom sljede}em redu nalazi se po jedna od ukupno N re~enica,

- re~enica ima najvi{e 220 znakova


Ure|ena poruka ima slijede}i izgled:
- ne sadr`i broj re~enica (N)
- re~enice su razlomljene na redove, tako da je broj znakova u svakom
redu 30 osim u redovima kojima re~enice zavr{avaju, gdje je on manji
ili jednak 30.
- izme|u re~enica postoji jedan prazni red
Napi{i program koji u~ita neure|enu poruku iz datoteke PORUKA.TXT i
zapisuje ure|enu poruku u datoteku PORUKA.URE.
VA@NO:
- zarez (,) se ne pojavljuje u ulaznoj datoteci
- bodovat }e se samo oni primjeri za koje program ispi{e rje{enje u
vremenu do 30 sekundi
Rje{enje 4. zadatka
OPEN "poruka.txt" FOR INPUT AS #1
OPEN "poruka.ure" FOR OUTPUT AS #2
INPUT #1, n
FOR i = 1 TO n
INPUT #1, a$
jos = 1
DO
PRINT #2, LEFT$(a$, 30)
IF (LEN(a$) > 30) THEN a$ = MID$(a$, 31) ELSE jos = 0
LOOP UNTIL jos = 0
PRINT #2, ""
NEXT i
CLOSE #1, #2
**********************************************************
I na kraju rje{avanja {umskih zadataka napravi {umu zadanog imena.
Kako? Napi{i program koji }e:
- u~itati niz od maksimalno 8 znakova,
- ako je uneseni podatak ispravan napraviti na tvojoj disketi
poddirektorij pod tim imenom,
- ako ulazni podaci nisu to~no upisani ispisati poruka GRE[KA.
VA@NO:
- bodovat }e se samo oni primjeri za koje program ispi{e rje{enje u
vremenu do 30 sekundi
INPUT dir$
IF LEN(dir$) > 8 THEN
PRINT "GRESKA"
END
END IF
dir$ = "A:\" + dir$
MKDIR dir$

ZADACI ZA OSNOVNO[KOLSKI UZRAST - DMIH '97


1. zadatak **************************

Za zadani prirodni broj treba izra~unati srednju (prosje~nu)


vrijednost njegovih znamenaka.
Ulazni podaci - u~itati prirodan broj manji od 2 000 000 000.
Izlazni podaci - ispisati srednju vrijednost njegovih znamenaka
zaokru`enu na 2 decimale.
Primjer:

Ulaz
25710
12345678

Izlaz
3.00
4.50

Rje{enje 1. zadatka
CONST maxbroj = 2000000000
i% = 0
s% = 0
INPUT "Unesi broj>", broj&
IF (broj& > 0) AND (broj& < maxbroj) THEN
DO
s% = s% + (broj& MOD 10)
broj& = broj& / 10
i% = i% + 1
LOOP UNTIL broj& = 0
ELSE
PRINT "Broj nije OK!!!"
END IF
IF i% > 0 THEN PRINT USING "Srednja vrijednost znamenaka je #.##"; s% / i%
2. zadatak *************************
Prika`imo zgradu od N katova i N ulaza, zna~i N stanova, kvadratom
podijeljenim na N redova i N stupaca, zna~i N manjih kvadrata.
Sjeci{te svakog kata sa svakim ulazom je jedan stan. Svi stanovi su
ozna~eni rednim brojevima od 1 do N, slijeva nadesno i odozdo prema
gore, po~ev{i od lijevog donjeg kuta.
Npr. N=3

789

456

123

Susjedi stana S su svi stanovi s kojima se dodiruje podom, stropom


ili jednim od zidova (bilo koja stranica manjeg kvadrata).
Napi{i program koji }e:
- u~itati N (0 < N <= 15) i S
- ispisati brojeve stanova onako kako su oni u zgradi smje{teni
- ispisati sve susjede stana S u rastu}em redoslijedu ili
ispisati poruku "NEMA SUSJEDA" u slu~aju da stan S nema susjeda ili
ispisati poruku "NIJE U ZGRADI" u slu~aju da stan S nije u zgradi.
Primjer:

Ulaz
3
5

Izlaz

789

456

123

Susjedi stana 5 su 2 4 6 8
Rje{enje 2. zadatka
CLS
INPUT "Broj katova i ulaza ", n%
INPUT "Broj stana ", st%
IF 0 > st% OR st% > n% * n% THEN PRINT "NIJE U ZGRADI": STOP
DIM pomoc%(1 TO n% * n%, 1 TO 2)
CLS
x% = n%
br% = 0
FOR r% = 1 TO n%
y% = 1
FOR s% = 1 TO n%
br% = br% + 1
y% = y% + 1
LOCATE x%, y%
PRINT br%
y% = y% + LEN(STR$(n% * n%))
pomoc%(br%, 1) = r%
pomoc%(br%, 2) = s%
NEXT
x% = x% - 1
NEXT
ima = 0
IF pomoc%(st%, 1) - 1 > 0 THEN
LOCATE (x% + n% + 3), 5: PRINT "Susjedi stana"; st%; " su ";
PRINT st% - n%; : ima = 1
END IF
IF pomoc%(st%, 2) - 1 > 0 THEN
PRINT st% - 1; : ima = 1
LOCATE (x% + n% + 3), 5: PRINT "Susjedi stana"; st%; " su ";
END IF
IF pomoc%(st%, 2) + 1 <= n% THEN
LOCATE (x% + n% + 3), 5: PRINT "Susjedi stana"; st%; " su ";
PRINT st% + 1; : ima = 1
END IF
IF pomoc%(st%, 1) + 1 <= n% THEN
LOCATE (x% + n% + 3), 5: PRINT "Susjedi stana"; st%; " su ";
PRINT st% + n%; : ima = 1
END IF
IF ima = 0 THEN LOCATE (x% + n% + 3), 5: PRINT "NEMA SUSJEDA"
3. zadatak ************************
Svima je poznata funkcija programa za obradu teksta "prona|i i zamijeni"
(Search&Replace), kojom se odre|eni dio teksta automatski zamjenjuje
nekim drugim tekstom (nizom znakova). U na{em slu~aju zamjnjivat }emo niz
znakova, a ne teksta.
Zamjenu treba izvr{iti tako da se na svako mjesto gdje se tra`eni podniz
pojavljuje u radnom nizu, umjesto njega ubaci podniz kojim tra`eni podniz
`elimo zamijeniti.
Ulazni podaci - u~itati:
- niz znakova (do 255 zankova) u kojem izvr{avamo zamjenu
- podniz koji `elimo zamijeniti
- podniz kojim ga `elimo zamijeniti

Izlazni podaci - program treba ispisati:


- koliko je zamjena izvr{io
- "novi" izgled na{eg radnog niza znakova
- u slu~aju danije izv{ena niti jedna zamjena, program
treba ispisati samo poruku "NEMA ZAMJENA".
Primjer:

Ulaz
informatika
i
Y

Izlaz
2 zamjena
YnformatYka

Rje{enje 3. zadatka
CLS
INPUT s$
INPUT p$
INPUT r$
zam = 0
f$ = ""
i% = 1
WHILE i% <= LEN(s$)
IF MID$(s$, i%, LEN(p$)) = p$ THEN
f$ = f$ + r$
i% = i% + LEN(p$)
zam = zam + 1
ELSE
f$ = f$ + MID$(s$, i%, 1)
i% = i% + 1
END IF
WEND
CLS
IF zam = 0 THEN
PRINT "NEMA ZAMJENA"
ELSE
PRINT zam; "zamjena"
PRINT f$
END IF
4. zadatak ****************************************
Na slici je prikazan raspored pruga i stanica za vlakove podzemne
`eljeznice u tvojem gradu (iz ~asopisa "Pogled u budu}nost").
Stanice su ozna~ene kru`i~ima i brojem. Pruge su ozna~ene crtom.
Za prijevoz putnika rezervirani su vlakovi raspore|eni u 8 linija.
Vlakovi obilaze stanice prema rasporedu:
Linija:
1
2
3
4
5
6
7
8

Redoslijed obilaska stanica:


1 2 37 27 48 49 17 18 47 46
1 2 3 4 5 7 8 9 14 13 12 11
11 12 13 14 15 16 17 18 19 20 21
38 39 30 40 42 43 33 34
22 23 24 25 26 27 28 29 30 31 32 33 34
41 42 45 18 19 44 43 33 32 31 35 36
6 5 25 24 14 9 10
50 51 52 16 17 54 53

Stanice u kojima pruga zavr{ava su okreti{ta. Vlak koji do|e do okreti{ta


mijenja smjer, tj. vra}a se istim putem do odredi{ta od kojeg je kranuo
i tako dalje.

Putnici mogu ulaziti ili silaziti na svim stanicama. Iskrcavanje je obavezno


za sve putnike na okreti{tima.
Naplata vo`nji obavlja se prilikom ulaska u vozilo. Cijena karte ne ovisi o
udaljenosti koju vlak prevali, niti o vremenu koje putnik provede u njemu.
Prilikom svakog presjedanja putnik pla}a kartu.
U interesu je putnika da isplanira putovanje tako da uspije do}i od
polazi{ta do odredi{ta uz {to manji broj presjedanja.
Napi{i program koji za zadanu po~etnu i krajnju stanicu odre|uje
najpovoljniji plan putovanja u smislu {tednje novca putnika.
Ulazni podaci su cijeli brojevi A i B (1 <= A,B <= 54). A je broj po~etne,
a B broj krajnje stanice.
Izlazni podaci:
Ako ne postoji vi{e jednako {tedljivih na~ina za planiranje putovanja, treba
ispisati niz poruka za samo jedan od njih. Poruke moraju biti sljede~eg
oblika:
LINIJA L, ULAZAK NA STANICI U, IZLAZAK NA STANICI I
L,U i I su cijeli brojevi za koje vrijedi: 0 < L <= 8
0 < U <= 54
0 < I <= 54.
Poruka opisuje putovanje vlakom jedne linije od ulaska u vlak do izlaska
iz vlaka.
Prva poruka mora se odnositi na ulazak u vlak na stanici A. Svaka sljede}a
poruka kao ulaznu stanicu mora sadr`ati izlaznu stanicu iz prethodne poruke.
Zadnja poruka kao izlaznu stanicu mora sadr`ati stanicu B.
Primjer 1:
Ulaz
Izlaz
1
Linija 1, Ulazak na stanici 1, Izlazak na stanici 27
27
Primjer 2:
Ulaz
Izlaz
52
Linija 8, Ulazak na stanici 52, Izlazak na stanici 16
15
Linija 3, Ulazak na stanici 16, Izlazak na stanici 15
Rje{enje 4. zadatka
DIM linije(8, 13)
DIM putdo(54, 18)
DATA 1,2,37,27,48,49,17,18,47,46,0
DATA 1,2,3,4,5,7,8,9,14,13,12,11,0
DATA 11,12,13,14,15,16,17,18,19,20,21,0
DATA 38,39,30,40,42,43,33,34,0
DATA 22,23,24,25,26,27,28,29,30,31,32,33,34,0
DATA 41,42,45,18,19,44,43,33,32,31,35,36,0
DATA 6,5,25,24,14,9,10,0
DATA 50,51,52,16,17,54,53,0
FOR l = 1 TO 8
READ a
i=1
WHILE a <> 0
linije(l, i) = a
i=i+1

READ a
WEND
linije(l, 0) = i - 1
NEXT l
FOR s = 1 TO 54
putdo(s, 0) = 21
FOR i = 1 TO 18
putdo(s, i) = 0
NEXT i
NEXT s
INPUT poc
INPUT kraj
IF poc = kraj THEN END
putdo(poc, 1) = poc
putdo(poc, 0) = 1
jos = 1
WHILE jos = 1
jos = 0
FOR s = 1 TO 54
IF putdo(s, 0) < 20 THEN
FOR l = 1 TO 8
ima = 0
FOR i = 1 TO linije(l, 0)
IF linije(l, i) = s THEN ima = 1
NEXT i
IF ima = 1 THEN
FOR i = 1 TO linije(l, 0)
IF putdo(linije(l, i), 0) > putdo(s, 0) + 2 THEN
jos = 1
FOR ii = 1 TO putdo(s, 0)
putdo(linije(l, i), ii) = putdo(s, ii)
NEXT ii
putdo(linije(l, i), 0) = putdo(s, 0) + 2
putdo(linije(l, i), putdo(s, 0) + 1) = l
putdo(linije(l, i), putdo(s, 0) + 2) = linije(l, i)
END IF
NEXT i
END IF
NEXT l
END IF
NEXT s
WEND
i=1
WHILE i + 2 <= putdo(kraj, 0)
PRINT "LINIJA"; putdo(kraj, i + 1); ", ULAZAK NA STANICI "; putdo(kraj, i); ", IZLAZAK NA STANICI ";
putdo(kraj, i + 2)
i=i+2
WEND