QBasic za apsolutne početnike vol.2 IF-THEN-ELSE naredbe
Ako znate imalo engleskog, shvatili ste o cemu se radi. IF-THEN-ELSE znaci AKO-ONDA-INACE, dakle imamo posla s uvjetima. Evo jednostavnog primjera za pocetak. Treba nam program koji ce nam reci je li ucitan broj veci od nule.
Code:
CLS
INPUT "Upiši broj: ", x
IF x > 0 THEN PRINT "Je."
Stvarno je jednostavno. Naredbu IF (zadnji red) citamo onako kako je napisano:
Code:
AKO je x veci od nule, ONDA ispiši "Je".
I sad vama cudno... pricalo se o nekom ELSEu... Pa evo vam! Prvom primjeru dodajte da napiše je li veci ili manji od nule.
Code:
CLS
INPUT "Upiši broj: ", x
IF x > 0 THEN PRINT "Je." ELSE PRINT "Nije."
Ovo citate kao i prvi primjer, samo mislim da bolje zvuci kad umjesto INACE kažete A AKO NIJE:
Code:
AKO je x veci od nule, ONDA ispiši "Je", A AKO NIJE (INACE), ispiši "Nije".
A sad zamislite da smo to sve htjeli napisati lijepo: "Broj (taj i taj) je veci od nule" (ili nije). Gledajte:
Code:
CLS
INPUT "Upiši broj: ", x
IF x > 0 THEN PRINT "Broj"; x; "je veci od nule." ELSE PRINT "Broj"; x; "nije veci od nule."
Ajme gužve u jednom redu!!! Zato je bolje pisati u više redova.
Code:
CLS
INPUT "Upiši broj: ", x
IF x > 0 THEN
PRINT "Broj"; x; "je veci od nule."
ELSE
PRINT "Broj"; x; "nije veci od nule."
END IF
Eto, sad je ljepše, jedino morate zapamtiti da, kad pišete u više redova, na kraju mora pisati END IF. Kad pišete u jednom redu, NE SMIJE!!!
Još jedan jednostavan primjer: password. Evo programcica koji kaže je li lozinka ispravna (u ovom primjeru, lozinka je tutorijali.net).
Code:
CLS
INPUT "Password? ", a$
IF a$ = "tutorijali.net" THEN
PRINT "Gogy, vratio si se."
ELSE
PRINT "Ti nisi Gogy."
END IF
Vratimo se sad drugom primjeru. Tamo imamo grešku. Ako upišemo broj 0, program ce napisati da je nula manja od nule!!! Sad nam treba naredba ELSEIF (ne ELSE IF!!!):
Code:
CLS
INPUT "Upiši broj: ", x
IF x > 0 THEN
PRINT "Broj"; x; "je veci od nule."
ELSEIF x < 0 THEN
PRINT "Broj"; x; "nije veci od nule."
ELSE
PRINT "Upisali ste nulu."
END IF
Citamo:
Code:
AKO je x veci od nule, ONDA
ispiši "Je"
INACE, AKO je x manji od nule (odnosno, "AKO nije veci od nule, nego je manji")
ispiši "Nije".
INACE
ispiši "Upisali ste nulu."
KRAJ
Napomena: broj ELSEIF naredbi je neogranicen.
Evo još jednog (stvarno debilnog) primjera koji postoji samo da bi se ljudi zapitali ima li smisla nastaviti s ucenjem programiranja. Uglavnom, program pita pada li kiša i kaže je li potrebno ponjeti kišobran.
Code:
CLS
INPUT "Pada li kiša? ", a$
IF a$ = "Da" THEN
PRINT "Ponesi kišobran."
ELSEIF a$ = "Ne" THEN
PRINT "Nemoj ponijeti kišobran."
ELSE
PRINT "Daj, piši razgovjetnije!!!"
END IF
Ovaj zadnji PRINT je tu jer, ako korisnik napiše "ne" (s malim n), QBasic to nece procitati kao "Ne", i to nece valjat.
CASE naredba
Pogledajte ovaj primjer. Recimo da vam jednom u nekom programu za rad s datumima zatreba dio programa koji ce ispisivati hrvatski naziv mjeseca (a poznat je redni broj):
Code:
CLS
INPUT "Broj mjeseca: ", x
IF x = 1 THEN
PRINT "Sijecanj"
ELSEIF x = 2 THEN
PRINT "Veljaca"
ELSEIF x = 3 THEN
PRINT "Ožujak"
ELSEIF x = 4 THEN
PRINT "Travanj"
ELSEIF x = 5 THEN
PRINT "Svibanj"
ELSEIF x = 6 THEN
PRINT "Lipanj"
ELSEIF x = 7 THEN
PRINT "Srpanj"
ELSEIF x = 8 THEN
PRINT "Kolovoz"
ELSEIF x = 9 THEN
PRINT "Rujan"
ELSEIF x = 10 THEN
PRINT "Listopad"
ELSEIF x = 11 THEN
PRINT "Studeni"
ELSEIF x = 12 THEN
PRINT "Prosinac"
ELSE
PRINT "Taj mjesec ne postoji."
END IF
Puno pisanja, jel'da? Za to služi CASE naredba. Najbolje cete skužiti na primjeru, pa evo vam isto ovo pomocu naredbe CASE:
Code:
CLS
INPUT "Upiši broj mjeseca: ", x
SELECT CASE x
CASE 1
PRINT "Sijecanj"
CASE 2
PRINT "Veljaca"
CASE 3
PRINT "Ožujak"
CASE 4
PRINT "Travanj"
CASE 5
PRINT "Svibanj"
CASE 6
PRINT "Lipanj"
CASE 7
PRINT "Srpanj"
CASE 8
PRINT "Kolovoz"
CASE 9
PRINT "Rujan"
CASE 10
PRINT "Listopad"
CASE 11
PRINT "Studeni"
CASE 12
PRINT "Prosinac"
CASE ELSE
PRINT "Taj mjesec ne postoji."
END SELECT
Manje texta, preglednije, lakše za copy/paste... Znaci, na pocetku naredbe ide:
SELECT CASE varijabla
Poslije toga za svaku vrijednost:
CASE vrijednost
(vrijednost može biti i niz slova, onda se to stavlja u navodnike i treba biti $ poslije varijable)
Umjesto ELSE:
Code:
CASE ELSE
I na kraju:
Code:
END SELECT
GOTO naredba
GOTO se sastoji do dvije riječi: GO TO (ko bi reko!), odnosno IDI NA. Služi za preskakanje dijela kôda ili vraćanje nazad, ali nema neku pretjeranu primjenu. Mislim da se svako korištenje naredbe GOTO može napisati na drugačiji način (bilo grananjem, petljama...). Uglavnom, na početku jednog reda se napiše broj, a kad bilo gdje u programu bude napisano GOTO taj broj, QBasic se vraća nazad ili preskače kôd do linije na čijem je početku taj broj. (sad sam ga malo zakomplicirao, al skužit ćete.)
Primjer: program upisuje brojeve dok se ne upiše nula. Onda ispiše zbroj svih upisanih brojeva:
Code:
CLS
zbroj = 0
20 INPUT "Upiši broj: ", x
IF x = 0 THEN
GOTO 10
ELSE
zbroj = zbroj + x
GOTO 20
END IF
10 PRINT zbroj
Znači, kad QBasic dođe na GOTO 10, on ode na 10, odnosno, izvrši naredbu PRINT zbroj. Onda ide dalje, a dalje nema ništa, pa je program gotov.
Kad dođe na GOTO 20, ode na 20, odnosno, vrati se na INPUT, izvrši ga i ide dalje, na naredbu IF.
Isprobavajte, pa ćete skužiti.
Matematika i logika
Uskoro će vam trebati neke žešće matematičke operacije (i funkcije itd.) osim +, -, *, /, <, > i =. Evo vam pregled svih za koje se sad mogu sjetiti.
Code:
+, -, *, /, =
--- to znate
Code:
<, >
--- manje od, veće od
Code:
<=, >=, <>
--- manje ili jednako, veće ili jednako, nejednako
Code:
MOD
--- daje ostatak pri dijeljenju.
13 MOD 5 = 3
(13 / 5 = 2 i ostatak 3)
Code:
ABS
--- daje apsolutnu vrijednost broja.
ABS(-5) = 5
(matematički napisano: |-5| = 5)
Code:
^ ([ALT] + [94])
--- exponencija.
2 ^ 3 = 8
Code:
SQR
--- kratica od square root – kvadratni korijen
SQR(16) = 4
Code:
SIN, COS, TAN
--- daje sin, cos i tan nekog kuta U RADIJANIMA.
COS(pi) = -1
Napomene:
- Da biste pretvorili stupnjeve u radijane, pomnožite stupnjeve sa (pi / 180).
SIN(90 * (pi / 180)) = 1
- kad radite s brojem pi, bilo bi dobro da na početku programa napišete
pi = 3.141592654
Code:
EXP
--- e na n-tu.
EXP(1) = 2.718281828
Code:
LOG
--- limes.
LOG(EXP(1)) = 1
Code:
INT
--- zaokružuje na prvi manji cijeli broj
INT(5.76) = 5
INT(-5.2) = -6
Code:
FIX
--- miče decimalni dio broja
FIX(1.8) = 1
FIX(-5.2) = -5
Code:
CINT
--- zaokružuje na najbliži cijeli broj
CINT(2.9) = 3
CINT(-2.2) = -2
CINT(2.5) = 2
Bilo bi dobro da ovo imate uz sebe stalno (dobro, ne stalno, samo kad programirate!!!). Pa si ovo isprintajte.
Logički operateri (tako ih svi zovu, nemam pojma šta točno znači "operater", i nije važno) su male riječi koje nam pomažu u nekim stvarima. Prvo pregled, onda primjer. Dobro ga proučite.
Code:
AND - i
obje strane moraju biti istinite
Code:
OR - ili
bar jedna strana mora biti istinita
Code:
XOR
jedna strana mora biti istinita, ali ne i druga.
(iskreno, ovo nikad nisam koristio)
Primjer:
Code:
x = 2
y = 7
IF x = 2 AND y > 5 THEN PRINT "Da." ELSE PRINT "Ne.";
IF x = 3 AND y > 5 THEN PRINT "Da." ELSE PRINT "Ne.";
IF x <> 3 AND y >= 5 THEN PRINT "Da." ELSE PRINT "Ne."
IF x = 3 OR y > 5 THEN PRINT "Da." ELSE PRINT "Ne.";
IF x = 2 OR y = 5 THEN PRINT "Da." ELSE PRINT "Ne.";
IF x = 1 OR y = 5 THEN PRINT "Da." ELSE PRINT "Ne."
IF x => 2 XOR y = 5 THEN PRINT "Da." ELSE PRINT "Ne.";
IF x > 2 XOR y = 7 THEN PRINT "Da." ELSE PRINT "Ne.";
IF x = 2 XOR y < 8 THEN PRINT "Da." ELSE PRINT "Ne."
Ispis:
Code:
Da. Ne. Da.
Da. Da. Ne.
Da. Da. Ne.
Evo vam i zadaci:
http://rapidshare.com/files/28070232/QB2z.zip.html