Садржај
3 Променљиве, подаци, типови
3.5 Текстуални подаци (стрингови, ниске)
4 Гранања
4.7 Гранања - разни задаци
5 Петље
5.1 Врсте петљи
5.2 Наредбе break и continue
6 Статички методи
6.4 Корист од метода
7 Низови
7.2 Низови - вежбање
8 Матрице
9 Кориснички дефинисани типови
10 Фајлови

Сложени услови

У приручнику Увод у програмирање у програмском језику C# погледајте поглавља 3.3 и 3.4 (стране 47-56).


Подсетимо се, логички тип података се у програмима означава са bool, а променљиве логичког типа могу имати вредност true или false. Изрази чија је вредност логичког типа се краће називају логички изрази.

Логички изрази који се најчешће појављују у програмима се добијају као резултат поређења. Овакве изразе смо и до сада користили као услове у if наредбама, то су изрази попут (a < b), (x <= y), (m != n) итд.

Као што знамо, логички изрази могу да се граде и применом логичких оператора (негације, конјункције и дисјункције) на мање логичке изразе. Коришћењем ових оператора можемо, на пример, овако да формулишемо услов да бар један од датих бројева a и b припада затвореном интервалу [0, 100] и искористимо га у наредби гранања:

if (a >= 0 && a <= 100 || b >= 0 && b <= 100)
    Console.WriteLine("Bar jedan od brojeva a i b je u intervalu [0, 100].");
else
    Console.WriteLine("Ni jedan od brojeva a i b nije u intervalu [0, 100].");

Приоритет оператора && и || је такав да нам у овом услову нису потребне помоћне заграде. Поновимо, оператор && је вишег приоритета него ||, а сваки логички оператор па и || је вишег приоритета него релацијски оператори >=, <=, <, >, ==, !=.

Ако хоћемо да проверимо да ли је цео број x позитиван и при томе дељив бар једним од бројева 2 и 3, треба да користимо додатне заграде за наметање редоследа рачунања који нам одговара:

if (x > 0 && (x % 2 == 0 || x % 3 == 0))
    ...

Заграде могу да се пишу и онда када не мењају редослед израчунавања. Додавање заграда може да повећа читљивост кода и помогне онима који желе да разумеју наш програм а нису сигурни у приоритет појединих оператора. Заграде свакако треба додати и кадa сами нисмо сигурни у приоритет оператора. Према томе, нема ничег погрешног ни у писању

if ((a >= 0 && a <= 100) || (b >= 0 && b <= 100))
    ...

или чак

if (((a >= 0) && (a <= 100)) || ((b >= 0) && (b <= 100)))
    ...

Још један начин да формирамо сложени услов је да користимо логичке променљиве и да одређени сложени услов градимо постепено, у више наредби. На пример, услов да ли је бар један од бројева a и b у интервалу [0, 100] може да се формира и овако:

bool barJedanUIntervalu = false;
barJedanUIntervalu = barJedanUIntervalu || a >= 0 && a <= 100;
barJedanUIntervalu = barJedanUIntervalu || b >= 0 && b <= 100;
if (barJedanUIntervalu)
    ...

што се може нешто краће написати и овако:

bool barJedanUIntervalu = false;
barJedanUIntervalu ||= a >= 0 && a <= 100;
barJedanUIntervalu ||= b >= 0 && b <= 100;
if (barJedanUIntervalu)
    ...

Такође, можемо да користимо и if наредбе:

bool barJedanUIntervalu = false;
if (a >= 0 && a <= 100)
    barJedanUIntervalu = true;

if (b >= 0 && b <= 100)
    barJedanUIntervalu = true;

if (barJedanUIntervalu)
    ...

Почетна вредност логичке променљиве је у свакој варијанти кода једнака false зато што рачунамо дисјункцију неких подизраза и довољно је да било који од тих подизраза буде тачан да би променљива добила вредност true. Другим речима, користимо особину дисјункције да је \(\bot \lor x = x\) за било које \(x\) (у програмерском запису: false || x == x), то јест да је \(\bot\) (не-те, односно false) неутрални елемент за операцију дисјункције.

Покушајте најпре да решите квиз који следи, а затим и задатке у којима треба користити сложене услове и/или логичке променљиве.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+