Ако на програмирање долазите из математичке позадине, овај суптилан детаљ може лако да вас ухвати.

Ц++ је широко коришћен програмски језик, али и језик у којем су грешке у програмирању најчешће. Многе од ових грешака су последица логичких грешака. Нарочито, грешке направљене током операција поређења могу утицати на тачност и поузданост вашег кода.

Језик Ц++ има једну посебну грешку у поређењу коју многи нови програмери занемарују. Ова грешка је резултат нетачног разумевања како оператери раде када врше вишеструка поређења. Сазнајте како да избегнете ову уобичајену грешку и зашто се уопште јавља.

Поређења у Ц++

Програмски језик Ц++ нуди много различитих функција и алата, заједно са основним операцијама као што су оператори поређења. Оператори поређења су специјалне операције у програмским језицима које можете користити за међусобно упоређивање података. Програмери често користе ове операторе, посебно када креирају алгоритаме.

Операторе поређења можете видети у многим различитим примерима у свакодневном животу. На пример, када купујете у продавници, користите ове оператере на уму да бисте упоредили цене. Ако је цена једног производа нижа од цене другог, ви бирате тај производ.

instagram viewer

Можете видети операторе поређења у иф-елсе изјаве веома често. Оператори поређења су место где можете да проверите да ли је једна вредност већа, мања или једнака другој вредности. Постоји врло мали, али важан детаљ који не треба занемарити. Резултати израза за поређење враћају тачно или нетачно, што су логичке вредности. Ове вредности су једна од основних компоненти контролне структуре у програмирању.

На пример, у програмском језику Ц++, "==" оператор проверава да ли су две вредности једнаке. Ако су вредности једнаке, резултат враћа труе. У супротном, резултат ће бити лажан.

ако (а == б)
{
повратакистина;
}
друго
{
повратаклажно;
}

Пример проблема поређења

Једна од уобичајених грешака почетника у Ц++-у је употреба оператора поређења. Ови оператори омогућавају програмерима да упореде две вредности и изврше различите операције на основу резултата тог поређења. Међутим, погрешно коришћење ових оператора може изазвати неочекиване грешке.

На пример, иако је израз 3 < 15 < 10 математички нетачан, Ц++ сматра да је његов резултат тачан. То можете демонстрирати писањем следећег једноставног програма за тестирање.

Прво креирајте датотеку под називом тест.цпп. Отворите ову датотеку користећи свој омиљени уређивач кодова и додајте му следећи код.

#укључити
инт а = 15;

интглавни()
{
ако (3 < а < 10)
{
стд::цоут << "фоо" << стд::ендл;
}
друго
{
стд::цоут << "бу" << стд::ендл;
}

повратак0;
}

Можете користити ову команду за компајлирање и покретање кода:

г++ тест.цпп -о Тест

Сада имате програм под називом Тест. Покрените програм и испитајте његов излаз.

Ц++ је сматрао да је 3 < 15 < 10 тачно када је покренуо овај програм. Зашто би резултат могао испасти на овај начин, иако је то математички нетачна изјава?

Узроци проблема поређења у Ц++

Као и већина програмских језика, Ц++ чита код с лева на десно. Сваки оператор поређења производи логичку вредност. Булове вредности не значе само тачно и нетачно; имају математички еквивалент.

Принцип рада а рачунар зависи од јединица и нула. За рачунар, резултат нечега је или истинит или лажан. Рачунарски програми обично третирају број 1 као тачан, а број 0 као нетачан.

Поново испитај проблем поређења и прочитај исказ с лева на десно; видећете да постоје два различита поређења. Прво поређење је између бројева 3 и 15. Ово је права вредност јер је 3 мање од 15.

Друго поређење је између тог резултата и броја 10. Пошто треба да изврши нумеричко поређење, Ц++ тихо конвертује логичку праву вредност у 1. 1 је мање од 10, тако да је укупан резултат тачан.

У закључку, иако изгледа као математичка заблуда, ова изјава је тачна за Ц++ и рачунаре.

Како решити проблеме са поређењем у Ц++

Ц++, заједно са већином других програмских језика, користи другачију синтаксу за логичко поређење од традиционалне математике. Математички израз 3 < а < 15 значи „3 је мање од а и а је мање од 15.” Међутим, као што сте видели, Ц++ другачије тумачи тај израз.

За представљање и у Ц++, користите && оператор. Затим можете уланчати логичке изразе заједно и изградити логику користећи операторе попут && да представља И, || да представља ОР, и ! да представља НЕ. Језици попут Јава користи исте логичке операторе.

Користећи исправан логички оператор, можете поправити грешку у претходном примеру:

#укључити
инт а = 15;

интглавни()
{
ако (3 < а && а < 10)
{
стд::цоут << "фоо" << стд::ендл;
}
друго
{
стд::цоут << "бу" << стд::ендл;
}

повратак0;
}

Сада ће овај код тестирати да ли је вредност а већа од 3 и да ли је вредност а мања од 10. Саставите и покрените програм и посматрајте резултат.

Претходни пример је штампао „фоо“, али програм сада штампа „боо“, како је предвиђено. Боолеан вредност леве стране поређења (3 < а) је тачна. Вредност десне стране (а < 10) је нетачна. Од истинито и лажно је увек лажно, укупни израз се процењује на нетачно, тако да тај услов не успева и друго блок рунс.

Покушајте да промените И (&&) оператор на ОР (||) и посматрајући другачији резултат.

Важност логичких провера у Ц++

Логичка поређења у Ц++-у укључују употребу логичких вредности и оператора поређења. Уверите се да користите исправне логичке вредности и операторе поређења да контролишете рад својих програма. Може бити тешко уочити лоше обликоване изразе јер ће Ц++ често имати другачије понашање уместо да у потпуности пропадне.

Сада знате како компајлери игноришу овај проблем и третирају свако поређење као логичку вредност када читају с лева на десно. Пазите на овај проблем на било ком језику који користите и научите да препознате његове ефекте како бисте били корак испред.