Logički tip podataka bool, definisanje podataka na nivou bloka i upravljačke strukture
1. Uvod
Do sada smo radili sa različitim tipovima podataka, kao što su int, double i string.
U programiranju često moramo da postavimo pitanje na koje odgovor može biti samo:
DA ili NE
TAČNO ili NETAČNO
Na primer:
-
Da li je broj veći od 10?
-
Da li su dva broja jednaka?
-
Da li je lozinka ispravna?
-
Da li je korisnik uneo ispravan podatak?
Za ovakve situacije koristi se logički tip podataka bool.
2. Logički tip podataka bool
Tip bool može imati samo dve vrednosti:
true
false
true znači tačno, a false znači netačno.
Primer:
bool punoletan = true;
bool imaKartu = false;
Možemo ispisati vrednost:
Console.WriteLine(punoletan);
Console.WriteLine(imaKartu);
Rezultat:
True
False
Napomena: Važno je razlikovati true od "true" - Prvo je logička vrednost tipa bool, a drugo je tekstualni podatak tipa string.
3. Bool vrednost može nastati poređenjem
Veoma često ne upisujemo true ili false direktno, već dobijamo logičku vrednost kao rezultat poređenja.
Na primer:
int a = 10;
int b = 5;
bool rezultat = a > b;
Pošto je 10 > 5 tačno, promenljiva rezultat ima vrednost:
true
Drugi primer:
int a = 3;
int b = 8;
bool rezultat = a > b;
Ovde je 3 > 8 netačno, pa je:
rezultat = false
Najčešće operatore poređenja već poznajemo:
> veće
< manje
>= veće ili jednako
<= manje ili jednako
== jednako
!= različito
Na primer:
int godine = 18;
bool punoletan = godine >= 18;
Console.WriteLine(punoletan);
Rezultat je:
True
4. Bool i naredba if
Tip bool se koristi u upravljačkim strukturama.
Najjednostavniji primer je if.
int godine = 18;
if (godine >= 18)
{
Console.WriteLine("Punoletni ste.");
}
Uslov:
godine >= 18
ima tip bool.
Ako je rezultat true, izvršava se blok naredbi.
Ako je rezultat false, blok se preskače.
Možemo uslov prethodno smestiti u bool promenljivu:
int godine = 18;
bool punoletan = godine >= 18;
if (punoletan)
{
Console.WriteLine("Punoletni ste.");
}
5. Definisanje podataka na nivou bloka
if (true)
{
int broj = 10;
Console.WriteLine(broj);
}
Promenljiva broj je definisana unutar bloka.
Blok je deo programa omeđen vitičastim zagradama:
{
// blok naredbi
}
Promenljiva definisana unutar bloka dostupna je samo unutar tog bloka.
Na primer:
if (true)
{
int broj = 10;
Console.WriteLine(broj);
}
Ovo je ispravno.
Ali:
if (true)
{
int broj = 10;
}
Console.WriteLine(broj);
nije ispravno, jer promenljiva broj više nije dostupna izvan bloka u kojem je definisana.
Ovo nazivamo opsegom (scope) promenljive.
6. Promenljiva definisana izvan bloka
Ako promenljivu definišemo pre bloka, ona može da se koristi i unutar tog bloka.
Na primer:
int broj = 10;
if (broj > 5)
{
Console.WriteLine(broj);
}
Promenljiva broj je definisana izvan if bloka i dostupna je unutar njega.
Možemo je koristiti i posle bloka:
int broj2 = 10;
if (broj2 > 5)
{
Console.WriteLine(broj2);
}
Console.WriteLine(broj);
Zato je važno znati gde je promenljiva definisana.
7. Da ponovimo:
Upravljačka struktura if omogućava programu da proveri uslov.
Osnovni oblik je:
if (uslov)
{
naredbe;
}
Primer:
int broj = 15;
if (broj > 10)
{
Console.WriteLine("Broj je veći od 10.");
}
Ako je uslov tačan, naredba se izvršava.
Možemo koristiti i else:
int broj = 7;
if (broj > 10)
{
Console.WriteLine("Broj je veći od 10.");
}
else
{
Console.WriteLine("Broj nije veći od 10.");
}
8. Da ponovimo:
Kada imamo više mogućih slučajeva, možemo koristiti više uslova:
int ocena = 4;
if (ocena == 5)
{
Console.WriteLine("Odličan");
}
else if (ocena == 4)
{
Console.WriteLine("Vrlo dobar");
}
else if (ocena == 3)
{
Console.WriteLine("Dobar");
}
else
{
Console.WriteLine("Potrebno je više učiti.");
}
Program proverava uslove redom.
Čim pronađe uslov koji je tačan, izvršava odgovarajući blok.
9. Da ponovimo:
Kada proveravamo jednu vrednost u odnosu na više mogućih vrednosti, možemo koristiti switch.
Primer:
int ocena2 = 5;
switch (ocena2)
{
case 5:
Console.WriteLine("Odličan");
break;
case 4:
Console.WriteLine("Vrlo dobar");
break;
case 3:
Console.WriteLine("Dobar");
break;
case 2:
Console.WriteLine("Dovoljan");
break;
case 1:
Console.WriteLine("Nedovoljan");
break;
default:
Console.WriteLine("Pogrešna ocena.");
break;
}
case predstavlja jednu moguću vrednost.
break završava izvršavanje tog case dela.
default se izvršava ako nijedan case nije odgovarajući.
Kada koristiti
if, a kadaswitch?
ifje pogodan kada proveravamo složenije uslove:if (broj > 10)
switchje pogodan kada jednu vrednost upoređujemo sa više konkretnih mogućnosti:switch (ocena)Na primer, za ocene
1,2,3,4i5,switchmože biti veoma pregledan.
10. Da ponovimo:
Petlje koristimo kada želimo da neku naredbu ili grupu naredbi ponovimo više puta.
Petlja for se koristi kada uglavnom znamo koliko puta želimo da ponovimo određenu radnju.
Osnovni oblik:
for (početak; uslov; promena)
{
naredbe;
}
Primer:
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
Rezultat:
1
2
3
4
5
Ovde:
int i = 1;
postavlja početnu vrednost.
i <= 5
predstavlja uslov.
i++
povećava vrednost promenljive i za 1.
11. Da ponovimo:
Petlja while izvršava blok naredbi dok je uslov tačan.
Osnovni oblik:
while (uslov)
{
naredbe;
}
Primer:
int j = 1;
while (j <= 5)
{
Console.WriteLine(j);
j++;
}
Rezultat je:
1
2
3
4
5
Kod while petlje uslov se proverava pre izvršavanja bloka.
Zato je moguće da se blok ne izvrši nijednom.
Na primer:
int j2 = 10;
while (j2 < 5)
{
Console.WriteLine(j2);
}
Blok se neće izvršiti jer je uslov odmah false.
12. Da ponovimo
do-while je slična while petlji, ali postoji vrl bitna razlika:
Kod do-while petlje blok se izvršava najmanje jednom, a tek onda se proverava uslov.
Oblik:
do
{
naredbe;
}
while (uslov);
Primer:
int ii = 1;
do
{
Console.WriteLine(ii);
ii++;
}
while (ii <= 5);
Rezultat:
1
2
3
4
5
Pogledajmo razliku:
int ii = 10;
while (ii < 5)
{
Console.WriteLine(ii);
}
Neće biti ispisa.
Ali:
int ii = 10;
do
{
Console.WriteLine(ii);
}
while (ii < 5);
ispisaće:
10
Zato što se kod do-while petlje telo izvršava pre prve provere uslova.
13. Poređenje petlji
| Struktura | Kada se proverava uslov? | Najmanje izvršavanja |
|---|---|---|
for |
pre svakog prolaza | 0 |
while |
pre svakog prolaza | 0 |
do-while |
posle prolaza | 1 |
for najčešće koristimo kada znamo broj ponavljanja.
for (int i = 1; i <= 10; i++)
while koristimo kada se ponavljanje zasniva na uslovu.
while (broj != 0)
do-while koristimo kada želimo da se blok izvrši najmanje jednom.
do
{
// naredbe
}
while (uslov);
14. Jedan primer koji povezuje bool, if i petlju
int broj = 1;
while (broj <= 10)
{
bool paran = broj % 2 == 0;
if (paran)
{
Console.WriteLine(broj + " je paran.");
}
broj++;
}
while kontroliše ponavljanje:
while (broj <= 10)
U bloku se definiše promenljiva:
bool paran = broj % 2 == 0;
Promenljiva paran ima vrednost true ili false.
Zatim se koristi u if naredbi:
if (paran)
Ovaj primer pokazuje kako se logički tip, blokovi i upravljačke strukture međusobno povezuju.
15.
if
Koristi se za donošenje odluke na osnovu uslova.
if (uslov)
{
// naredbe
}
switch
Koristi se za izbor između više mogućih vrednosti.
switch (vrednost)
{
case 1:
// naredbe
break;
}
for
Koristi se za ponavljanje kada je broj ponavljanja poznat ili lako odrediv.
for (int i = 0; i < 10; i++)
{
// naredbe
}
while
Ponavlja naredbe dok je uslov tačan.
while (uslov)
{
// naredbe
}
do-while
Izvršava blok najmanje jednom, a zatim proverava uslov.
do
{
// naredbe
}
while (uslov);
16.
Zadatak 1 – bool
Napisati program koji učitava broj i pomoću promenljive tipa bool proverava da li je broj pozitivan.
Primer:
Unesite broj: 8
Broj je pozitivan: True
Zadatak 2 – bool i if
Napisati program koji učitava godine korisnika.
Formiraj promenljivu:
bool punoletan
koja dobija vrednost na osnovu toga da li korisnik ima najmanje 18 godina.
Na osnovu te promenljive ispiši odgovarajuću poruku.
Zadatak 3 – opseg promenljive
Pokušati izvršiti sledeći program:
if (true)
{
int broj = 10;
Console.WriteLine(broj);
}
Console.WriteLine(broj);
Objasniti zašto program prijavljuje grešku.
Zatim ga ispraviti tako da promenljiva može da se koristi i posle if bloka.
Zadatak 4 – if
Napisati program koji učitava broj i ispisuje:
-
„Pozitivan broj“ ako je broj veći od nule,
-
„Negativan broj“ ako je manji od nule,
-
„Broj je nula“ ako je jednak nuli.
Zadatak 5 – switch
Napisati program koji učitava broj od 1 do 7 i ispisuje odgovarajući dan u nedelji.
Na primer:
Unesite broj: 3
Sreda
Koristiti switch.
Zadatak 6 – for
Napisati program koji pomoću for petlje ispisuje brojeve od 1 do 20.
Zatim izmeniti program tako da ispisuje samo parne brojeve.
Zadatak 7 – while
Napisati program koji pomoću while petlje ispisuje brojeve od 10 do 1.
Zadatak 8 – do-while
Napisati program koji traži od korisnika da unese broj veći od nule.
Program treba da ponavlja unos sve dok korisnik ne unese odgovarajući broj.
Obavezno koristiti do-while.
Zadatak 9 – kombinovani zadatak
Napisati program koji učitava 10 brojeva.
Za svaki broj proveriti pomoću bool promenljive da li je paran.
Ako jeste, ispisati taj broj.
Koristiti:
-
for, -
bool, -
if.
Zadatak 10 – izazov
Napraviti jednostavan program za unos lozinke.
Program treba da traži od korisnika da unese lozinku.
Ako je lozinka jednaka unapred zadatoj vrednosti, postaviti:
bool ispravna = true;
i prikazati poruku:
Lozinka je ispravna.
U suprotnom postaviti:
bool ispravna = false;
i prikazati:
Pogrešna lozinka.
17. Šta treba zapamtiti?
Najvažnije je da razumemo sledeće:
bool → true / false
bool se veoma često koristi za uslove:
bool punoletan = godine >= 18;
Upravljačke strukture omogućavaju programu da donosi odluke i ponavlja naredbe:
if → odluka
switch → izbor između više slučajeva
for → ponavljanje
while → ponavljanje dok je uslov tačan
do-while → najmanje jedno izvršavanje, zatim provera
Promenljiva definisana unutar bloka dostupna je samo u tom bloku:
{
int broj = 10;
}
Zato uvek treba obratiti pažnju na opseg (scope) promenljive.
Najvažnije nije da se strukture uče napamet, već da se razume kada i zašto se koriste.