42
QBASIC zadaci s rješenjima za 7. i 8. razred Darko Krznar PROFIL

181351199 Dodatak Prirucniku Qbasic PDF PDF

Embed Size (px)

Citation preview

Page 1: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASICzadaci s rješenjima za 7. i 8. razred

Darko Krznar

PROFIL

7-8 Skripta informatika.indd 1 3.2.2009 12:59:12

Page 2: 181351199 Dodatak Prirucniku Qbasic PDF PDF

IzdavačProfil International, Zagreb, Kaptol 25

Predsjednik Izdavačkog savjetaDaniel Žderić

Za izdavačaAndrija Pećarić

Direktorica izdavaštva i razvojaIvančica Knapić

Glavna urednicaMarija Odak

Urednica Silvana Svetličić

LektoricaVesna Čondić

NaslovnicaStudio 2M

PrijelomGoran Vukašinović

TisakProfil

7-8 Skripta informatika.indd 2 3.2.2009 12:59:12

Page 3: 181351199 Dodatak Prirucniku Qbasic PDF PDF

SADRŽAJ

UVOD ..................................................................................................4

PETLJE ................................................................................................5

RAD SA STRINGOVIMA ......................................................................... 11

JEDNODIMENZIONALNI NIZOVI .............................................................. 23

DVODIMENZIONALNI NIZOVI ................................................................. 33

POTPROGRAMI .................................................................................... 40

7-8 Skripta informatika.indd 3 3.2.2009 12:59:12

Page 4: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred4

UVODPoštovane kolegice i kolege! Qbasic - zadatke s rješenjima podjednako smo namijenili učenicima sedmih i osmih razreda, i vama - njihovim učiteljicama i učiteljima informatike. Zadaci koji prate nastavni plan i program, učenicima će olakšati usvajanje gradiva iz programiranja u Qbasicu. Dodatni sadržaji (nizovi, rad sa stringovima i sl.) korisna su pomoć prilikom pripremanja učenika za natjecanja iz informatike. Za sve smo zadatke pripremili i rješenja pa ćete lako provjeriti točnost i uspješnost rada svojih učenika. Trudili smo se i ovim dodatnim materijalom odgovoriti na potrebe kolegica i kolega čije ideje, potekle iz svakodnevnoga rada u razredu, osluškujemo i pretvaramo u uspješnu suradnju koja će se, vjerujemo, nastaviti i u godinama pred nama.

Silvana Svetličić, prof.UREDNICA INFORMATIKE

7-8 Skripta informatika.indd 4 3.2.2009 12:59:12

Page 5: 181351199 Dodatak Prirucniku Qbasic PDF PDF

5PETLJE

PETLJEOsim FOR-NEXT petljom, koja se naziva i petlja bez logičkog uvjeta, dio programa u Qbasicu možemo višekratno ponoviti uz pomoć neke petlje s logičkim uvjetom. Takve petlje rabimo ako unaprijed ne znamo koliko ponavljanja dijela programa želimo provesti. Postoje dvije takve petlje: WHILE i DO…LOOP.

WHILE PETLJA

WHILE

WEND

naredbe

uvjet istinit WHILE petlja samo na početku provedbe provjerava

zadani uvjet (logički izraz). Petlja se provodi sve dok je uvjet istinit. Petlja završava ključnom riječi WEND (WHILE END).

DO…LOOP

Ova petlja s logičkim uvjetom može imati dvije inačice: DO…LOOP WHILE i DO…LOOP UNTIL.

DO

LOOP WHILE

naredbe

uvjet istinit

Petlja se provodi sve dok je logički uvjet istinit. Uvjet

se ispituje na kraju petlje.

uvjet istinit

DO WHILE

LOOP

naredbe

Petlja se provodi sve dok je logički uvjet istinit. Uvjet

se ispituje na početku petlje.

7-8 Skripta informatika.indd 5 3.2.2009 12:59:13

Page 6: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred6

DO

LOOP UNTIL

naredbe

uvjet lažan

Petlja se provodi sve dok je logički uvjet lažan. Uvjet se ispituje na kraju petlje.

DO UNTIL

LOOP

naredbe

uvjet lažan

Petlja se provodi sve dok je logički uvjet lažan. Uvjet se ispituje na početku petlje.

ZADATAK 1.

Izradi program kojim se učitavaju brojevi sve dok se ne unese 0. Program treba izračunati i ispisati zbroj i srednju vrijednost unesenih brojeva.

CLSDO INPUT”Unesi broj:”,i x=x+1 br=br+iLOOP UNTIL i=0PRINT”Srednja vrijednost:”;br/(x-1)END

U programu se rabi DO…LOOP UNTIL petlja koja ispituje uvjet na kraju. Program se izvodi sve dok je uvjet lažan. Program se mogao izraditi i DO…LOOP WHILE petljom, ali bi tada uvjet trebao biti LOOP WHILE i<>0.

7-8 Skripta informatika.indd 6 3.2.2009 12:59:13

Page 7: 181351199 Dodatak Prirucniku Qbasic PDF PDF

7PETLJE

ZADATAK 2.

Izradi program kojim se učitava prirodni broj manji od 999999 i ispisuju njegove znamenke te se računa njihov zbroj.

CLSINPUT”Unesi broj:”,n&DO WHILE n&<>0 z=n& MOD 10 PRINT z zbr=zbr+z n&=INT(n&/10)LOOPPRINT zbrEND

Osnovni je problem u tom programu matematički odrediti svaku znamenku iz broja. Budući da se ne zna unaprijed broj znamenaka u broju, rabi se DO WHILE petlja koja uvjet ispituje na početku tako da se u slučaju unosa broja 0 petlja nijednom ne izvodi. Znamenke u broju uzimaju se na način da se uzme zadnja znamenka kao ostatak kod dijeljenja unesenog broja s 10. Nakon toga u liniji n&=INT(n&/10) početnom broju se uklanja zadnja znamenka te se postupak ponavlja sve dok ne dođemo do prve znamenke. Varijabla n definirana je kao LONG INTEGER varijabla (n&) jer se u uvjetima zadatka traži unos broja manjeg od 999999.

Primjer:Unesi broj: 142671. LOOP znamenka 7, broj 14262. LOOP znamenka 6, broj 1423. LOOP znamenka 2, broj 144. LOOP znamenka 4, broj 15. LOOP znamenka 1, broj 0

Tip varijable Raspon brojeva Oznaka

INTEGER -32768 do 32767 (16 bitova) %

LONG INTEGER -2.147.483.648 do 2.147.483.647 &

SINGLE 32-bitni broj s pomičnim zarezom !

DOUBLE 64-bitni broj s pomičnim zarezom #

ZADATAK 3.

Izradi program kojim se učitava prirodni broj i ispisuju svi prosti brojevi manji od njega.

CLSINPUT”Unesi broj:”,nx=2ind=0DO n=n-1

7-8 Skripta informatika.indd 7 3.2.2009 12:59:13

Page 8: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred8

DO IF n MOD x=0 THEN ind=1 x=x+1 LOOP WHILE ind=0 AND x<n/2 IF ind=0 THEN PRINT n x=2 ind=0LOOP UNTIL n=1END

U ovom programu rabe se dvije ugniježđene DO…LOOP petlje. Velika DO…LOOP UNTIL petlja vrti se sve dok uneseni broj ne dođe do 1. U drugoj se petlji ispituje djeljivost broja brojevima 2,3,4… U slučaju da je broj djeljiv s nekim od brojeva u varijablu ind stavlja se vrijednost 1 što znači da će petlja završiti. Petlja se vrti sve dok je u varijabli ind vrijednost 0 i dok je varijabla x manja od kvocijenta broja n s 2. Kada manja DO…LOOP petlja završi, varijable x i ind stavljaju se u početne vrijednosti te se ponovno vrti velika DO…LOOP petlja.

ZADATAK 4.

Izradi program kojim se provjerava znanje tablice množenja. Računalo treba zamisliti dva jednoznamenkasta broja i zadati zadatak nakon čega se upisuje rješenje. Program treba brojiti točne i netočne odgovore, a nakon svakog odgovora program treba pitati želimo li nastaviti. Ako se odgovori sa N, program se prekida i ispisuje se statistika broj točnih i netočnih odgovora. CLSRANDOMIZE TIMERDO a=INT(RND*10) b=INT(RND*10) PRINT a;“*“;b;“=“; INPUT r IF r=a*b THEN t=t+1 ELSE n=n+1 INPUT“Novi zadatak? (D/N):“,p$LOOP WHILE p$<>“N“PRINT“Točnih odgovora:“;tPRINT“Netočnih odgovora:“n

U programu se rabi naredba RND za generiranje slučajnih brojeva. Zadatci se ponavljaju u DO...LOOP petlji koja se vrti sve dok je varijabla p$ različita od „N“. Točna rješenja se broje u varijabli t, a netočna u varijabli n. Kada se u varijablu p$ unese „N“, petlja završava i ispisuje se broj točnih i netočnih odgovora.

ZADATAK 5.

Izradi program kojim se unosi stranica kvadrata. Program treba ispisati niz kvadrata u različitim bojama u jednom redu tako da je svaki kvadrat za n manji od prethodnoga. Program će nacrtati samo cijele kvadrate (posljednji kvadrat ne smije biti djelomično nacrtan), odnosno crtat će samo dok je stranica kvadrata veća od 20.

7-8 Skripta informatika.indd 8 3.2.2009 12:59:13

Page 9: 181351199 Dodatak Prirucniku Qbasic PDF PDF

9PETLJE

CLSINPUT“Unesi stranicu najvećeg kvadrata:“,aINPUT“Unesi za koliko se smanjuje stranica:“,nSCREEN 12x1=0y1=0boja=1DO LINE(x1,y1) - (x1+a,y1+a),boja,BF x1=x1+a y1=y1+n a=a-n boja=boja+1 IF boja=16 THEN boja=1 IF 640-x1<a THEN END LOOP WHILE a>=20

Varijable x1 i y1 koordinate su gornjega lijevog vrha kvadrata. Nakon crtanja svakoga kvadrata one se moraju povećati, i to x1 za veličinu stranice kvadrata, a y1 za vrijednost za koju se smanjuje stranica. Petlja se vrti sve dok je stranica kvadrata veća ili jednaka 20, odnosno sve dok ima mjesta za crtanje cijeloga kvadrata.

ZADATAK 6.

Ivona živi u deseterokatnici i svakodnevno se služi liftom. Odlučila je izraditi program koji će računati na kojemu je katu lift preopterećen, a na kojemu se ispraznio. Lift kreće iz prizemlja i u njemu se na početku nalazi određeni broj ljudi. Lift se pomiče i na svakom katu netko može ući ili izići. Lift je preopterećen ako je u njemu više od šestero ljudi, a kada nema nikoga, ispražnjen je. Izradi program kojemu su ulazni podatci početni broj ljudi, zatim broj kata, broj ljudi koji su ušli u lift i broj ljudi koji su izišli iz lifta na određenom katu. Program će stati ili kad lift postane preopterećen ili kada u liftu nema nikoga.

Ulazni podatci:- početni broj ljudi u liftu- broj kata (0<k<=10)- broj ljudi koji su išli u lift- broj ljudi koji su izišli iz lifta.

Izlazni podatci:- broj kata na kojemu je lift preopterećen i broj ljudi u liftu- broj kata na kojemu se lift ispraznio.

7-8 Skripta informatika.indd 9 3.2.2009 12:59:14

Page 10: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred10

CLSINPUT “Broj ljudi u liftu:”, xDO INPUT “Unesi kat:”, k INPUT “Ušlo u lift:”, u INPUT “Izišlo iz lifta:”, i x = x + u - i IF x > 6 THEN PRINT “Lift je preopterećen i stao je na “; k; “.katu” PRINT “Broj ljudi u liftu:”; x END END IFLOOP WHILE x <> 0PRINT “Lift je prazan na “; k; “.katu”

7-8 Skripta informatika.indd 10 3.2.2009 12:59:14

Page 11: 181351199 Dodatak Prirucniku Qbasic PDF PDF

11RAD SA STRINGOVIMA

RAD SA STRINGOVIMAString varijable znakovne su varijable služe za pohranu niza znakova. String varijabla u svojem nazivu ima znak $. Najbitnije naredbe za rad sa stringovima jesu:

LEN daje broj znakova u stringu LEFT$(a$,n) s lijeve strane u stringu ispisuje n znakovaRIGHT$(a$,n) s desne strane u stringu ispisuje n znakovaMID$(a$,p,n) s mjesta p u stringu ispisuje n znakova.

ZADATAK 1.

Izradi program kojim se unosi rečenica, a program ispisuje koliko riječi ima u rečenici.

CLSINPUT”Unesi rečenicu:”,a$FOR x=1 TO LEN(a$) IF MID$(a$,x,1)=“ “ THEN br=br+1NEXT xPRINT”Rečenica ima “;br+1;” riječi.”

Broj riječi u rečenici može se ustanoviti na osnovi broja razmaka, broj riječi je za jedan veći od broja razmaka. Unutar FOR-NEXT petlje naredba MID$ uzima znak po znak u rečenici i provjerava je li znak razmak. Kada se petlja izvede, varijabla br ima ukupan broj razmaka. Broj riječi je br uvećan za 1.

ZADATAK 2.

Izradi program kojim se unosi riječ i ispisuje na sredini zaslona u četiri smjera.

CLSINPUT“Unesi riječ:“,a$LOCATE 12,40PRINT a$

7-8 Skripta informatika.indd 11 3.2.2009 12:59:17

Page 12: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred12

‘Sljedeća FOR-NEXT petlja ispisuje riječ vertikalno prema goreFOR x=1 TO LEN(a$) LOCATE 13-x,40 PRINT MID$(a$,x,1)NEXT x

‘Sljedeća FOR-NEXT petlja ispisuje riječ horizontalno ulijevoFOR x=1 TO LEN(a$) LOCATE 12,41-x PRINT MID$(a$,x,1)NEXT x

‘Sljedeća FOR-NEXT petlja ispisuje riječ vertikalno doljeFOR x=1 TO LEN(a$) LOCATE 11+x,40 PRINT MID$(a$,x,1)NEXT x

ZADATAK 3.

Izradi program kojim će se u rečenici određeni znak zamijeniti nekim drugim. Potrebno je unijeti rečenicu, znak koji se mijenja i znak kojim ćemo zamijeniti postojeći znak. Potrebno je ispisati novu rečenicu te koliko je zamjena napravljeno.

Primjer:Rečenica: Danas je lijep i sunčan dan.Znak koji mijenjamo: aZnak kojim ćemo ga zamijeniti: uREZULTAT: Dunus je lijep i sunčun dun.

CLSINPUT“Unesi rečenicu:“,a$INPUT“Unesi znak koji mijenjamo:“,b$INPUT“Unesi znak kojim ćemo mijenjati:“,c$FOR x=1 TO LEN(a$) IF MID$(a$,x,1) = b$ THEN n$=n$+c$ br=br+1 ELSE n$=n$+MID$(a$,x,1) END IFNEXT xPRINT n$PRINT“Broj zamjena:“;br

Nova se rečenica formira u varijabli n$. Ako pronađemo znak koji želimo mijenjati, umjesto njega stavljamo znak u varijabli c$.

7-8 Skripta informatika.indd 12 3.2.2009 12:59:18

Page 13: 181351199 Dodatak Prirucniku Qbasic PDF PDF

13RAD SA STRINGOVIMA

ZADATAK 4.

Napiši program kojim se unosi riječ i ispisuje na sljedeći način:Unos: BASICIspis:BBABASBASIBASICBASIBASBAB

CLSINPUT“Unesi riječ:“,a$FOR x=1 TO LEN(a$) PRINT MID$(a$,1,x)NEXT xFOR x=LEN(a$) -1 TO 1 STEP -1 PRINT MID$(a$,1,x)NEXT x

Prva petlja ispisuje prvo slovo riječi, drugo slovo riječi…, a druga petlja ispisuje obratno.

ZADATAK 5.

Napiši program kojim se unosi ime i prezime, a ispisuju inicijali.Unos: Mala VelikaIspis: M.V.

CLSINPUT“Unesi ime i prezime:“,a$PRINT LEFT$(a$,1);“.“;FOR x=2 TO LEN(a$) IF MID$(a$,x,1) = “ “ THEN p=xNEXT xPRINT MID$(a$,p+1,1);“.“

U FOR-NEXT petlji traži se praznina u unesenom stringu. Položaj praznine pamti se u varijabli p. Nakon toga ispisuje se znak koji se nalazi iza praznine jer je to prvo slovo prezimena.

7-8 Skripta informatika.indd 13 3.2.2009 12:59:18

Page 14: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred14

OSTALE STRING NAREDBE

ASC pretvara znak u njegov kod.Svaki znak potreban kod pisane komunikacije kodiran je za potrebe računala ASCII kodom (npr. “A” ima kod 65, a malo “a” 97).PRINT ASC(“A”) Rezultat: 65

CHR$ - pretvara kod u odgovarajući znak.PRINT CHR$(65) Rezultat: “A”

UCASE$ - sva slova u nizu pretvara u velika.

LCASE$ - sva slova u nizu pretvara u mala.

VAL - pretvara niz znakova (string) u broj.a=VAL(a$)

STR$ pretvara broj u string.a$=STR$(a)Kod pretvaranja broja u string, funkcija STR$ dodaje na početku jedno prazno mjesto. To prazno mjesto može se ukloniti funkcijom LTRIM$ koja s lijeve strane stringa briše sve praznine.

INKEY$ - vraća znak unesen s tipkovnice.

ZADATAK 6.

Izradi program kojim se unosi rečenica. Program treba prebrojiti koliko je u rečenici malih, a koliko velikih slova.

CLSINPUT”Unesite riječ:”,a$FOR x=1 TO LEN(a$) b$=MID$(a$,x,1) IF ASC(b$)<97 THEN v=v+1 ELSE m=m+1NEXT xPRINT “Velikih slova:“;vPRINT “Malih slova:“;m

ZADATAK 7.

Izradi program kojim će se unijeti rečenica i sva mala slova u rečenici zamijeniti velikima, a velika slova malima.

CLSINPUT”Unesi rečenicu:”,a$FOR x=1 TO LEN(a$) b$=mid$(a$,x,1)

7-8 Skripta informatika.indd 14 3.2.2009 12:59:18

Page 15: 181351199 Dodatak Prirucniku Qbasic PDF PDF

15RAD SA STRINGOVIMA

IF ASC(b$)<97 THEN PRINT LCASE$(b$); ELSE PRINT UCASE$(b$); END IFNEXT x

ZADATAK 8.

Unesi rečenicu i ispiši ju tako da se svaka riječ napiše u novi redak.

CLSINPUT“Unesi rečenicu:“,a$FOR x=1 TO LEN(a$) b$=MID$(a$,x,1) IF b$=“ “ THEN PRINT ELSE PRINT b$; END IFNEXT x

ZADATAK 9.

Izradi program kojim se unosi matematički izraz u kojemu se nalaze dva broja i znak za aritmetičku operaciju. Oba broja su manja od 100. Program treba ispisati rezultat tražene računske operacije između tih dvaju brojeva.Unos: 32+7Izlaz: 39

CLSINPUT“Unesi matematički izraz:“,a$FOR x=1 TO LEN(a$) b$=MID$(a$,x,1) IF b$=“+“ OR b$=“-” OR b$=“*“ OR b$=“/“ THEN p=x o$=b$ END IFNEXT xb1=VAL(LEFT$(a$,p-1))b2=VAL(RIGHT$(a$,LEN(a$)-p))IF o$=“+“ THEN PRINT “Zbroj je:“,b1+b2IF o$=“-“ THEN PRINT “Razlika je:“,b1-b2IF o$=“*“ THEN PRINT “Umnožak je:“,b1* b2IF o$=“/“ THEN PRINT “Kvocijent je:“,b1/ b2END

U FOR-NEXT petlji traži se pozicija aritmetičkog operatora te se pamti u varijabli p. Istodobno se u varijabli o$ pamti aritmetički operator. Na osnovi pozicije aritmetičkog operatora u izrazu uzima se prvi (b1) i drugi (b2) broj.

7-8 Skripta informatika.indd 15 3.2.2009 12:59:19

Page 16: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred16

ZADATAK 10.

Izradi program koji će za uneseni troznamenkasti broj odrediti je li mu zbroj prve i zadnje znamenke jednak srednjoj. Ako jest, treba ispisati DA, a ako nije, treba ispisati NE i prvi veći troznamenkasti broj kojemu je zbroj prve i zadnje znamenke jednak drugoj.

CLSINPUT“Unesi troznamenkasti broj:“,a$broj=VAL(a$)p=VAL(LEFT$(a$,1))s=VAL(MID$(a$,2,1))z=VAL(RIGHT$(a$,1))IF p+z=s THEN PRINT “DA“ ENDELSE PRINT“NE“ FOR x=broj+1 TO 999 z=x MOD 10 i=INT(x/10) s=i MOD 10 p=INT(i/10) IF p+z=s THEN PRINT x END END IF NEXT xEND IFPRINT“Takav broj ne postoji“END

Broj se unosi kao string te se izdvoje znamenke i provjeri uvjet iz zadatka. Ako uvjet nije istinit u FOR-NEXT petlji, traži se prvi veći broj koji ima zadovoljen traženi uvjet. U petlji se brojevi ne pretvaraju u stringove, već se rabi matematički algoritam za izdvajanje znamenaka u broju traženjem ostataka kod dijeljenja broja s 10. Nakon što se izdvoji zadnja znamenka, ona se uklanja i postupak se nastavlja.

ZADATAK 11.

Izradi program kojim se unosi jedan troznamenkasti broj i ispisuje se zbroj znamenaka u broju. Program potom treba ispisati prvi manji troznamenkasti broj s istim zbrojem znamenaka.

CLSINPUT“Unesi troznamenkasti broj:“,a$broj=VAL(a$)p=VAL(LEFT$(a$,1))s=VAL(MID$(a$,2,1))z=VAL(RIGHT$(a$,1))zbr=p+s+z

7-8 Skripta informatika.indd 16 3.2.2009 12:59:19

Page 17: 181351199 Dodatak Prirucniku Qbasic PDF PDF

17RAD SA STRINGOVIMA

PRINT zbrFOR x=broj-1 TO 100 STEP -1 z=x MOD 10 i=INT(x/10) s=i MOD 10 p=INT(i/10) IF p+s+z=zbr THEN PRINT x END END IFNEXT xPRINT“Takav broj ne postoji“END

Program je vrlo sličan prethodnom zadatku.

ZADATAK 12.

Napiši program koji na sredini zaslona ispisuje slovo M. Slovo M je potrebno pomicati po zaslonu s pomoću W-gore, A-lijevo, S-dolje, D-desno. Program se prekida pritiskom na tipku ESC.

CLSX=12Y=40LOCATE x,yPRINT“M“DO c$=INKEY$ ‘pomak slova prema goreIF c$=CHR$(119) THEN x=x-1 IF x=0 THEN x=24CLS LOCATE x,y PRINT“M“END IF‘pomak slova prema doljeIF c$=CHR$(115) THEN x=x+1 IF x=25 THEN x=1CLS LOCATE x,y PRINT“M“END IF‘pomak slova ulijevoIF c$=CHR$(97) THEN y=y-1 IF y=0 THEN y=79CLS LOCATE x,y

7-8 Skripta informatika.indd 17 3.2.2009 12:59:19

Page 18: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred18

PRINT“M“END IF‘pomak slova udesno IF c$=CHR$(100) THEN y=y+1 IF y=80 THEN y=1CLS LOCATE x,y PRINT“M“END IFLOOP UNTIL c$=CHR$(27)

ZADATAK 13.

Potrebno je unijeti četveroznamenkasti broj. Broj je potrebno promijeniti tako da se parnim znamenkama broja doda jedan, a neparnima oduzme jedan. Ispisati zbroj znamenaka novoga broja.

CLSINPUT“Unesi četveroznamenkasti broj:“,a$z1=VAL(LEFT$(a$,1))z2=VAL(MID$(a$,2,1))z3=VAL(MID$(a$,3,1))z4=VAL(RIGHT$(a$,1))IF z1 MOD 2=0 THEN z1=z1+1 ELSE z1=z1-1IF z2 MOD 2=0 THEN z2=z2+1 ELSE z2=z2-1IF z3 MOD 2=0 THEN z3=z3+1 ELSE z3=z3-1IF z4 MOD 2=0 THEN z4=z4+1 ELSE z4=z4-1PRINT z1;z2;z3;z4

ZADATAK 14.

Izradi program kojim se unesena riječ ispisuje na način da se prvi slog u riječi stavi na kraj. Prvi slog u riječi završava prvim samoglasnikom. Ako je na prvome mjestu samoglasnik, tada se samo prvo slovo prebacuje na kraj riječi.

Unos: BASIC Unos: AEROBIKIzlaz: SICBA Izlaz: EROBIKACLSINPUT “Unesi riječ:”, a$p$ = LEFT$(a$, 1)SELECT CASE p$ CASE “A”, “E”, “I”, “O”, “U” GOTO 1 CASE ELSE FOR x = 2 TO LEN(a$) b$ = MID$(a$, x, 1) IF b$ = “A” OR b$ = “E” OR b$ = “I” OR b$ = “O” OR b$ = “U” THEN p$ = p$ + b$

7-8 Skripta informatika.indd 18 3.2.2009 12:59:19

Page 19: 181351199 Dodatak Prirucniku Qbasic PDF PDF

19RAD SA STRINGOVIMA

GOTO 1 ELSE p$ = p$ + b$ END IF NEXT xEND SELECT1 PRINT RIGHT$(a$, LEN(a$) - LEN(p$)); p$

ZADATAK 15.

Izradi program kojim se unosi niz od najviše 10 znamenaka. Umjesto jedne znamenke unesen je znak X. Program treba pronaći koliki mora biti X kako bi zbroj svih znamenaka bio najmanji mogući broj djeljiv s 10.

Ulaz: 276X93 Izlaz: 3CLSINPUT “Unesi niz znamenaka:”, niz$FOR x = 1 TO LEN(niz$) IF MID$(niz$, x, 1) <> “X” THEN zbr = zbr + VAL(MID$(niz$, x, 1))NEXT xFOR x = zbr TO 100 IF x MOD 10 = 0 THEN PRINT x - zbr END END IFNEXT x

U programu se prvo zbroje sve vidljive znamenke. Nakon toga treba pronaći prvi veći broj od toga zbroja koji je djeljiv s 10. To se radi u FOR-NEXT petlji koja se vrti od zbroja do 100. Kada se pronađe prvi broj koji je djeljiv s 10, ispisuje se razlika toga broja i ukupnog zbroja što nam daje traženu znamenku X.

ZADATAK 16.

Izradi program kojim se unose dva troznamenkasta broja a i b. Program treba ispisati sve brojeve između x i y koji se slijeva i zdesna jednako čitaju.

CLSINPUT “Unesi 1.broj:”, aINPUT “Unesi 2.broj:”, bFOR x = a TO b x$ = LTRIM$(STR$(x)) FOR y = LEN(x$) TO 1 STEP -1 n$ = n$ + MID$(x$, y, 1) NEXT y IF x$ = n$ THEN PRINT x$ n$ = “”NEXT x

7-8 Skripta informatika.indd 19 3.2.2009 12:59:20

Page 20: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred20

ZADATAK 17.

Izradi program kojim se unosi niz znamenaka. Program treba ispisati koje se znamenke pojavljuju u nizu barem jedanput.Ulaz: 1213386Izlaz: 12386

CLSINPUT “Unesi niz znamenaka:”, a$PRINT LEFT$(a$, 1);x = 1DO x = x + 1 FOR y = x - 1 TO 1 STEP -1 IF MID$(a$, x, 1) = MID$(a$, y, 1) THEN ind = 1 NEXT y 1 IF ind = 0 THEN PRINT MID$(a$, x, 1); ind = 0LOOP WHILE x <= LEN(a$)

Budući da se svaka znamenka koja se pojavljuje više puta mora ispisati samo jedanput, kod uzimanja svake znamenke treba provjeriti je li se ona već pojavila. U DO LOOP petlji uzima se nova znamenka, a u FOR-NEXT petlji ispituje se je li se ta znamenke već pojavila u nizu. Ako je vrijednost varijable ind, će bit 1. Po završetku petlje ako je vrijednost varijable ind 0, tada se znamenka ispisuje jer se prethodno nije pojavila u nizu.

ZADATAK 18.

Izradi program kojim se zbrajaju dva velika broja s najviše 50 znamenaka. Brojevi se unose s tipkovnice i ne moraju imati jednak broj znamenaka.

CLSINPUT “Unesi broj:”, a$INPUT “Unesi broj:”, b$

‘provjera da li brojevi imaju jednak broj znamenakaIF LEN(a$) - LEN(b$) > 0 THEN FOR x = 1 TO LEN(a$) - LEN(b$) b$ = “0” + b$ NEXT xEND IFIF LEN(b$) - LEN(a$) > 0 THEN FOR x = 1 TO LEN(a$) - LEN(b$) a$ = “0” + a$ NEXT xEND IF

‘zbrajanjeFOR x = LEN(a$) TO 1 STEP -1 z1 = VAL(MID$(a$, x, 1))

7-8 Skripta informatika.indd 20 3.2.2009 12:59:20

Page 21: 181351199 Dodatak Prirucniku Qbasic PDF PDF

21RAD SA STRINGOVIMA

z2 = VAL(MID$(b$, x, 1)) z = z1 + z2 + o o = 0 IF z < 10 THEN z$ = LTRIM$(STR$(z)) n$ = n$ + z$ ELSE z$ = LTRIM$(STR$(z)) z$ = RIGHT$(z$, 1) n$ = n$ + z$ o = 1 END IF z = 0NEXT x

PRINT

FOR x = LEN(n$) TO 1 STEP -1 PRINT MID$(n$, x, 1);NEXT x

Budući da se zbrajati moraju veliki brojevi, unosimo ih u string varijable. Nakon unosa prvo se vrši provjera imaju li brojevi jednak broj znamenaka. Ako nemaju, broju koji ima manje znamenaka, dodaju se vodeće 0. Potom se u FOR petlji radi samo zbrajanje čime se formira novi broj u varijabli n$. Na kraju se znamenke varijable n$ ispišu u obratnom redoslijedu.

ZADATAK 19.

Izradi program kojim se unose vremena prve i druge vožnje skijaške slalomske utrke. Program treba ispisati ukupno vrijeme. Unos je u obliku ss:ss gdje su prve dvije znamenke sekunde (00-59), a druge dvije znamenke stotinke (00-99). Ispis je u obliku mm:ss:ss (minute:sekunde:stotinke).Ulaz: 43:56 46:22Izlaz: 01:29:78

CLSINPUT “Unesi vrijeme 1.vožnje:”, v1$INPUT “Unesi vrijeme 2.vožnje:”, v2$v1 = VAL(LEFT$(v1$, 2)) * 100 + VAL(RIGHT$(v1$, 2))v2 = VAL(LEFT$(v2$, 2)) * 100 + VAL(RIGHT$(v2$, 2))vu = v1 + v2IF vu > 6000 THEN PRINT “01:”; os = vu - 6000 os$ = LTRIM$(STR$(os)) PRINT LEFT$(os$, 2); “:”; PRINT RIGHT$(os$, 2)ELSE vu$ = LTRIM$(STR$(vu)) PRINT LEFT$(vu$, 2); “:”; PRINT RIGHT$(vu$, 2)

7-8 Skripta informatika.indd 21 3.2.2009 12:59:20

Page 22: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred22

END IFSvako se vrijeme pretvara u stotinke te se potom vremena zbroje čime se dobije ukupno vrijeme u stotinkama. Ukupno vrijeme u stotinkama potom se pretvara u minute, sekunde i stotinke, a zatim ispisuje.

ZADATAK 20.

Izradi program kojim se unosi adresa neke web-stranice. Program treba ispitati ispravnost unesene adrese. Adresa web-stranice ispravna je ako ne sadrži hrvatske znakove č, ć, đ, š, ž i ako ne sadrži razmak. Ako adresa nije pravilna, potrebno je pogrješne znakove zamijeniti odgovarajućima i tako dobivenu adresu ispisati. Znakovi č i ć zamjenjuju se sa c, znak š sa s, znak đ sa d, znak ž sa z, a razmaknica minusom (-).Ulaz: www.večernji list.hrIzlaz: Adresa nije ispravna.www.vecernji-list.hr

CLSINPUT “Unesi web-adresu:”, a$FOR x = 1 TO LEN(a$) b$ = MID$(a$, x, 1) IF ASC(b$) = 32 THEN n$ = n$ + “-” b = b + 1 ELSEIF b$ = “č” OR b$ = “ć” THEN n$ = n$ + “c” b = b + 1 ELSEIF b$ = “š” THEN n$ = n$ + “s” b = b + 1 ELSEIF b$ = “đ” THEN n$ = n$ + “d” b = b + 1 ELSEIF b$ = “ž” THEN n$ = n$ + “z” b = b + 1 ELSE n$ = n$ + b$ END IFNEXT x

IF b = 0 THEN PRINT “Adresa je ispravna”IF b <> 0 THEN PRINT “Adresa nije ispravna” PRINT “Broj grešaka:”; b PRINT “Ispravna adresa:”; n$END IF

7-8 Skripta informatika.indd 22 3.2.2009 12:59:20

Page 23: 181351199 Dodatak Prirucniku Qbasic PDF PDF

23JEDNODIMENZIONALNI NIZOVI

JEDNODIMENZIONALNI NIZOVINizovima se kod programiranja koristimo kada radimo s većim skupinama sličnih podataka, npr. imena učenika istog razreda, ocjene po predmetima za pojedinog učenika i sl. U navedenim slučajevima, kada se ne bismo koristili nizovima, morali bismo u programu rabiti mnogo varijabla različitih naziva. Niz u BASIC-u definiramo naredbom DIM iza koje navodimo naziv niza i broj članova niza.

Na primjer:DIM a(20) numerički niz s 20 elemenata (a(1), a(2), ...a(20))DIM a(10) AS STRING ili DIM a$(10) string niz s 10 mjesta

Niz možemo zamisliti i kao tablicu koja ima jedan red i određeni broj polja. Svako polje ima svoj index broj koji predstavlja polje.

a(1) a(2) a(3) a(18) a(19) a(20)

5 21 13 22 2 32

Takav niz u kojemu je indeks samo jedan broj, naziva se jednodimenzionalni niz.Jednodimenzionalni niz popunjavamo u jednoj FOR-NEXT petlji:

DIM a(10)FOR x=1 TO 10 INPUT a(x)NEXT x

Na sličan način se i ispisuje:FOR x=1 TO 10 PRINT a(x)NEXT x

Jednodimenzionalni niz može se i sortirati u dvije ugniježđene FOR-NEXT petlje, i to u rastućem ili padajućem redoslijedu.Primjer sortiranja u padajućem redoslijedu:

FOR x=1 TO a-1 FOR y=x+1 TO a IF a(y)>a(x) THEN SWAP a(y), a(x) NEXT yNEXT x

Vanjska FOR-NEXT petlja vrti se do broja članova niza umanjenoga za jedan, a unutarnja od brojača u prvoj petlji uvećanoga za jedan do broja članova niza. Ako je sljedeći član niza veći ili manji od prethodnoga, radi se zamjena vrijednosti naredbom SWAP. Svaki put kad se izvrti unutarnja FOR-NEXT petlja, dobije se jedan član sortiranog niza (najveći ili najmanji).

7-8 Skripta informatika.indd 23 3.2.2009 12:59:21

Page 24: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred24

ZADATAK 1.

Izradi program kojim se unosi n brojeva i ispisuje:- najveći broj- najmanji broj- niz sortiran po veličini od najvećega prema najmanjemu- broj parnih i neparnih članova niza.

CLSINPUT“Unesi broj članova niza:“,aDIM niz(a)‘Popunjavanje niza i provjera parnih i neparnih članovaFOR x=1 TO a INPUT“Unesi broj:“;niz(x) IF niz(x) MOD 2=0 THEN p=p+1 ELSE n=n+1NEXT x

‘Sortiranje nizaFOR x=1 TO a-1 FOR y=x+1 TO a IF niz(y)>niz(x) THEN swap niz(y),niz(x) NEXT yNEXT x

‘Ispis sortiranog nizaFOR x=1 TO a PRINT niz(x);NEXT x

PRINTPRINT“Najveći broj u nizu:“;niz(1)PRINT“Najmanji broj u nizu:“;niz(a)PRINT“Parnih brojeve u nizu:“;pPRINT“Neparnih brojeva u nizu:“;n

ZADATAK 2.

Izradi program kojim se unosi n imena. Program treba ispisati niz imena sortiranih po abecedi.

CLSINPUT“Unesi broj imena:“,nDIM ime$(n)

‘Unos imena u nizFOR x=1 TO n INPUT“Unesi ime:“; ime$(x)NEXT x

7-8 Skripta informatika.indd 24 3.2.2009 12:59:21

Page 25: 181351199 Dodatak Prirucniku Qbasic PDF PDF

25JEDNODIMENZIONALNI NIZOVI

‘Sortiranje niza imenaFOR x=1 TO n-1 FOR y=x+1 TO n IF ime$(y)<ime$(x) THEN SWAP ime$(y), ime$(x) NEXT yNEXT x

‘Ispis sortiranog nizaFOR x=1 TO n PRINT ime$(x)NEXT x

ZADATAK 3.

Izradi program kojim se unosi riječ i ispisuje tako da se slova u riječi sortiraju po abecedi.

CLSINPUT“Unesi riječ:“,a$b=LEN(a$)DIM s$(b)‘Izdvajanje slova iz riječi u nizFOR x=1 TO LEN(a$) s$(x)=MID$(a$,x,1)NEXT x‘Sortiranje nizaFOR x=1 TO b-1 FOR y=x+1 TO b IF s$(y)<s$(x) THEN SWAP s$(y),s$(x) NEXT yNEXT x

‘IspisFOR x=1 TO b PRINT s$(x);NEXT x

ZADATAK 4.

Izradi program kojim će se unositi dva niza prirodnih brojeva. Broj elemenata niza također se unosi (nizovi imaju jednak broj elemenata). Potrebno je:

a) izračunati i ispisati zbroj elemenata prvoga nizab) izračunati i ispisati zbroj elemenata drugoga nizac) ispisati prvi niz sortiran od najmanjega prema najvećem elementud) ispisati drugi niz sortiran od najvećega prema najmanjem elementue) formirati i ispisati novi niz tako da se zbraja najmanje element prvoga niza s najvećim

elementom drugoga niza i tako redomf) u novom nizu zbrojiti posebno parne, a posebno neparne elemente.

7-8 Skripta informatika.indd 25 3.2.2009 12:59:21

Page 26: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred26

ULAZNI PODATCI:• broj elemenata niza• elementi prvoga niza• elementi drugoga niza.

RB ULAZ IZLAZ

1. 51,42,34,9,1532,28,4,67,2

1,9,15,34,4210167,32,28,4,213368,41,43,38,4415084

IZLAZNI PODATCI:• sortiran prvi niz• zbroj elemenata prvoga niza• sortiran drugi niz• zbroj elemenata drugoga niza• novi niz• zbroj parnih i neparnih elemenata novoga niza.

CLSINPUT“Unesi broj članova niza:“,nDIM niz1(n), niz2(n), niz3(n)

‘Unos elemenata prvoga nizaPRINT “1.NIZ“FOR x=1 TO n INPUT“Unesi broj:“,niz1(x) zbr1=zbr1+niz1(x)NEXT x

‘Unos elemenata drugoga nizaPRINT“2.NIZ“FOR x=1 TO n INPUT“Unesi broj:“,niz2(x) zbr2=zbr2+niz2(x)NEXT x

‘Sortiranje prvoga i drugoga nizaFOR x=1 TO n-1 FOR y=x+1 TO n IF niz1(y)<niz1(x) THEN SWAP niz1(y), niz1(x) IF niz2(y)>niz2(x) THEN SWAP niz2(y), niz2(x) NEXT yNEXT x

‘Formiranje trećega niza i zbrajanje parnih i neparnih članovaFOR x=1 TO n niz3(x)=niz1(x)+niz2(x) IF niz3(x) MOD 2 = 0 THEN zbrp=zbrp+niz3(x) IF niz3(x) MOD 2 = 1 THEN zbrn=zbrn+niz3(x)NEXT x

‘IspisiFOR x=1 TO n PRINT niz1(x);NEXT xPRINTPRINT zbr1FOR x=1 TO n

7-8 Skripta informatika.indd 26 3.2.2009 12:59:21

Page 27: 181351199 Dodatak Prirucniku Qbasic PDF PDF

27JEDNODIMENZIONALNI NIZOVI

PRINT niz2(x);NEXT xPRINTPRINT zbr2FOR x=1 TO n PRINT niz3(x);NEXT xPRINTPRINT zbrpPRINT zbrn

ZADATAK 5.

Izradi program kojim se unosi jedna rečenica (završava točkom). Potrebno je ispisati broj riječi u rečenici, svaku riječ staviti u novi redak velikim početnim slovom te rečenicu sortiranu prema broju znakova u riječi (od najveće riječi prema najmanjoj). Najdužu riječ u rečenici treba ispisati.

ULAZNI PODATCI:- rečenica (malim slovima).

IZLAZNI PODATCI:- broj riječi u rečenici- svaka riječ ispisana u novi redak velikim početnim slovom- uređena rečenica (riječi su poredane po broju znakova od najveće prema najmanjoj).

RB ULAZ IZLAZ

1. Volim programirati u qbasicu. 4VolimProgramiratiUQbasicuprogramirati qbasicu volim u.

CLSINPUT“Unesi rečenicu:“,a$

‘Određivanje broja riječi radi dimenzioniranja nizaFOR x=1 TO LEN(a$) IF MID$(a$,x,1) = “ “ THEN br=br+1 END IFNEXT xDIM rijec$(br+1), broj(br+1)PRINT br+1

‘Stavljanje riječi u nizFOR x=1 TO LEN (a$) IF MID$(a$,x,1)= “ “ OR MID$(a$,x,1)=“.“ THEN b=b+1

7-8 Skripta informatika.indd 27 3.2.2009 12:59:22

Page 28: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred28

rijec$(b)=r$ broj(b)=LEN(r$) r$=““ ELSE r$=r$+MID$(a$,x,1) END IFNEXT x

‘Ispis svake riječi niza u novi redak velikim početnim slovomFOR x=1 TO b PRINT UCASE$(LEFT$(rijec$(x),1)); PRINT MID$(rijec$(x),2,LEN(rijec$(x))-1)NEXT x

‘Sortiranje riječi u nizuFOR x=1 TO b-1 FOR y=x+1 to b IF LEN(rijec$(y))>LEN(rijec$(x)) THEN SWAP rijec$(y), rijec$(x) NEXT yNEXT x

‘Ispis sortiranih riječiFOR x=1 TO b PRINT rijec$(x);PRINT “ “NEXT x

ZADATAK 6.

Na Planici se održava natjecanje u skijaškim skokovima. Organizatori trebaju pomoć pri obračunavanju bodova. Izradi program koji će obračunavati bodove skakačima za izvedeni skok. Ukupan zbroj bodova rezultat je zbroja bodova za dužinu skoka i bodova za stil. Bodovanje se vrši prema sljedećem kriteriju:

a) BODOVI ZA DUŽINU SKOKAZa skok na kritičnu točku (120 metara) dobiva se 100 bodova. Za svakih 0.5 metara više dobiva se 1.2 boda, a za svakih 0.5 metara manje dobiva se 1.2 boda.

b) BODOVI ZA STIL

Stil skakača ocjenjuje 5 sudaca ocjenama od 10 do 20 (uključujući i polovine boda 10.5; 11.5; 12.5...). Najmanja i najveća ocjena se brišu, a preostale tri zbrajaju.

ULAZNI PODATCI:- duljina skoka- pet ocjena za stil.

RB ULAZ IZLAZ

1. 125.516;17.5;17;18.5;18

113.252.5165.7

2. 11819;18.5;18.5;18;19

95.256151,2

IZLAZNI PODATCI:- bodovi za skok- bodovi za stil- ukupno bodova.

7-8 Skripta informatika.indd 28 3.2.2009 12:59:22

Page 29: 181351199 Dodatak Prirucniku Qbasic PDF PDF

29JEDNODIMENZIONALNI NIZOVI

CLSINPUT“Unesi duljinu skoka:“,d‘Bodovi za duljinu skokaIF d=120 THEN bod1=100IF d>120 THEN bod1=100+(d-120)/0.5 * 1.2IF d<120 THEN bod1=100-(120-d)/0.5*1.2‘Unos i sortiranje bodova za stilDIM s(5)FOR x=1 TO 5 INPUT“Unesi ocjenu:“,s(x)NEXT xFOR x=1 TO 4 FOR y=x+1 TO 5 IF s(y)>s(x) THEN SWAP s(y), s(x) NEXT yNEXT xPRINT bod1bod2 = s(2)+s(3)+s(4)PRINT bod2PRINT bod1+bod2

ZADATAK 7.

Teniski meč igraju igrači A i B. Igraju na dva dobivena seta. Rezultat svakoga seta prikazan je u nizu (npr. AABAABAA) gdje A označuje dobiveni gem igrača A, a B dobiveni gem igrača B. Ulazni niz može imati najmanje 6, a najviše 13 znakova.

Potrebno je ispisati ukupan broj odigranih gemova, ispisati rezultat seta, ispisati ukupni rezultat i pobjednika.

ULAZNI PODATCI:- broj odigranih setova- za svaki set rezultat u nizu.

RB ULAZ IZLAZ

1. 2AAABAABAAAAAABA

156:26:12:0A

2. 3ABABABABABABBAAABBAABABBAABBABB

316:76:33:61:2B

IZLAZNI PODATCI:- ukupan broj odigranih gemova- rezultat svakoga seta- ukupan rezultat- ime pobjednika.

CLSINPUT “Broj setova:“;nDIM a$(n)

‘Unos rezultata po setovimaFOR x=1 TO n INPUT“Rezultat “;x;“. seta:“,a$(x) brg=brg+LEN(a$(x))NEXT xPRINT brg

7-8 Skripta informatika.indd 29 3.2.2009 12:59:22

Page 30: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred30

‘Analiza rezultata po setovimaFOR x=1 TO n FOR y=1 TO LEN(a$(x)) IF MID$(a$(x),y,1) = “A“ THEN a=a+1 ELSE b=b+1 NEXT y PRINT a;“:“;b IF a>b THEN sa=sa+1 ELSE sb=sb+1 a=0b=0NEXT x

PRINT sa;“:“;sbIF sa>sb THEN PRINT “A“ ELSE PRINT “B“

ZADATAK 8.

Izradi program kojim se unosi niz slova te jedno ime. Program treba provjeriti može li se uneseno ime dobiti unesenim nizom slova. Jedno slovo u unesenom nizu može se rabiti samo jedanput.Unos: ACRBNEIOK Unos:ABDEINIme: BRANKO Ime: ANAIzlaz: Moguće je složiti ime. Izlaz: Nije moguće složiti ime.

CLSINPUT“Unesi niz slova:“,niz$INPUT“Unesi ime:“;ime$DIM n$(LEN(niz$))

‘Upisivanje slova iz unesenoga niza u jednodimenzionalni nizFOR x=1 TO LEN(niz$) n$(x)=MID$(niz$,x,1)NEXT x

FOR x=1 TO LEN (ime$) s$=MID$(ime$,x,1) FOR y=1 TO LEN(niz$) IF s$=n$(y) THEN br=br+1 n$(y)=“ “ END IF NEXT yNEXT x IF LEN(ime$)=br THEN PRINT“Moguće je složiti ime“ ELSE PRINT“Nije moguće složiti ime“

U programu se prvo izdvoje sva slova iz prvoga niza u niz. Budući da se slovo u nizu može samo jedanput koristiti u slaganju imena, potrebno je svako pronađeno slovo obrisati. To se radi u dvije ugniježđene FOR petlje. Kad se slovo imena pronađe u nizu slova, to se slovo briše iz niza (na njegovo se mjesto stavlja praznina) te se brojač br. povećava za 1. Ako je brojač br na kraju jednak broju znakova u unesenom imenu, moguće je iz zadanoga niza znakova složiti zadano ime.

7-8 Skripta informatika.indd 30 3.2.2009 12:59:22

Page 31: 181351199 Dodatak Prirucniku Qbasic PDF PDF

31JEDNODIMENZIONALNI NIZOVI

ZADATAK 9.

Izradi program kojim se unosi binarni broj. Program treba uneseni binarni broj pretvoriti u dekadski.

Ulaz: 10011

Izlaz: 19

CLSINPUT “Unesi binarni broj:”, b$DIM b(LEN(b$))FOR x = 1 TO LEN(b$) b(x) = VAL(MID$(b$, x, 1))NEXT xp = LEN(b$) - 1FOR x = 1 TO LEN(b$) zbr = zbr + b(x) * 2 ^ p p = p - 1NEXT xPRINT zbr

U ovom se zadatku prvo u niz izdvoje sve binarne znamenke. Budući da je za pretvaranje binarnog broja u dekadski binarni broj potrebno rastaviti na zbroj potencija broja 2, to se radi u FOR NEXT petlji. Varijabla p predstavlja potenciju broja 2. Početna potencija je za jedan manja od broja znamenaka u broju.

ZADATAK 10.

Ivan je velik zaljubljenik u rukomet i obožava pratiti hrvatsku reprezentaciju. Na svakoj utakmici vodi vlastitu evidenciju golova šest ponajboljih igrača: Lackovića, Balića, Džombe, Šprema, Vorija i Metličića. Kad igrač zabije gol, Ivan zapisuje početno slovo njegova imena. Ako igrač uzastopno postigne nekoliko golova, tada prvo zapisuje broj golova, a zatim početno slovo imena igrača. Izradi program kojim se unosi niz u kojemu se mogu pojaviti slova L, B, D, Š, V i M te brojke 2-9. Program treba ispisati koliko je pojedini igrač zabio golova. U nizu se ne smiju ispisati igrači koji nisu dali niti jedan gol.

Ulaz: 3LBVL2VŠDŠ

Izlaz:L 4B 1V 3Š 2D 1

CLSINPUT “Unesi niz:”, a$DIM ime$(6), gol(6)

7-8 Skripta informatika.indd 31 3.2.2009 12:59:23

Page 32: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred32

ime$(1) = “L”: ime$(2) = “B”: ime$(3) = “V”: ime$(4) = “M”: ime$(5) = “Š”: ime$(6) = “D”FOR x = 1 TO LEN(a$) b$ = MID$(a$, x, 1) ‘provjera da li je izdvojeni znak brojIF ASC(b$) < 65 THEN bg = VAL(b$) ig$ = MID$(a$, x + 1, 1) FOR y = 1 TO 6 IF ig$ = ime$(y) THEN gol(y) = gol(y) + bg NEXT y x = x + 1 ELSE FOR y = 1 TO 6 IF b$ = ime$(y) THEN gol(y) = gol(y) + 1 NEXT y END IFNEXT xFOR x = 1 TO 6 IF gol(x) = 0 THEN GOTO 1 PRINT ime$(x), gol(x)1 NEXT x

Prvo se u polje sa 6 elemenata unesu početna slova imena igrača. Zatim se u ulaznome nizu uzima znak po znak. Ako je uzeti znak znamenka (ima ASCII kod manji od 65), ta se znamenka pretvara u broj i pribraja ukupnom broju golova za određenog igrača, a potom se jedan znak preskače. Ako uzeti znak nije broj, tada se ukupan zbroj golova za nekog igrača povećava za 1.

7-8 Skripta informatika.indd 32 3.2.2009 12:59:23

Page 33: 181351199 Dodatak Prirucniku Qbasic PDF PDF

33DVODIMENZIONALNI NIZOVI

DVODIMENZIONALNI NIZOVIDvodimenzionalni niz je niz koji ima indeks s dva člana (dvije dimenzije). Može se zamisliti kao tablica s određenim brojem redova i stupaca. Dvodimenzionalni niz još se naziva matrica. Također se definira naredbom DIM, npr. DIM a(5,4). Na taj smo način definirali dvodimenzionalni niz od 5 redova i 4 stupca.

1. stupac 2. stupac 3. stupac 4. stupac

1. red 10 13 44 34

2. red 5 2 33 85

3. red 12 55 22 33

4. red 11 32 11 65

5. red 34 24 1 67

Prvi član indeksa označuje red, a drugi član označuje stupac.a(5,1) 34a(3,4) 34a(2,2) 2

Nekim dvodimenzionalnim nizom sa r redova i s stupaca možemo zapamtiti r x s elemenata.Dvodimenzionalni niz koji ima jednak broj redova i stupaca, naziva se kvadratna matrica. Takav niz ima glavnu i sporednu dijagonalu.

10 13 44 34

5 2 33 85

12 55 22 33

11 32 11 65

Glavna dijagonala (crvena boja) (1,1), (2,2), (3,3), (4,4)Sporedna dijagonala (žuta boja) (1,4), (2,3), (3,2), (4,1)

Elementi dvodimenzionalnoga niza učitavaju se u dvije ugniježđene FOR-NEXT petlje.DIM a(r,s)FOR x=1 to r FOR y=1 TO s INPUT a(r,s) NEXT yNEXT x

Ispis dvodimenzionalnoga niza također se radi dvjema ugniježđenim FOR-NEXT petljama.DIM a(r,s)FOR x=1 to r FOR y=1 TO s PRINT a(r,s); NEXT y PRINTNEXT x

7-8 Skripta informatika.indd 33 3.2.2009 12:59:23

Page 34: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred34

Naredba PRINT između NEXT y i NEXT x omogućuje da se nakon ispisanoga prvog reda ispis preseli u novi red.

ZADATAK 1.

Izradi program kojim se unosi broj redaka i stupaca dvodimenzionalnoga niza te se niz popuni brojevima. Program treba ispisati zbroj brojeva u svakom retku.

CLSINPUT “Broj redaka niza:”, rINPUT “Broj stupaca niza:”, sDIM a(r, s)DIM red(r)‘popunjavanje nizaFOR x = 1 TO r FOR y = 1 TO s INPUT a(x, y) NEXT yNEXT x

‘ispis niza i računanje zbroja po redcimaFOR x = 1 TO r FOR y = 1 TO s PRINT a(x, y); zbr = zbr + a(x, y) NEXT y red(x) = zbr zbr = 0 PRINTNEXT x

‘ispis zbrojevaFOR x = 1 TO r PRINT x;“.“; red(x)NEXT x

ZADATAK 2.

Izradi program kojim se unosi dimenzija kvadratne matrice te popuni niz brojevima. Program treba ispisati zbroj glavne i sporedne dijagonale.

CLSINPUT “Dimenzija kvadratne matrice:”, nDIM a(n, n)‘popunjavanje nizaFOR x = 1 TO n FOR y = 1 TO n INPUT a(x, y) NEXT yNEXT x

7-8 Skripta informatika.indd 34 3.2.2009 12:59:23

Page 35: 181351199 Dodatak Prirucniku Qbasic PDF PDF

35DVODIMENZIONALNI NIZOVI

‘ispis niza i računanje zbroja dijagonalaFOR x = 1 TO n FOR y = 1 TO n PRINT a(x, y); IF x = y THEN gl = gl + a(x, y) IF x + y = n + 1 THEN sp = sp + a(x, y) NEXT y PRINTNEXT x

‘ispis zbrojevaPRINT “Glavna dijagonala:”, glPRINT “Sporedna dijagonala:”, sp

Budući da su indeksi elemenata na glavnoj dijagonali jednaki, elementi glavne dijagonale se zbrajaju kad su brojači x i y jednaki. Kod sporedne dijagonale zbroj indeksa uvijek je za jedan veći od dimenzije matrice.

ZADATAK 3.

Izradi program kojim se unosi broj redova i stupaca dvodimenzionalnoga niza te se niz popunjava brojevima od 0 do 100. Potrebno je ispisati najveći i najmanji element niza te red i stupac u kojemu se oni nalaze.

CLSINPUT “Broj redova niza:”, rINPUT “Broj stupaca niza:”, sDIM a(r, s)min=99max=0‘popunjavanje nizaFOR x = 1 TO r FOR y = 1 TO sINPUT a(x, y) IF a(x,y) >max THEN max=a(x,y) maxr=x maxs=y END IF IF a(x,y) < min THEN min=a(x,y) minr=x mins=y END IF NEXT yNEXT x

PRINT“Najveći element niza je “;max;“ i nalazi se u “;maxr;“. redu i “;maxs;“. stupcu”PRINT“Najmanji element niza je “;min;“ i nalazi se u “;minr;“. redu i “;mins;“. stupcu”

7-8 Skripta informatika.indd 35 3.2.2009 12:59:23

Page 36: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred36

ZADATAK 4.

Učitaj poziciju figure lovca u šahu. Potrebno je prebrojiti na koliko polja lovac može doći. Lovac se kreće dijagonalno. Šahovsko polje ima 8 redova i 8 stupaca.Unos: 3,5.Izlaz: 11.

0 0 1 0 0 0 1 0

0 0 0 1 0 1 0 0

0 0 0 0 X 0 0 0

0 0 0 1 0 1 0 0

0 0 1 0 0 0 1 0

0 1 0 0 0 0 0 1

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

CLSDIM a(8,8)INPUT“Pozicija lovca:“,r,s

‘popunjavanja desno doljey=sFOR x=r+1 TO 8 y=y+1 IF y>8 THEN GOTO 1 a(x,y)=1NEXT x

‘popunjavanje lijevo dolje1 y=sFOR x=r+1 TO 8 y=y-1 IF y=0 THEN GOTO 2 a(x,y)=1NEXT x

‘popunjavanje desno gore2 x=rFOR y=s+1 TO 8 x=x-1 IF x=0 THEN GOTO 3 a(x,y)=1NEXT x

‘popunjavanje lijevo gore3 x=rFOR y=s-1 TO 1 STEP -1 x=x-1 IF x=0 THEN GOTO 4 a(x,y)=1

7-8 Skripta informatika.indd 36 3.2.2009 12:59:24

Page 37: 181351199 Dodatak Prirucniku Qbasic PDF PDF

37DVODIMENZIONALNI NIZOVI

NEXT y

‘ispis i zbrajanje polja4 FOR x=1 TO 8 FOR y=1 TO 8 PRINT a(x,y); IF a(x,y) = 1 THEN br=br+1 NEXT yPRINT NEXT y

PRINTPRINT br

Lovac se u šahu može kretati dijagonalno u 4 smjera. U svako polje na koje može doći, postavlja se vrijednost 1. U svim je ostalim poljima vrijednost 0. Prilikom postavljanja jedinica treba paziti da se ne prijeđe izvan dimenzija niza (8 x 8). Na kraju se samo prebroje jedinice.

ZADATAK 5.

Učitaj broj redova i stupaca za dvodimenzionalni niz te jednoznamenkasti broj i njegovu poziciju (red i stupac). Cijeli red i stupac u kojemu se nalazi broj, treba popuniti tim brojem.Unos:Dimenzije: 4,5Broj: 5 Pozicija: 2,3

0 0 5 0 0

5 5 5 5 5

0 0 5 0 0

0 0 5 0 0

CLSINPUT “Dimenzija niza:”, r, sDIM a(r, s)INPUT “Unesi broj (1-9):”, xINPUT “Unesi poziciju broja:”, r1, s1a(r1, s1) = x

‘popunjavanje reda unesenim brojemFOR i = 1 TO s a(r1, i) = xNEXT i

‘popunjavanje stupca unesenim brojemFOR i = 1 TO r a(i, s1) = xNEXT i

7-8 Skripta informatika.indd 37 3.2.2009 12:59:24

Page 38: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred38

‘ispis popunjenog nizaFOR i = 1 TO r FOR j = 1 TO s PRINT a(i, j); NEXT j PRINTNEXT i

ZADATAK 6.

Unesi dimenziju kvadratne matrice i popuni ju brojevima 1,2,3… do zadnjeg polja. Potom je potrebno unijeti jedan broj (veći od 0, a manji ili jednak najvećem broju upisanom u niz), a program treba ispisati susjede toga broja te njihov ukupan broj. Susjedi broja su brojevi koji se nalaze u poljima iznad i ispod te lijevo i desno od zadanoga broja.Unos:

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

21 22 23 24 25

Dimenzija: 5Broj: 20Ispis:Susjedi: 15,19,25Zbroj: 59

CLSINPUT “Dimenzija kvadratne matrice:”, nDIM a(n, n)1 INPUT “Unesi broj:”; bIF b < 1 OR b > n * n THEN PRINT “POGRJEŠAN UNOS” GOTO 1END IF

‘popunjavanje niza brojevimaFOR x = 1 TO n FOR y = 1 TO n br = br + 1 IF br = b THEN r1 = x s1 = y END IF a(x, y) = br PRINT br; NEXT y PRINTNEXT x

7-8 Skripta informatika.indd 38 3.2.2009 12:59:24

Page 39: 181351199 Dodatak Prirucniku Qbasic PDF PDF

39DVODIMENZIONALNI NIZOVI

‘traženje susjedaIF r1 - 1 <> 0 THEN sus1 = a(r1 - 1, s1) PRINT sus1; zbr = zbr + sus1END IFIF r1 + 1 <= n THEN sus2 = a(r1 + 1, s1) PRINT sus2; zbr = zbr + sus2END IFIF s1 - 1 <> 0 THEN sus3 = a(r1, s1 - 1) PRINT sus3; zbr = zbr + sus3END IFIF s1 + 1 <= n THEN sus4 = a(r1, s1 + 1) PRINT sus4; zbr = zbr + sus4END IFPRINTPRINT zbr

Svaki broj može imati najviše 4 susjeda. No ako je broj na rubu niza, tada ima manji broj susjeda (tri ili dva).

7-8 Skripta informatika.indd 39 3.2.2009 12:59:24

Page 40: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred40

POTPROGRAMIPotprogrami nam služe kako bismo neki složeniji program rastavili na manje dijelove kako bi svaki dio rješavao neki problem. U tom slučaju postoji glavni program i jedan ili više potprograma koji se mogu pozvati iz glavnoga programa, i to nekoliko puta. Ako ćemo se koristiti potprogramom, potrebno ga je definirati naredbom DECLARE SUB ime_potprograma (a,b) na početku programa. Iza imena programa navodimo ulazne varijable kojima pozivamo potprogram. Za pisanje potprograma pišemo naredbu SUM ime_potprograma (a,b) nakon čega se otvara prozor u kojemu pišemo potprogram, a glavni nam program nestaje. U otvorenom prozoru imamo početnu i završnu naredbu potprograma, a između pišemo ostale linije potprograma. Kada se završi pisanje potprograma, pritiskom na tipku F2 otvara se prozor u kojemu vidimo glavni program i sve potprograme.

SUB ime_potprograma

END SUB

Potprogram iz glavnoga programa pozivamo naredbom CALL ime_potprograma iza čega navodimo ulazne varijable kojima pozivamo potprogram. Kada se potprogram izvede, kontrola se prebacuje na glavni program, i to na liniju iza on s koje je pozvan potprogram.

ZADATAK 1.

Izradi program kojim se unose katete pravokutnoga trokuta. Program treba izračunati i ispisati hipotenuzu, i to s pomoću potprograma.DECLARE SUB trokut (a,b)

CLSINPUT“Unesi katete trokuta:“,a,bCALL trokut (a,b)END

SUB trokut (a,b) c=SQR(a*a+b*b) PRINT cEND SUB

ZADATAK 2.

Izradi program kojim se unosi dekadski broj manji od 1000. Broj treba po želji pretvoriti ili u binarni ili u hexadekadski, i to s pomoću potprograma.DECLARE SUB binarni (n)DECLARE SUB hex (n)CLSINPUT “Unesi broj:”, nPRINT “U koji brojevni sustav želite pretvoriti broj?”PRINT “1.BINARNI”

7-8 Skripta informatika.indd 40 3.2.2009 12:59:25

Page 41: 181351199 Dodatak Prirucniku Qbasic PDF PDF

41POTPROGRAMI

PRINT “2.HEKSADEKADSKI”INPUT iIF i = 1 THEN CALL binarni(n) ELSE CALL hex(n)END

SUB binarni (n) DIM bin(10) DO i = i + 1 bin(i) = n MOD 2 n = INT(n / 2) LOOP WHILE n <> 0 FOR y = i TO 1 STEP -1 PRINT bin(y); NEXT yEND SUB

SUB hex (n) DIM h(10) DO i = i + 1 h(i) = n MOD 16 n = INT(n / 16) LOOP WHILE n <> 0 FOR y = i TO 1 STEP -1 IF h(y) = 10 THEN PRINT “A”; IF h(y) = 11 THEN PRINT “B”; IF h(y) = 12 THEN PRINT “C”; IF h(y) = 13 THEN PRINT “D”; IF h(y) = 14 THEN PRINT “E”; IF h(y) = 15 THEN PRINT “F”; IF h(y) < 10 THEN PRINT h(y); NEXT yEND SUB

ZADATAK 3.

Izradi program kojim se unosi polumjer kružnice. Program treba nacrtati niz koncentričnih kružnica kojima će polumjer biti manji za 5 sve dok polumjer ne postane manji od 10. Jedna se kružnica crta s pomoću potprograma. Koncentrične kružnice imaju središte u istoj točki.

DECLARE SUB krug (x, y, r)CLSINPUT “Unesi polumjer kružnice:”, rSCREEN 12DO CALL krug(x, y, r) r = r - 5LOOP WHILE r >= 10END

7-8 Skripta informatika.indd 41 3.2.2009 12:59:25

Page 42: 181351199 Dodatak Prirucniku Qbasic PDF PDF

QBASIC • 7. i 8. razred42

SUB krug (x, y, r) CIRCLE (x, y), rEND SUB

ZADATAK 4.

Izradi program kojim se unose dva broja. Program treba, s pomoću potprograma, ispisati svaki broj, njegov kvadrat i kub.

DECLARE SUB pot (x)CLSINPUT “Unesi prvi broj:”, aINPUT “Unesi drugi broj:”, bFOR x = a TO b CALL pot(x)NEXT x

SUB pot (x) PRINT x, x * x, x * x * xEND SUB

7-8 Skripta informatika.indd 42 3.2.2009 12:59:25