zadaci iz qbasic-a
TRANSCRIPT
1
1. ZADACI S BROJEVIMA 1.1. Napisati program koji će učitati dva broja n1 i n2. Oba broja trebaju biti
prirodna. Ako taj uvjet nije ispunjen, ponoviti učitavanje. Ako je n2 < n1, zamijeniti n1 sa n2. Naći i ispisati sumu drugih korijena svih neparnih brojeva od n1 do n2.
CLS
10 PRINT "unesi 2 broja"
INPUT n1, n2
IF n1 > 0 AND n2 > 0 THEN
IF n2 < n1 THEN
temp = n2
n2 = n1
n1 = temp
END IF
ELSE
GOTO 10
END IF
s! = 0
FOR i = n1 TO n2
IF ((i MOD 2) <> 0) THEN s! = s! + SQR(i)
NEXT i
PRINT "suma je"; s!
1.2. Napisati program koji će učitati brojeve n1 i n2. Ako je n1 veće od n2, zamijeniti njihove vrijednosti. Naći i ispisati sve proste brojeve u intervalu n1 do n2.
INPUT “Unesi dva broja” ; n1, n2
x = n1
y = n2
IF n1 > n2 THEN
x = n2
y = n1
END IF
FOR i = x TO y
br = 0
FOR j = 1 TO i
IF i MOD j = 0 THEN br = br + 1
NEXT j
IF br = 2 THEN PRINT i
NEXT i
2
1.3. Napisati program koji će pretvoriti vrijeme koje je dano u satima, minutama i sekundama u sekunde. 2 SATA 3 MIN. 38 SEK. = 7817 SEKUNDI
CLS
INPUT "Unesi sat,minute i sekunde"; H, M, S
t = H * 3600 + M * 60 + S
PRINT t
1.4. Napisati program koji će učitati dimenzije sobe (širinu, duljinu i visinu). Učitati duljinu stranice a jedne manje kocke. Svi podaci neka su cijeli brojevi. Izračunati i na ekran ispisati koliko kocki zadane dimenzije stane u sobu zadanih dimenzija.
DO
CLS
INPUT "unesi dimenzije sobe"; d
INPUT s
INPUT v
20 INPUT "unesi duljinu stranice kocke"; a
d = INT(d)
s = INT(s)
v = INT(v)
a = INT(a)
IF a > d OR a > s OR a > v THEN
PRINT "stranica kocke mora biti manja od dimenzija sobe!"
GOTO 20
END IF
br = INT(d / a) * INT(s / a) * INT(v / a)
PRINT "u sobu stane"; br; "kocaka"
30 PRINT "pritisnite 2 za ponavljanje programa"
INPUT x
LOOP WHILE x = 2
1.5. Napisati program koji s tipkovnice učita dva broja (m, n). Program treba ispisati na ekran sve parne brojeve iz intervala [m+n, m*n].
REM Zadatak 1
CLS
INPUT "Unesi 2 broja"; m, n
FOR i = (m + n) TO (m * n)
IF i MOD 2 = 0 THEN PRINT i
NEXT i
3
1.6. Napisati program koji s tipkovnice učita dva broja (m i n). Ako je prvi učitani broj (m) veći od drugoga (n) na ekran treba ispisati sumu učitanih brojeva, a ako je prvi učitani broj manji od drugoga, na ekran treba ispisati produkt učitanih brojeva.
CLS
INPUT "unesi dva broja s tipkovnice"; m, n
IF m > n THEN
PRINT "suma brojeva m i n"
PRINT m + n
ELSE
PRINT "produkt brojeva m i n"
PRINT m * n
END IF
1.7. Napisati program koji će izračunati i na ekran ispisati sumu kvadrata udaljenosti 10 točaka od točke ishodišta (0,0). Koordinate x,y tih 10 točaka učitati preko tipkovnice.
REM Suma kvadrata udaljenosti točaka
CLS
s = 0
FOR i = 1 TO 10
INPUT "Unesi kordinate točke (x,y)", x, y
d2 = x * x + y * y
s = s + d2
NEXT i
PRINT "Suma kvadrata udaljenosti unesenih točaka od ishodišta je "; s
1.8. Napisati program koji će za svaka dva broja x,y koja se učitaju s tipkovnice i predstavljaju koordinate neke točke, izračunati i na ekran ispisati udaljenost do točke s koordinatama (3,-2). Program prekinuti kad se učitaju brojevi 3,-2.
CLS
DO UNTIL x = 3 AND y = -2
INPUT "unesi koordinate točke ", x, y
d! = SQR((x - 3) * (x - 3) + (y + 2) * (y + 2))
PRINT "udaljenost točke ("; x; ","; y; ") od točke (3,-2) je "; d!
LOOP
4
1.9. Napisati program koji će učitati brojeve m i n. Oba broja moraju bit prirodna i m mora biti veći od n. Ako taj uvjet nije ispunjen ponoviti učitavanje. Naći i ispisati binomni koeficijent b jednak m povrh n tj.
( )b m
n m n=
⋅ −!
! ! CLS
1 : INPUT "Unesi 2 prirodna broja"; m, n
SELECT CASE m
CASE IS < n
PRINT "Unesi ponovno brojeve"
GOTO 1
CASE IS > n
b = 1
FOR x = 1 TO m
b = b * x
NEXT x
FOR x = 1 TO n
b = b / x
NEXT x
FOR x = 1 TO (m - n)
b = b / x
NEXT x
CASE IS = n
b = 1
END SELECT
PRINT b
1.10. Napisati program koji će najprije učitati broj n. Broj n mora biti prirodan i veći od 3. Ako taj uvjet nije ispunjen, ispisati poruku o pogreški i ponoviti učitavanje. Naći i ispisati najmanji prosti broj veći od n.
CLS
10 INPUT "unesi prirodan broj "; n
IF (n MOD 2 <> 0) OR (n <= 3) THEN
PRINT "Pogreska!"
GOTO 10
END IF
s = n + 1
x = 0
DO br = 0
FOR i = 2 TO INT(s / 2)
IF s MOD i = 0 THEN br = br + 1
5
NEXT i
IF br = 0 THEN
x = 1
ELSE
s = s + 1
END IF
LOOP UNTIL x = 1
PRINT s
1.11. Simetričan kvadrat je prirodan broj koji je kvadrat drugog prirodnog broja i čije znamenka su simetrične. 121 je takav broj jer je 121=11x11. Napisati program koji će naći sve simetrične kvadrate od 10 do 10000.
CLS
FOR n = 1 TO 10000
s = n * n
t = s
br = 0
i = 0
REM Brojanje znamenki
DO
br = br + 1
t = INT(t / 10)
LOOP WHILE t <> 0
REDIM a(br)
REM Spremanje znamenki
DO
a(i) = s MOD 10
i = i + 1
s = INT(s / 10)
LOOP WHILE s <> 0
br2 = 0
REM provjera simetricnih znamenki
FOR j = 0 TO INT(br / 2 - 1)
IF a(j) = a(br - j - 1) THEN br2 = br2 + 1
NEXT j
REM Ako je simetrican, ispisi!
IF br2 = INT(br / 2) THEN PRINT n * n
NEXT n
6
1.12. Napisati program koji će simulirati istovremeno bacanje dviju kocaka. Baciti kocke zadani n broj puta. Naći u koliko posto slučajeva su se na obje kocke pojavili isti brojevi.
CLS
INPUT "unesi broj bacanja kocaka "; n
FOR i = 1 TO n
RANDOMIZE TIMER
x = INT(RND * 6) + 1
y = INT(RND * 6) + 1
PRINT x, y
IF x = y THEN br = br + 1
NEXT i
p = (br / n) * 100
PRINT "u"; p; "% slucajeva na obje kocke su se pojavili isti brojevi"
END
1.13. Napisati program koji će učitavati n prirodnih brojeva i naći i ispisati broj n koji pokazuje koliko je među učitanim brojevima bilo takvih, kod kojih su prva i posljednja znamenka jednake.
Rješenje 1
CLS
PRINT "unesi broj elemenata niza n;";
INPUT n
DIM x(n)
FOR i = 1 TO n
PRINT "unesi"; i; ".broj"
INPUT x(i)
NEXT i
FOR i = 1 TO n
a1 = x(i) MOD 10
z = x(i)
DO
a2 = z MOD 10
z = INT(z / 10)
LOOP WHILE z >= 1
IF a1 = a2 THEN
PRINT x(i)
br = br + 1
END IF
NEXT i
7
PRINT "Ukupno je bilo "; br; " brojeva sa istom prvom i zadnjom znamenkom"
Rješenje 2
CLS
INPUT "Odredi dimenziju niza"; n
DIM a$(n)
FOR i = 1 TO n
INPUT "Unesi član niza"; a$(i)
NEXT i
b = o
FOR i = 1 TO n
IF (MID$(a$(i),1,1)=MID$(a$(i),LEN(a$(i)),1)) THEN b=b+1
NEXT i
PRINT "Koliźina brojeva kojima je prva i zadnja znamenka ista:"; b
END
1.14. Napisati program koji će pronaći i na ekran ispisati sve brojeve u intervalu od 100 do 1000 kojima je suma prve i zadnje znamenke jednaka srednjoj znamenci.
Rješenje 1 CLS
PRINT "suma znamenaka"
DIM a(3)
FOR i = 100 TO 999
z = i
FOR j = 1 TO 3
a(j) = z MOD 10
z = INT(z / 10)
NEXT j
IF (a(1) + a(3)) = a(2) THEN PRINT i
NEXT i
Rješenje 2 CLS
FOR i = 100 TO 999
p = INT(i / 100)
z = i MOD 10
s = INT(i / 10) MOD 10
IF p + z = s THEN PRINT i
NEXT i
8
1.15. Napisati program koji će učitati koeficijente a, b, c, d, e, f dviju linearnih jednadžbi sa dvije nepoznanice. Jednadžbe su ax+by=c i dx+ey=f. Izračunati i ispisati rješenja x i y ovih dviju linearnih jednadžbi.
REM Sustav linearnih jednadžbi
CLS
PRINT "Rješava se sustav dviju linearnih jednadžbi sa dvije nepoznanice"
PRINT "Jednadžbe su ax+by=c , dx+ey=f"
INPUT "Unesi koeficjente a,b,c,d,e,f ", a, b, c, d, e, f
IF (a = b AND a = c AND d = e AND d = f) OR ((a = 0 AND b = 0 AND c = 0) OR (d = 0 AND e = 0 AND f = 0)) THEN
PRINT "Jednadžba ima beskonačno mnogo rješenja"
GOTO 10
ELSEIF (b * d = a * e) THEN
PRINT "Jednadžba nema rješenja"
GOTO 10
ELSE
y! = (a * f - d * c) / (a * e - b * d)
x! = (b * f - e * c) / (b * d - a * e)
PRINT "x="; x!, "y="; y!
END IF
10 END
1.16. Napisati program koji će simulirati bacanje kocke. Baciti kocku 6000 puta i naći i ispisati broj pojavljivanja svakog od brojeva 1 do 6. Koristiti Rnd funkciju.
CLS
FOR i = 1 TO 60
x = INT(RND(1) * 6 + 1)
PRINT x
SELECT CASE x
CASE IS = 1
br1 = br1 + 1
CASE IS = 2
br2 = br2 + 1
CASE IS = 3
br3 = br3 + 1
CASE IS = 4
br4 = br4 + 1
CASE IS = 5
br5 = br5 + 1
CASE IS = 6
9
br6 = br6 + 1
END SELECT
NEXT i
PRINT "Broj 1 se pojavio"; br1; "puta"
PRINT "Broj 2 se pojavio"; br2; "puta"
PRINT "Broj 3 se pojavio"; br3; "puta"
PRINT "Broj 4 se pojavio"; br4; "puta"
PRINT "Broj 5 se pojavio"; br5; "puta"
PRINT "Broj 6 se pojavio"; br6; "puta"
END
1.17. Za potrebe nekog sportskog natjecanja, potrebno je za svakog takmičara odrediti mjesto koje je on zauzeo na temelju postignutog rezultata (vremena) t. Svaki takmičar ima svoj startni broj s. Napisati program koji će učitavati podatke o startnom broju takmičara i o njegovom postignutom vremenu t i ispisati poruku: Takmičar xxx, vrijeme xxxx.xx ; xxx. mjesto Kada su učitani svi podaci (kada je takmičenje završeno) program treba ispisati redoslijed svih takmičara. Taj ispis treba imati izgled: Br. Takm. Vrijeme 1 xxx xxxx.xx 2 xxx xxxx.xx
CLS
INPUT "unesi broj koliko je takmičara sudjelovalo na natjecanju"; n
DIM b(n)
DIM t(n)
FOR i = 1 TO n
INPUT "unesi startni broj takmičara"; b(i)
INPUT "unesi vrijeme t"; t!(i)
PRINT "takmičar"; b(i); "vrijeme"; t!(i); "xxx. mjesto"
NEXT i
FOR i = 1 TO n
FOR j = i + 1 TO n
IF t!(j) < t!(i) THEN
a = t!(j)
c = b(j)
t!(j) = t!(i)
b(j) = b(i)
t!(i) = a
b(i) = c
END IF
NEXT j
10
NEXT i
SLEEP (2)
PRINT "----------------------"
PRINT "br. takm. vrijeme"
FOR i = 1 TO n
PRINT i; " "; b(i); " "; t!(i)
NEXT i
1.18. Napisati program koji će pretvoriti vrijeme koje je dano u sekundama u sate, minute i sekunde. 3818 SEKUNDI = 1 SAT 3 MIN. 38 SEK.
CLS
INPUT "unesi vrijeme u sekundama"; s
h = INT(s / 3600)
m = INT((s - 3600 * h) / 60)
s = s - (h * 3600) - (m * 60)
PRINT "vrijeme u satima minutama i sekundama je :"
PRINT h; ":"; m; ":"; s
1.19. Napisati program koji će na ekran ispisati sve brojeve koji su djeljivi sa 3 a nisu djeljivi sa 7 između 1000 i 10000.
FOR x = 1000 TO 10000
IF x MOD 3 = 0 THEN
IF x MOD 7 > 0 THEN PRINT x
NEXT x
1.20. Napisati program koji će na ekran ispisati sve brojeve koji su djeljivi s brojem 7 a nisu djeljivi s brojem 9 između 500 i 15000.
CLS
FOR i = 500 TO 15000
IF i MOD 7 = 0 AND i MOD 9 <> 0 THEN PRINT i
NEXT i
1.21. Napisati program koji će učitati a,b koeficijente pravca y=ax+b. Učitati također koordinate točke x0,y0. Treba pronaći i ispisati najkraću udaljenost te točke do pravca i jednadžbu pravca koji je okomit na originalni pravac a prolazi kroz (x0,y0).
CLS
INPUT "unesi koeficijente pravca"; a, b
INPUT "unesi koordinate toźke"; x0, y0
k = -1 / a
q = -k * x0 + y0
d = ABS((-a * x0 + y0 - b) / SQR(a * a + 1))
PRINT "y="; k; "x+"; q
PRINT "Udaljenost toźke je"; d
11
1.22. Napisati program koji će učitati dva prirodna broja a i b tako da je a>=b, a,b<15. Izračunati x=(a!)/((a-b)!b!) i ispisati na ekran (! je oznaka za faktorijele).
s1 = 1
s2 = 1
s3 = 1
PRINT "uc 2 br a i b td je a>=b i a i b<15"
10 INPUT "unesi a"; a
INPUT "unesi b"; b
IF a >= b AND b < 15 THEN
FOR i = 1 TO a
s1 = s1 * i
NEXT i
FOR i = 1 TO a - b
s2 = s2 * i
NEXT i
FOR i = 1 TO b
s3 = s3 * i
NEXT i
ELSE
PRINT "trebas unit br takve da je a>=b i b<15"
GOTO 10
END IF
x = s1 / (s2 * s3)
PRINT "x="; x
1.23. Napisati program koji će učitati broj n koji mora biti veći od 10. Ako taj uvjet nije ispunjen, ispisati poruku o pogreški i prekinuti rad programa. Naći i ispisati najveći prosti broj manji od n.
REM "****prosti broj****"
CLS
INPUT a
IF a > 10 THEN
11 a = a - 1
i = 2
10 IF i < a THEN
IF a MOD i = 0 THEN
GOTO 11
ELSE i = i + 1
GOTO 10
END IF
12
ELSE
PRINT a
END IF
ELSE
PRINT "error!"
END IF
1.24. Napisati program koji će najprije učitati prirodan broj n i realan broj x. Program treba naći i ispisati sumu prvih n članova niza s=1+x/1!+x^2/2!+..+x^n/n! (^ označava potenciranje).
u = 1
s = 1
10 INPUT "Unesi prirodan broj n="; n
IF n = INT(n) THEN
INPUT "Uesi realan broj m="; m!
FOR i = 1 TO n
u = u * i
a = m ^ i / u
s = s + a
NEXT i
ELSE
GOTO 10
END IF
PRINT "Suma prvih n źlanova niza je s="; s
1.25. Napisati program koji će s tastature učitati prirodni broj i naći i ispisati sve proste faktore toga broja.
INPUT "Unesi prirodni broj"; n
FOR i = 2 TO n
10 IF n MOD i = 0 THEN
PRINT i
n = n / i
GOTO 10
END IF
NEXT i
1.26. Napisati program za pretvorbu binarnog broja u dekadski. PRINT "ucitaj binarni broj"
INPUT bin
n = 0
dek = 0
WHILE bin <> 0 THEN
13
a = bin MOD 10
dek = dek + a * 2 ^ n
n = n + 1
bin = bin / 10
WEND
PRINT "broj pretvoren iz binarnog u dekatdki sustav je "; dek
1.27. Napisati program za pretvorbu heksadekadskog broja u dekadski. pot = 1
INPUT a$
REM PRINT LEN(a$)
duzina = LEN(a$)
i = 1
DO WHILE (i <= duzina)
slovo$ = MID$(a$, duzina - i + 1, 1)
IF UCASE$(slovo$) = "A" THEN
znamenka(i) = 10
ELSEIF UCASE$(slovo$) = "B" THEN
znamenka(i) = 11
ELSEIF UCASE$(slovo$) = "C" THEN
znamenka(i) = 12
ELSEIF UCASE$(slovo$) = "D" THEN
znamenka(i) = 13
ELSEIF UCASE$(slovo$) = "E" THEN
znamenka(i) = 14
ELSEIF UCASE$(slovo$) = "F" THEN
znamenka(i) = 15
ELSE
znamenka(i) = VAL(slovo$)
END IF
i = i + 1
LOOP
i = 1
DO WHILE (i <= duzina)
REM PRINT znamenka(i)
sum = sum + znamenka(i) * pot
pot = pot * 16
i = i + 1
LOOP
PRINT sum
14
1.28. Pitagorini brojevi su prirodni brojevi i1, i2 i i3 koji zadovoljavaju uvjet i1*i1+i2*i2=i3*i3. Napisati program koji će naći i ispisati sve Pitagorine brojeve manje od 1000.
PRINT "Pitagorini brojevi su:"
FOR i1 = 1 TO 1000
FOR i2 = 1 TO 1000
FOR i3 = 1 TO 1000
IF i1 * i1 + i2 * i2 = i3 * i3 THEN
PRINT "i1="; i1; " i2="; i2; " i3="; i3
END IF
NEXT i3
NEXT i2
NEXT i1
1.29. Napisati program koji će s tipkovnice učitati prvo dva cijela broja (M i N) koji predstavljaju donju (M) i gornju (N) granicu intervala. Pronaći i na ekran ispisati sumu parnih i sumu neparnih brojeva unutar zadanog intervala.
INPUT "unesi dva broja,manji pa veci"; m, n
IF n < m THEN
t = m
m = n
n = t
END IF
sump = 0
sun = 0
FOR i = m TO n
IF i MOD 2 = 0 THEN
sump = sump + i
ELSE
sumn = sumn + i
END IF
NEXT i
PRINT sump, sumn
1.30. Napisati program koji će na ekran ispisati sve parne brojeve koji su djeljivi s brojem 3 i nalaze se u intervalu između 100 i 1000.
CLS
FOR i = 102 TO 1000 STEP 6
PRINT i
SLEEP 1
NEXT i
15
1.31. Napisati program koji će učitavati podatke o godini upisa (GOD) i spolu (SPOL) studenata. GOD je cijeli broj koji može biti od 1 do 4. Spol je cijeli broj koji može biti 1 (muški) ili 2 (ženski). Učitane podatke treba tabelirati i dobivenu tabelu ispisati tako, da njen izgled bude slijedeći: PODACI O STUDENTIMA PO GODINAMA MUŠKI ŽENSKI UKUPNO 1. GOD. xxxx xxxx xxxx 2. GOD. xxxx xxxx xxxx 3. GOD. xxxx xxxx xxxx 4. GOD. xxxx xxxx xxxx UKUPNO: xxxx xxxx xxxx
DIM GOD(2, 4)
FOR i = 1 TO 2
FOR j = 1 TO 4
GOD(i, j) = 0
NEXT j
NEXT i
PRINT "Koliko ima studenata?"
INPUT n
FOR k = 1 TO n
PRINT "Unesi godinu upisa"; k; ". studenta:"
INPUT g
PRINT "Unesi spol"; k; ". studenta, za muski unesi 1, a za zenski 2:"
INPUT s
FOR i = 1 TO 2
FOR j = 1 TO 4
IF g = j AND s = i THEN
GOD(i, j) = GOD(i, j) + 1
END IF
NEXT j
NEXT i
NEXT k
PRINT TAB(15); "muski"; TAB(25); "zenske "; "ukupno"
FOR j = 1 TO 4
PRINT j; ". godina: "; GOD(1, j); TAB(25); GOD(2, j); " "; GOD(1, j) + GOD(2, j)
NEXT j
ukm = 0
ukz = 0
FOR j = 1 TO 4
ukm = ukm + GOD(1, j)
ukz = ukz + GOD(2, j)
16
NEXT j
PRINT " ukupno: "; ukm; TAB(25); ukz
1.32. Napisati program koji ispituje da li se točka sa koordinatama zadanim sa tipkovnice nalazi na kružnici, unutar kružnice ili van nje
PRINT "Unesi radijus kru§nice:"
INPUT r
INPUT "Unesi koordinatu x:"; x
INPUT "Unesi koordinatu y:"; y
IF SQR(x * x + y * y) = r THEN
PRINT "Točka(";x;",";y;")leži na kružnici radijusa:"; r
ELSE
IF SQR(x * x + y * y) < r THEN
PRINT "Točka(";x;",";y;")nalazi se unutar kružnice radijusa:"; r
ELSE
PRINT "Točka(";x;",";y;") nalazi se izvan kružnice radijusa :"; r
END IF
END IF
1.33. Napisati program za pretvorbu oktalnog broja u dekadski. 1 INPUT "Unesi broj oktalnog brojevnog sustava: "; n$
s = 0
FOR i = LEN(n$) TO 1 STEP -1
c$ = MID$(n$, i, 1)
c = VAL(c$)
IF c >= 0 AND c < 8 THEN
s = s + c * 8 ^ (LEN(n$) - i)
ELSE
PRINT "Uneseni broj nije oktalni broj"
GOTO 1
END IF
NEXT i
PRINT "Ekvivalent u dekadskom brojevnom sustavu je:"; s
1.34. Napisati program za pretvorbu heksadekadskog broja u oktalni. Rješenje 1
CLS
PRINT "Unesi heksadekadski broj:"
INPUT a$
b = LEN(a$)
r$ = "00"
17
FOR i = 1 TO b
y$ = MID$(a$, i, 1)
SELECT CASE y$
CASE "0"
r$ = r$ + "0000"
CASE "1"
r$ = r$ + "0001"
CASE "2"
r$ = r$ + "0010"
CASE "3"
r$ = r$ + "0011"
CASE "4"
r$ = r$ + "0100"
CASE "5"
r$ = r$ + "0101"
CASE "6"
r$ = r$ + "0110"
CASE "7"
r$ = r$ + "0111"
CASE "8"
r$ = r$ + "1000"
CASE "9"
r$ = r$ + "1001"
CASE "A"
r$ = r$ + "1010"
CASE "B"
r$ = r$ + "1011"
CASE "C"
r$ = r$ + "1100"
CASE "D"
r$ = r$ + "1101"
CASE "E"
r$ = r$ + "1110"
CASE "F"
r$ = r$ + "1111"
END SELECT
NEXT i
v$ = ""
l$ = ""
n = LEN(r$)
18
FOR i = n - 2 TO 1 STEP -3
v$ = MID$(r$, i, 3)
SELECT CASE v$
CASE "000"
l$ = l$ + "0"
CASE "001"
l$ = l$ + "1"
CASE "010"
l$ = l$ + "2"
CASE "011"
l$ = l$ + "3"
CASE "100"
l$ = l$ + "4"
CASE "101"
l$ = l$ + "5"
CASE "110"
l$ = l$ + "6"
CASE "111"
l$ = l$ + "7"
END SELECT
NEXT i
z$ = ""
FOR i = LEN(l$) TO 1 STEP -1
c$ = MID$(l$, i, 1)
z$ = z$ + c$
NEXT i
PRINT "Heksadekadski broj:"; a$; " u oktalnom je zapisu broj:"; z$
Rješenje 2 PRINT "Unesi heksadekadski broj!"
INPUT a$
b = LEN(a$)
c$ = ""
FOR i = b TO 1 STEP -1
x$ = MID$(a$, i, 1)
c$ = c$ + x$
NEXT i
S = 0
FOR i = 0 TO b - 1
y$ = MID$(c$, i + 1, 1)
19
SELECT CASE y$
CASE "0"
S = S + 0
CASE "1"
S = S + 16 ^ i
CASE "2"
S = S + 2 * 16 ^ i
CASE "3"
S = S + 3 * 16 ^ i
CASE "4"
S = S + 4 * 16 ^ i
CASE "5"
S = S + 5 * 16 ^ i
CASE "6"
S = S + 6 * 16 ^ i
CASE "7"
S = S + 7 * 16 ^ i
CASE "8"
S = S + 8 * 16 ^ i
CASE "9"
S = S + 9 * 16 ^ i
CASE "A"
S = S + 10 * 16 ^ i
CASE "B"
S = S + 11 * 16 ^ i
CASE "C"
S = S + 12 * 16 ^ i
CASE "D"
S = S + 13 * 16 ^ i
CASE "E"
S = S + 14 * 16 ^ i
CASE "F"
S = S + 15 * 16 ^ i
END SELECT
NEXT i
PRINT "Heksadekadski broj "; a$; " u dekadskom zapisu je:"; S
M = S
j = 0
DO WHILE S > 0
k = S MOD 8
20
S = FIX(S / 8)
j = j + 1
LOOP
DIM n(j)
d = 1
DO WHILE M > 0
n(d) = M MOD 8
M = FIX(M / 8)
d = d + 1
LOOP
r$ = ""
FOR i = j TO 1 STEP -1
r$ = r$ + STR$(n(i))
NEXT i
PRINT "Heksadekadski broj "; a$; " u oktalnom zapisu je:"; r$
1.35. Napisati program koji će učitati dvije točke u trodimenzionalnom prostoru A=(x1,y1,z1) i B=(x2,y2,z2). Program treba ispisati na ekran kolika je udaljenost između točaka A i B.
INPUT “Unesi koordinate točke A” ; x1, y1, z1
INPUT “Unesi koordinate točke B” ; x2, y2, z2
x = ( x2 – x1 )^2
y = ( y2 – y1 )^2
z = ( z2 – z1 )^2
sum = x + y + z
d = SQR ( sum )
PRINT d
1.36. Napisati program koji će učitavati n prirodnih brojeva i naći i ispisati broj n koji pokazuje koliko je među učitanim brojevima bilo takvih, kod kojih su prva i posljednja znamenka jednake.
INPUT "Koliko zelis brojeva"; n
br = 0
FOR i = 1 TO n
INPUT "Unesi broj:"; x$
SELECT CASE LEFT$(x$, 1)
CASE "-"
a$ = MID$(x$, 2, 1)
b$ = RIGHT$(x$, 1)
a = VAL(a$)
b = VAL(b$)
IF a = b THEN br = br + 1
21
CASE ELSE
IF LEFT$(x$, 1) = RIGHT$(x$, 1) THEN br = br+1
IF LEN(x$) = 1 THEN br = br - 1
END SELECT
NEXT i
PRINT br; "je/su broj-a koja imaju prvu i zadnju znamenku jednaku."
1.37. Napisati program za pretvorbu dekadskog broja u binarni. REM Pretvaranje dekadskih brojeva u binarne
DIM b(1000)
INPUT „Unesi broj:“ ; a
n = 0
DO WHILE a > 0
n = n +1
b(n) = a MOD 2
a = FIX(a / 2)
LOOP
PRINT „ Odgovarajući binarni broj je:“
FOR i = n TO 1 STEP -1
PRINT b(i)
NEXT i
1.38. Napisati program za pretvorbu oktalnog broja u heksadekadski. 10 INPUT "Unesi broj u oktalnom brojevnom sustavu."; a
i = 0
z = 1
DO UNTIL a = 0
z = a MOD 10
IF z > 7 THEN GOTO 10
dek = dek + z * 8 ^ i
i = i + 1
a = INT(a / 10)
LOOP
h$ = HEX$(dek)
PRINT h$
Napisati program koji će učitati radijus kugle R2 i radijus njoj koncentrične manje kugle R1. Ponavljati učitavanje R1 sve dok se ne učita manji broj od R2. Izračunati i na ekran ispisati koliko iznosi volumen prostora između te dvije kugle.
Svaki paran broj može se prikazati kao suma dvaju prostih brojeva (tkzv. Goldbachovo pravilo). Napisati program koji će najprije učitati dva prirodna broja n1 i n2. Ako je n1 > n2
22
zamijeniti n1 sa n2. Prikazati sve parne brojeve u intervalu n1 do n2 kao sumu dvaju prostih brojeva.
Napisati program za pretvorbu dekadskog broja u oktalni.
Napisati program za pretvorbu dekadskog broja u heksadekadski.
Napisati program koji će učitati dva broja n1 i n2. Oba broja trebaju biti prirodna. Ako taj uvjet nije ispunjen, ponoviti učitavanje. Ako je n2 < n1, zamijeniti n1 sa n2. Naći i ispisati sumu drugih korijena svih neparnih brojeva od n1 do n2.
Napisati program koji će učitavati cijele brojeve sve dok se ne učita broj manji od 0. Za svaki učitan broj ispisati na ekran koliko ga puta možemo cjelobrojno podijeliti sa 2 dok ne dobijemo broj 0.
Napravi program koji računa površinu kružnog isječka. Polumjer kružnice i kut u stupnjevima unesite sa tipkovnice odvojene razmakom.
Unesite koordinate vrhova trokuta.Izračunajte duljine stranica trokuta i ispišite ih, te odredite da li je trokut raznostraničan,jednakokračan ili jednakostraničan.
Unesi katete pravokutnog trokuta i izračunaj hipotenuzu, te kutove trokuta u stupnjevima.
Napišite izbornik za izračun površine geometrijskih likova: kvadrata, pravokutnika i trokuta. Kao elementi za izračun unose se duljine stranica likova.
Unesite dva broja putem tipkovnice i zatim nađite najveći broj sa kojim su oba broja djeljiva i ispišite ga (tzv. najveća zajednička mjera).
Napisati program koji će izračunati i ispisati površinu piramide koja ima bazu kvadrat stranice a, bridove duljine b. Vrijednosti a i b je potrebno učitati putem tastature.
Napisati program koji će učitati dva pravca u obliku y=ax+b i y=cx+d, znači a,b,c,d učitati putem tipkovnice. Program treba pronaći i ispisati da li se ta dva pravca sijeku i ako da u kojoj točki.
Napisati program koji ispituje da li se točka sa koordinatama zadanim sa tipkovnice nalazi na kružnici, unutar kružnice ili van nje.
Napisati program koji će pronaći sve brojeve između 150 i 410 koji su jednaki sumi kubova svojih znamenki. N= 153 N= 370 N= 371 N= 407
Napisati program koji će pronaći i na ekran ispisati sve brojeve iz intervala [10, 10000] čija je suma znamenaka djeljiva sa svim znamenkama tog broja (nule ne uzimati u obzir).
Napisati program koji će izračunati i na ekran ispisati sumu svih četveroznamenkastih brojeva koji su djeljivi s 13, a zadnja znamenka im nije 8.
Napisati program koji će učitavati cijele brojeve sve dok se ne učita broj 0. Za sve učitane brojeve pronaći koliko puta se ponovila znamenka 4 i taj rezultat na kraju kad se učita 0 ispisati na ekran.
Napisati program koji će učitavati cijele brojeve s tipkovnice sve dok se ne učita broj manji ili jednak nuli (0). Za svaki učitani broj izračunati i na ekran ispisati sumu parnih znamenki broja.
23
Napisati program koji ispituje da li se točka sa koordinatama zadanim sa tipkovnice nalazi na kružnici, unutar kružnice ili van nje.
Napisati program koji će pronaći i na ekran ispisati sve brojeve koji su djeljivi s 13 a nisu djeljivi sa 7 iz intervala [10, 10000].
2. ZADACI SA STRINGOVIMA 2.1. Napisati program koji će učitati string. Treba izračunati duljinu stringa.
Ako duljina nije djeljiva sa 4 onda dopuniti string sa znakom ‘.’. Točkice staviti na kraj stringa tako da duljina stringa bude djeljiva sa 4. Tako dobiveni string ispisati ponovno na ekran.
INPUT "unesi string"; a$
WHILE LEN(a$) MOD 4 <> 0
a$ = a$ + "."
WEND
PRINT a$
2.2. Napisati program koji će učitati rimski broj u obliku stringa. Izračunati vrijednost toga broja i ispisati na ekran.
DECLARE FUNCTION provjera (a$)
12 DATA "I", 1, "V", 5, "X", 10, "L", 50, "C", 100, "D", 500, "M", 1000
REM unos
PRINT "Unesi rimski broj :";
INPUT a$
a$ = UCASE$(a$)
REM rastavljanje rimskog broja
n1 = LEN(a$)
DIM x1$(n1)
FOR i = 1 TO n1
x1$(i) = MID$(a$, i, 1)
NEXT i
REM provjera sub
COLOR 18: PRINT "!!! NAPOMENA !!! ==> Provjera broja nije potpuna"
COLOR 7: PRINT "Zelis li provjeru rimskog broja?(D/N):";
INPUT o$
IF UCASE$(o$) = "D" THEN
p = provjera(a$)
IF p = 12 THEN GOTO 12
IF p = 13 THEN GOTO 13
END IF
24
13 REM pretvorba
FOR i = 1 TO n1
FOR j = 1 TO 10
READ z$
IF z$ = x1$(i) THEN
READ x1(i)
RESTORE
GOTO 10
END IF
READ k
NEXT j
10 NEXT i
REM sumiranje
FOR i = 1 TO n1 - 1
IF x1(i) < x1(i + 1) THEN
S = S - x1(i)
GOTO 20
END IF
S = S + x1(i)
20 NEXT i
S = S + x1(n1)
PRINT ""
REM ispis
PRINT "Rimski broj "; a$; " iznosi "; S
END
FUNCTION provjera (a$)
21 REM rastavljanje rimskog broja
n = LEN(a$)
DIM x$(n)
FOR i = 1 TO n
x$(i) = MID$(a$, i, 1)
NEXT i
DIM x(n)
B = 23
23 REM slova
FOR i = 1 TO n
IF x$(i) <> "I" AND x$(i) <> "V" AND x$(i) <> "X" AND x$(i) <> "L" AND x$(i) <> "C" AND x$(i) <> "D" AND x$(i) <> "M" THEN
PRINT "Slovo";x$(i);"nije rimski broj!"
25
ff = 2
END IF
NEXT i
B = B + 1
IF ff = 2 THEN GOTO 1
24 REM pretvorba
FOR i = 1 TO n
FOR j = 1 TO 10
READ z$
IF z$ = x$(i) THEN
READ x(i)
RESTORE
GOTO 0
END IF
READ k
NEXT j
0 NEXT i
B = B + 1
25 REM stupanj
FOR i = 1 TO n - 1
IF x(i) < x(i + 1) AND x(i + 1) / x(i) <> 10 AND x$(i) + x$(i + 1) <> "IV" AND x$(i) + x$(i + 1) <> "XL" AND x$(i) + x$(i + 1) <> "CD" THEN
PRINT "Netocan rimski broj!"
PRINT "Nepostojeci rimski broj =/= "; x$(i); x$(i + 1)
ff = 1
END IF
NEXT i
B = B + 1
IF ff = 1 THEN GOTO 2
26 REM v,l,d
FOR i = 1 TO n
IF x$(i) = "V" THEN
bV = bV + 1
ELSEIF x$(i) = "L" THEN
bL = bL + 1
ELSEIF x$(i) = "D" THEN
bD = bD + 1
ELSE
GOTO 252
26
END IF
252 NEXT i
IF bV > 1 THEN PRINT "Netocan rimski broj! (broj pojavljivanja slova V veci od 1)"
IF bL > 1 THEN PRINT "Netocan rimski broj! (broj pojavljivanja slova L veci od 1)"
IF bD > 1 THEN PRINT "Netocan rimski broj! (broj pojavljivanja slova D veci od 1)"
B = B + 1
IF bV > 1 OR bL > 1 OR bD > 1 THEN ff = 1
IF ff = 1 THEN GOTO 2
27 REM i,x,c
DIM h$(3)
h$(1) = "I"
h$(2) = "X"
h$(3) = "C"
FOR i = 1 TO 3
FOR j = 1 TO n - 1
IF x$(j) <> h$(i) THEN
bs = 0
ELSE
bs = bs + 1
END IF
IF bs >= 2 AND x(j) < x(j + 1) THEN
PRINT "Greska! "; x$(j - 1); x$(j); x$(j + 1); " nije dozvoljen rimski broj!"
ff = 1
END IF
IF bs > 3 THEN
PRINT "Netocan rimski broj! (slovo "; h$(i); " se pojavilo"; bs; " puta u nizu)"
ff = 1
END IF
NEXT j
NEXT i
FOR i = 1 TO n
IF x$(i) = "M" THEN fm = 1
IF x$(i) <> "M" AND fm = 1 THEN bm = bm + 1
IF x$(i) = "M" AND bm >= 2 THEN
PRINT "Greska! Slovo M krivo koristeno!"
ff = 1
27
END IF
NEXT i
B = B + 1
IF ff = 1 THEN GOTO 2
1 REM provjera 1
IF ff = 2 THEN
PRINT "U rimskom broju postoje nedozvoljena slova! Obavezan novi unos!"
provjera = 12
GOTO 15
END IF
IF ff = 0 THEN GOTO 28
2 REM provjera 2
PRINT "Zelis li nastaviti provjeru (D/N)?";
INPUT o$
IF UCASE$(o$) = "D" THEN
ff = 0
IF B = 24 THEN GOTO 24
IF B = 25 THEN GOTO 25
IF B = 26 THEN GOTO 26
IF B = 27 THEN GOTO 27
IF B = 28 THEN GOTO 28
ELSE
provjera = 13
END IF
28 REM provjera 3
PRINT "Provjera gotova!"
provjera = 13
15 END FUNCTION
2.3. Napisati program koji će učitati string. Izračunati i na ekran ispisati je li učitani string rimski broj ili ne.
PRINT "Unesi string velikim slovima:";
INPUT a$
br = 0
I = 0
V = 0
X = 0
L = 0
C = 0
D = 0
28
M = 0
n = LEN(a$)
FOR j = 1 TO n
b$ = MID$(a$, j, 1)
SELECT CASE b$
CASE IS = "I"
br = br + 1
I = I + 1
CASE IS = "V"
br = br + 1
V = V + 1
CASE IS = "X"
br = br + 1
X = X + 1
CASE IS = "L"
br = br + 1
L = L + 1
CASE IS = "C"
br = br + 1
C = C + 1
CASE IS = "D"
br = br + 1
D = D + 1
CASE IS = "M"
br = br + 1
M = M + 1
END SELECT
NEXT j
IF br = n AND I < 4 AND V < 2 AND X < 5 AND L < 2 AND C < 5 AND D < 2 AND M < 5 THEN
PRINT "String sadrzi rimske znamenke.";
ELSE
PRINT "String nije rimski broj.";
END IF
2.4. Napisati program koji će u zadanom stringu pronaći koliko ima parova otvorenih i zatvorenih običnih, uglastih i vitičastih zagrada ‘(‘, ‘)’, ‘[‘, ‘]’, ‘{‘, ‘}’. Sva tri podatka ispisati na ekran.
INPUT "unesi string"; x$
boo = 0
boz = 0
buo = 0
29
buz = 0
bvo = 0
bvz = 0
FOR i = 1 TO LEN(x$)
c$ = MID$(x$, i, 1)
SELECT CASE c$
CASE IS = "("
boo = boo + 1
CASE IS = ")"
boz = boz + 1
CASE IS = "["
buo = buo + 1
CASE IS = "]"
buz = buz + 1
CASE IS = "{"
bvo = bvo + 1
CASE IS = "}"
bvz = bvz + 1
END SELECT
NEXT i
IF boo <= boz THEN
PRINT "obicnih ima"; boo
ELSE
PRINT "obicnih ima"; boz
END IF
IF buo <= buz THEN
PRINT "uglastih ima"; buo
ELSE
PRINT "uglastih ima"; buz
END IF
IF bvo <= bvz THEN
PRINT "viticastih ima"; bvo
ELSE
PRINT "viticastih ima"; bvz
END IF
30
3. ZADACI S NIZOVIMA 3.1. Napisati program koji će koristiti niz v od 50 cijelih brojeva. Učitati 50
cijelih brojeva u niz v. Naći srednju vrijednost tih brojeva i ispisati samo one brojeve, koji su veći od srednje vrijednosti.
DIM v(5)
s = 0
FOR i = 1 TO 5
INPUT "Unesi clan niza"; v(i)
s = s + v(i)
NEXT i
sr! = s / 5
PRINT "Srednja vrijednost niza je:"; sr!
FOR i = 1 TO 5
IF v(i) > sr! THEN PRINT v(i)
NEXT i
3.2. Napisati program koji će koristiti niz x od n elemenata. Naći najmanji i najveći član xmin i xmax niza. Naći i ispisati sve članove niza koji su veći od xmax/2 i manji od xmin*2. Ispis treba imati izgled: Članovi veći od xmax/2 i manji od xmin*2 su: xxxxxx.xx xxxxxx.xx
INPUT "Unesi broj elemenata", n
DIM x(n)
FOR i = 1 TO n
INPUT "Unesi broj", x(i)
NEXT i
max = x(1)
min = x(1)
FOR i = 2 TO n
IF x(i) < min THEN min = x(i)
IF x(i) > max THEN max = x(i)
NEXT i
PRINT "Max = "; max
PRINT "Min = "; min
PRINT "Brojevi veći od max/2 su:"
FOR i = 1 TO n
IF x(i) > max / 2 THEN PRINT x(i)
NEXT i
PRINT "Brojevi manji od min*2 su:"
FOR i = 1 TO n
31
IF x(i) < min * 2 THEN PRINT x(i)
NEXT i
3.3. Napisati program koji će učitati prirodan broj n koji mora biti manji od 500. Ako taj uvjet nije ispunjen ispisati odgovarajuću poruku i ponoviti učitavanje. Učitati n elemenata u niz v1 i n elemenata u niz v2. Zamijeniti redoslijed elemenata u nizu v2 tako da 0. element dođe na n-1 mjesto, 1. na n-2. i t.d. Naći i ispisati skalarni produkt tako dobivenog niza v2 i učitanog niza v1 (skalarni produkt sp je suma produkata odgovarajućih članova niza).
10 PRINT "Unesi broj n:"
INPUT n
IF n > 500 THEN
PRINT "Ne valja unos! Ponovi"
GOTO 10
END IF
FOR i = 0 TO n - 1
PRINT "unesi "; i + 1; ". broj niza v1: "
INPUT v1(i)
PRINT "unesi "; i + 1; ". broj niza v2:"
INPUT v2(i)
NEXT i
FOR i = 0 TO n - 1
PRINT v1(i); " ";
NEXT i
FOR i = 0 TO n - 1
PRINT v2(i); " ";
NEXT i
z = INT(n / 2)
FOR i = 0 TO z - 1
x = n - i - 1
t = v2(i)
v2(i) = v2(x)
v2(x) = t
NEXT i
FOR i = 0 TO n - 1
PRINT v2(i); " ";
NEXT i
FOR i = 0 TO n - 1
32
Sp = Sp + (v1(i) * v2(i))
NEXT i
PRINT "Skalarni produkt je "; Sp
3.4. Medijan je statistički pojam definiran kao "srednji član" niza poredanih podataka. Ako niz ima n članova i n je neparan broj, onda (pod uvjetom da su članovi poredani) medijan je n/2. član (računajući n/2 cjelobrojno; npr. ako je n=17 tada je medijan član poredanog niza s indeksom 8). Ako je n paran, tada je medijan aritmetička sredina n/2-1 i n/2 člana (npr. ako je n=28 tada je medijan aritmetička sredina članova poredanog niza s indeksima13 i 14). Napisati logiku program koji će učitati prirodan broj n, zatim učitati n brojeva u niz v, poredati te brojeve po rastućem redoslijedu i naći i ispisati medijan.
10 INPUT "Unesi broj elemenata niza"; n
IF (n = 0) THEN
PRINT "Greska!"
GOTO 10
END IF
DIM v(n)
PRINT "Unesi elemente niza"
FOR i = 1 TO n
INPUT v(i)
NEXT i
FOR i = 1 TO n - 1
FOR j = i + 1 TO n
IF (v(i) > v(j)) THEN
t = v(i)
v(i) = v(j)
v(j) = t
END IF
NEXT j
NEXT i
IF (n MOD 2 <> 0) THEN
a = INT(n / 2)
M = v(a)
ELSE
b = n / 2
c = b - 1
M = INT((b + c) / 2)
END IF
PRINT "Medijan je "; M
33
3.5. Napisati program koji će učitavati jedan za drugim niz brojeva. Naći i ispisati aritmetičku sredinu učitanih brojeva uzimajući u obzir samo one brojeve koji su veći ili jednaki 2 i manji ili jednaki pet.
z = 0
PRINT "unesi broj źlanova niza"
INPUT a
DIM x(a)
FOR i = 1 TO a
INPUT x(i)
NEXT i
FOR i = 1 TO a
IF x(i) >= 2 AND x(i) <= 5 THEN
s = s + x(i)
br = br + 1
END IF
NEXT i
r = s / br
PRINT r
3.6. Napisati program koji će pomoću Rnd funkcije postaviti 100 slučajnih brojeva u niz slbr. Brojevi trebaju biti u intervalu od 1 do 200. Naći i ispisati sve one brojeve postavljene u niz slbr koji su se pojavili dva ili više puta.
RANDOMIZE TIMER
DIM slbr(100)
FOR i = 1 TO 100
slbr(i) = RND(1) * (200) + 1
PRINT slbr(i)
NEXT i
PRINT "brojevi koji se ponavljaju su"
FOR i = 1 TO 100
FOR j = i + 1 TO 100
IF slbr(i) = slbr(j) THEN
PRINT slbr(i)
GOTO 10
END IF
NEXT j
10 NEXT i
3.7. Napisati program koji će učitati prirodan broj n koji mora biti manji od 50. Ako taj uvjet nije ispunjen, ispisati odgovarajuću poruku i ponoviti učitavanje. Učitati n brojeva u niz b1 i generirati n slučajnih brojeva u
34
intervalu 1 do 2*n i te brojeve staviti u niz b2. Naći najveći broj u jednom i drugom nizu i zamijeniti njihova mjesta.
10 INPUT "Unesi jedan broj"; n
IF n >= 50 THEN
PRINT "Unesi broj manji od 50"
GOTO 10
END IF
DIM b1(n)
DIM b2(n)
FOR i = 1 TO n
INPUT "Uźitaj broj iz niza"; b1(i)
NEXT i
FOR i = 1 TO n
PRINT b1(i); " ";
NEXT i
PRINT "Sluźajni brojevi iz b2:"
FOR i = 1 TO n
RANDOMIZE TIMER
b2(i) = CINT(RND * 2 * n)
NEXT i
FOR i = 1 TO n
PRINT b2(i); " ";
NEXT i
MAX1 = b1(1)
p1 = 1
MAX2 = b2(1)
p2 = 1
FOR i = 1 TO n
IF b1(i) > MAX1 THEN
MAX1 = b1(i)
p1 = i
END IF
IF b2(i) > MAX2 THEN
MAX2 = b2(i)
p2 = i
END IF
NEXT i
t = b1(p1)
35
b1(p1) = b2(p2)
b2(p2) = t
PRINT "b1 nakon zamjene:"
FOR i = 1 TO n
PRINT b1(i); " ";
NEXT i
PRINT "b2 nakon zamjene:"
FOR i = 1 TO n
PRINT b2(i); " ";
NEXT i
Napisati program koji će učitavati niz od n cijelih brojeva. Naći i ispisati broj n koji pokazuje koliko je među učitanim brojevima bilo onih, kod kojih je zadnja znamenka jednaka 3.
Napisati program koji će učitati broj n. Taj broj mora biti veći od nule i manji od 10. Ako taj uvjet nije ispunjen, ispisati odgovarajuću poruku i ponoviti učitavanje. Naći i ispisati srednju vrijednost svih parnih brojeva u nizu, ali ne uzimajući u obzir one parne brojeve, koji su djeljivi sa 13.
Napisati program koji će koristiti niz y od 50 elemenata. Učitati 50 realnih brojeva. Ako je učitani broj negativan, staviti ga u niz s promijenjenim predznakom. Ako je učitani broj jednak nuli ne staviti ga u niz. Naći geometrijsku sredinu svih članova niza. Ispisati one članove niza koji su manji od geometrijske sredine.
Napisati program koji će koristiti tri niza: SIFRA, CIJENA i KOLIC svaki od po 300 elemenata. Učitati podatke u sva tri niza. Podaci u nizu SIFRA su šifre materijala na nekom skladištu. Podaci u nizu CIJENA predstavljaju cijenu pojedinog materijala a podaci u nizu KOLIC predstavljaju količinu materijala na skladištu. Naći i ispisati ukupnu vrijednost zaliha materijala na skladištu. Ispisati šifre onih materijala, čije vrijednosti zaliha su veće od 1/10 ukupne vrijednosti zaliha. Formate ispisa izabrati proizvoljno.
Napisati program koji će najprije učitati cijeli broj M. Taj broj mora biti veći od 0 i manji od 10. Ako taj uvjet nije zadovoljen, ispisati poruku "POGREŠNO ZADANA ZNAMENKA" i ponoviti učitavanje. Program dalje treba učitavati niz od n brojeva. Program treba naći i ispisati broj m koji pokazuje koliko je među učitanim brojevima bilo onih kod kojih je prva znamenka jednaka M.
Napisati program koji će koristiti niz v od 50 cijelih brojeva. Učitati 50 cijelih brojeva u niz v. Naći srednju vrijednost tih brojeva i ispisati samo one brojeve, koji su veći od srednje vrijednosti.
5. ZADACI S POTPROGRAMIMA 5.1. Napisati cjelobrojnu funkciju koja kao parametre ima 3 cijela broja a, b i c.
Funkcija treba vratiti sumu od dva najveća broja od ta 3. Znači, najmanji od njih treba izostaviti u toj sumi.
DECLARE FUNCTION provjera! (a!, b!, c!)
REM unos
PRINT "Unesi tri broja a,b,c :"
INPUT a, b, c
REM provjera
PRINT "Suma je :"; provjera(a, b, c)
END
FUNCTION provjera (a, b, c)
IF a < b AND a < c THEN
min = a
ELSEIF b < a AND b < c THEN
min = b
ELSE
min = c
END IF
provjera = a + b + c - min
END FUNCTION
47
5.2. Napisati cjelobrojnu funkciju prost(x) koja poprima vrijednost -1 ako x nije prirodan broj (x je realna varijabla!), 0 ako je x prirodan ali nije prost broj i 1 ako je x prost broj.
DECLARE FUNCTION prost (x)
INPUT "Unesi broj"; x
IF prost(x) = 1 THEN PRINT "Broj"; x; " je prost."
IF prost(x) = 0 THEN PRINT "Broj"; x; "je prirodan, ali ne i prost broj."
IF prost(x) = -1 THEN PRINT x; "nije prirodan broj."
FUNCTION prost (x)
k = x
IF (x > 0) AND (x - INT(x) = 0) THEN
REM Provjera je li x prost broj:
FOR i = 2 TO INT(x / 2)
IF (k MOD i = 0) THEN
k = k / i
br = br + 1
END IF
NEXT i
REM Ako x nije, f-ja vraca vrijednost 0.
IF br > 0 THEN prost = 0
REM Ako je, f-ja vraca vrijednost 1.
IF br = 0 THEN prost = 1
REM Ako x nije prirodan, f-ja vraca vrijednost -1.
ELSE
prost = -1
END IF
END FUNCTION
5.3. Napisati realnu funkciju Razlika koja kao parametre ima dva broja a i b. Funkcija treba izračunati i vratiti razliku između ta dva broja (a – b).
DECLARE FUNCTION Razlika! (br1!, br2!)
INPUT "unesite dva broja: "; br1, br2
PRINT Razlika(br1, br2)
END
FUNCTION Razlika (br1, br2)
Razlika = br1 - br2
END FUNCTION
48
5.4. Napisati realnu funkciju koja kao parametre ima 4 realna broja x1,y1,x2,y2 koji predstavljaju koordinate dviju točaka u ravnini. Funkcija treba vratiti vrijednost udaljenosti ovih dviju točaka.
CLS
PRINT " Unesi parametre tocaka A i B"
PRINT " Unesi parametre x1 i y1 za tocku A"
INPUT "unesi parametar x1"; x1
INPUT "unesi parmaetar y1"; y1
PRINT " Unesi parametre x2 i y2 za tocku B"
INPUT "unesi parmaetar x2"; x2
INPUT "unesi parmaetar y2"; y2
PRINT "Udaljenost izmedu tocke A i B je"; d(x1,x2,y1,y2)
END
FUNCTION d (x1,x2,y1,y2)
A = (x2 - x1) * (x2 - x1)
B = (y2 - y1) * (y2 - y1)
d = SQR(A + B)
END FUNCTION
Napisati cjelobrojnu funkciju koja ima parametre realne brojeve a,b,c,d koji su koeficijenti pravaca y=ax+b i y=cx+d. Funkcija treba vratiti 1 ako se ti pravci sijeku, a vratiti 0 ako su paralelni.
Napisati realnu funkciju vodx kojoj se predaju parametri V,m i x. V je realni niz s m popunjenih elemenata a x je realan broj. Funkcija vodx treba vratiti vrijednost najmanjeg broja u nizu V koji je veći od x. Ako u nizu V ne postoji broj veći od x funkcija vodx treba vratiti vrijednost -1000.
Napisati cjelobrojnu funkciju vsr kojoj se predaju parametri A i m. A je realni niz od m članova. Funkcija treba naći broj članova niza A koji su veći od srednje vrijednost svih članova tog niza.
Napisati glavni program i proceduru SORT. Glavni program učitava realne brojeve iz datoteke čije ime se zadaje kao parametar pri pozivu programa. Brojevi iz datoteke učitavaju se u realni niz v1. Broj popunjenih elemenata u nizu v1 treba staviti u varijablu m. Proceduri SORT predaju se parametri v1, v2 i m. v2 je niz istog tipa i oblika kao v1. Procedura SORT treba poredati po rastućem redoslijedu podatke iz niza v1 i staviti ih u v2. U glavnom programu ispisati niz v2 u datoteku čije ime se zadaje kao drugi parametar .
Napisati realnu funkciju koja kao parametre ima 4 realna broja a,b,c,d. Oni predstavljaju 2 kompleksna broja a+bi, c+di. Funkcija treba vratiti zbroj modula ova dva kompleksna broja.