Kui tulete programmeerimise juurde matemaatilise taustaga, võib see peen detail teid hõlpsalt silmatorkavalt tabada.

C++ on laialdaselt kasutatav programmeerimiskeel, kuid ka programmeerimisvead kõige levinumad. Paljud neist vigadest on tingitud loogikavigadest. Eelkõige võivad teie koodi täpsust ja usaldusväärsust mõjutada võrdlustoimingute käigus tehtud vead.

C++ keelel on üks konkreetne võrdlusviga, mida paljud uued arendajad kahe silma vahele jätavad. See viga tuleneb valest arusaamast, kuidas operaatorid mitme võrdluse tegemisel töötavad. Siit saate teada, kuidas seda levinud viga vältida ja miks see üldse juhtub.

Võrdlused C++ keeles

Programmeerimiskeel C++ pakub palju erinevaid funktsioone ja tööriistu koos põhitoimingutega, nagu võrdlusoperaatorid. Võrdlusoperaatorid on programmeerimiskeelte eritoimingud, mille abil saate andmeid omavahel võrrelda. Arendajad kasutavad neid operaatoreid üsna sageli, eriti algoritmide loomisel.

Võrdlusoperaatoreid näete igapäevaelus paljudes erinevates näidetes. Näiteks toidupoes ostes kasutate neid operaatoreid hindade võrdlemiseks. Kui ühe toote hind on madalam kui teisel, valite selle toote.

instagram viewer

Võrdlusoperaatoreid näete jaotises kui-muidu avaldused Üsna tihti. Võrdlusoperaatorid on koht, kus kontrollida, kas üks väärtus on suurem, väiksem või võrdne mõne muu väärtusega. Seal on väga väike, kuid oluline detail, mida ei tohiks kahe silma vahele jätta. Võrdlusavaldiste tulemused tagastavad tõese või väära, mis on tõeväärtused. Need väärtused on programmeerimise juhtimisstruktuuri üks põhikomponente.

Näiteks C++ programmeerimiskeeles on "==" operaator kontrollib, kas kaks väärtust on võrdsed. Kui väärtused on võrdsed, tagastab tulemus tõene. Vastasel juhul on tulemus vale.

kui (a == b)
{
tagasitõsi;
}
muidu
{
tagasivale;
}

Võrdlusprobleemi näide

Üks levinumaid vigu, mida C++ algajad teevad, on võrdlusoperaatorite kasutamine. Need operaatorid võimaldavad programmeerijatel võrrelda kahte väärtust ja teha selle võrdluse tulemuse põhjal erinevaid toiminguid. Nende operaatorite ebaõige kasutamine võib aga põhjustada ootamatuid tõrkeid.

Näiteks kuigi avaldis 3 < 15 < 10 on matemaatiliselt vale, peab C++ selle tulemust tõeseks. Saate seda demonstreerida, kirjutades järgmise lihtsa testiprogrammi.

Esiteks looge fail nimega test.cpp. Avage see fail oma lemmikkoodiredaktor ja lisage sellele järgmine kood.

#sisaldama
int a = 15;

intpeamine()
{
kui (3 10)
{
std::cout << "foo" << std::endl;
}
muidu
{
std::cout << "boo" << std::endl;
}

tagasi0;
}

Selle käsu abil saate koodi kompileerida ja käivitada:

g++ test.cpp -o Test

Nüüd on teil programm nimega Test. Käivitage programm ja uurige selle väljundit.

C++ pidas selle programmi käivitamisel tõeseks väärtust 3 < 15 < 10. Miks võib tulemus nii välja tulla, kuigi see on matemaatiliselt vale väide?

C++ võrdlusprobleemi põhjused

Nagu enamik programmeerimiskeeli, loeb C++ koodi vasakult paremale. Iga võrdlusoperaator loob tõeväärtuse. Boole'i ​​väärtused ei tähenda ainult tõest ja valet; neil on matemaatiline vaste.

Tööpõhimõte a arvuti oleneb ühtedest ja nullidest. Arvuti jaoks on millegi tulemus kas tõene või vale. Arvutiprogrammid käsitlevad tavaliselt arvu 1 tõesena ja arvu 0 valena.

Uurige võrdlusülesannet uuesti ja lugege väidet vasakult paremale; näete, et on kaks erinevat võrdlust. Esimene võrdlus on numbrite 3 ja 15 vahel. See on tõeline väärtus, sest 3 on väiksem kui 15.

Teine võrdlus on selle tulemuse ja arvu 10 vahel. Kuna C++ vajab arvulist võrdlust, teisendab see vaikselt tõeväärtuse 1-ks. 1 on väiksem kui 10, seega on üldtulemus tõene.

Kokkuvõtteks võib öelda, et kuigi see näib olevat matemaatiline eksitus, kehtib see väide C++ ja arvutite kohta.

Kuidas lahendada võrdlusprobleeme C++ keeles

C++ koos enamiku teiste programmeerimiskeeltega kasutab loogiliseks võrdluseks teistsugust süntaksit kui traditsiooniline matemaatika. Matemaatiline avaldis 3 < a < 15 tähendab "3 on väiksem kui a ja a on väiksem kui 15. Kuid nagu olete näinud, tõlgendab C++ seda väljendit erinevalt.

C++-s ja esitamiseks kasutage operaatorit &&. Seejärel saate aheldada tõeväärtuslikud avaldised ja luua loogikat selliste operaatorite abil nagu && esindama JA, || esindama VÕI ja ! esindama EI. Keeled nagu Java kasutab samu loogilisi operaatoreid.

Õiget loogilist operaatorit kasutades saate vea parandada eelmises näites:

#sisaldama
int a = 15;

intpeamine()
{
kui (3 < a && a < 10)
{
std::cout << "foo" << std::endl;
}
muidu
{
std::cout << "boo" << std::endl;
}

tagasi0;
}

Nüüd kontrollib see kood, kas väärtus a on suurem kui 3 ja kas väärtus a on väiksem kui 10. Kompileerige ja käivitage programm ning jälgige tulemust.

Eelmises näites trükiti sõna "foo", kuid programm trükib nüüd "boo", nagu ette nähtud. Võrdluse vasaku poole Boolean väärtus (3 < a) on tõene. Parema külje väärtus (a < 10) on väär. Alates tõene ja vale on alati vale, hindab üldavaldis väärtuseks Väär, nii et tingimus ebaõnnestub ja muidu plokk jookseb.

Proovige JA vahetada (&&) operaator VÕI (||) ja erineva tulemuse jälgimine.

Loogiliste kontrollide tähtsus C++ keeles

Loogilised võrdlused C++ keeles hõlmavad tõeväärtuste ja võrdlusoperaatorite kasutamist. Veenduge, et kasutaksite oma programmide toimimise juhtimiseks õigeid tõeväärtusi ja võrdlustehtereid. Halvasti vormistatud väljendeid võib olla raske märgata, kuna C++ käitub sageli erinevalt, mitte ei vea täielikult läbi.

Nüüd teate, kuidas kompilaatorid seda probleemi ignoreerivad ja vasakult paremale lugedes käsitlevad iga võrdlust tõeväärtusena. Jälgige seda probleemi igas kasutatavas keeles ja õppige ära tundma selle mõju, et saaksite olla sammu võrra ees.