Haluaisin tietää tästä seuraavasta lauseesta
if (scorepc - panos == 0 && scorepc <= 10 && pcmind != 3 || scorepc - panos == 0 && scorepc >= 4000 && pcmind != 3)
sen, että erottaako tuo || eli tai-merkki nuo lauseet toisistaan, niin että ne ovat kaksi eri ehtoa eivätkä toimi yhdessä? Selvennystä lisää tarvittaessa. Kiitos :)
Mitä jos sitten selvittäisit asian lukemalla oppaasta, mitä || tarkoittaa ja mikä on sen arvojärjestys suhteessa muihin? Selvennystä lisää tarvittaessa. Kiitos. :)
Varsinaista kysymystäsi en ymmärtänyt. Millä tavalla "eivät toimi yhdessä"?
Auttaisiko ymmärrystäsi, jos lukisit lauseen ääneen? "JOS plaa JA plaa JA plaa TAI plaa JA plaa JA plaa NIIN".
juu lueskelin niitä jo, mutta sitä en vaan vielä ole tajunnut, että jos samassa if-lausessa on && ja || niin onko || sellainen "erottava" tekijä, jonka eri puolet ovat omat ehtonsa? Toivottavasti ymmärsit :D
E: Niin siis haluasin asioiden tapahtuvan seuraavasti:
JOS scorepc:n ja panoksen erotus on nolla JA scorepc on 10 tai vähemmän JA pcmind ei ole kolme, niin jotain. Jos edellämainitut ehdot eivät toteudu, niin katsotaan JOS scorepc:n ja panoksen erotus on nolla JA scorepc on 4000 tai enemmän JA pcmind ei ole kolme, niin jotain.
Muuten ei tapahdu mitään muutosta (NULL)
kiitoskiitos :)
Siinähän se lukee arvojärjestystaulukossa. Ylin on sitovin ja alin on vähiten sitova. OR on pohjimmainen eli vähiten sitova. Tuon voit sitä paitsi testata naurettavan nopeasti kirjoittamalla koodiin yksinkertaisen if-lausekkeen ja katsomalla tuloksen.
The Alchemist kirjoitti:
Siinähän se lukee arvojärjestystaulukossa. Ylin on sitovin ja alin on vähiten sitova. OR on pohjimmainen eli vähiten sitova. Tuon voit sitä paitsi testata naurettavan nopeasti kirjoittamalla koodiin yksinkertaisen if-lausekkeen ja katsomalla tuloksen.
yritän. olen pahoillani..
Minusta vain on jotenkin outoa, että foorumille pastetaan jokin looginen vertailu ja kysytään tulosta, kun sen olisi voinut pastea tekstieditoriin ja katsoa itse. Kun mietit asiaa hetken itse, niin tulet samaan tulokseen.
Ja sitten se kaikkein simppelein nyrkkisääntö: mikäli et ole varma operaattorien sitovuudesta tai lauseke on yksinkertaisesti niin monimutkainen, ettei voida olla varmoja koodarin tarkoitusperistä, niin käytä sulkeita.
P.S.
( scorepc-panos == 0 && pcmind != 3 && (scorepc <= 10 || scorepc >= 4000) )
Kaiken kukkuraksi tuo lauseke on harvinaisen huonosti suunniteltu. Kaksi kolmesta vertailusta on samoja ||-operaattorin eri puolilla, ja toinen näistä on kirjoitettu hämäävästi aivan tarpeettomalla vähennyslaskulla. Samaan tulokseen pääsee siis paljon helpomminkin, jos edes vähän ajattelee tuota loogisesti:
if (pcmind != 3 && scorepc == panos && (scorepc <= 10 || scorepc >= 4000))
(Edit: The Alchemist päätyi näköjään tällä välin jo lähes (mutta ei aivan) samaan tulokseen.)
Tästä järkevämmästä muodosta näkee helposti suoraan, mitä tarkistetaan. Samalla koko kysymyksestäsi tulee epäolennainen.
Yrität ilmeisesti ajatella asioita liian hankalasti. Jos Matti juo teetä tai kahvia, Matti piristyy. Onko sinusta tässä tarpeen miettiä, että jos Matti juo teetä, Matti piristyy, tai jos ei juo, niin jos Matti juo kahvia, niin Matti edelleenkin piristyy? Toivottavasti ei.
Enpähän tuohon kellonaikaan enää tajunnut tuota vähennyslaskua. Hetken jopa mietin, että se kannattaisi laskea muuttujaan talteen siisteyden vuoksi...
niin sitä käy, kun yrittää opiskella c++:aa itsenäisesti..
vesikuusi kirjoitti:
niin sitä käy, kun yrittää opiskella c++:aa itsenäisesti..
Sanoisin, että tälläkin keskustelualueella valtaosa käyttäjistä on kerryttänyt - jos ei kaiken, niin - valtaosan C++-osaamisestaan itsenäisesti opiskelemalla.
Itsenäiseen opiskeluun kuuluu eritoten kokeilu ja tutkiskelu. Itse olen opetellut kaikki ohjelmointikieleni aika pitkälti itsenäisesti. Olen opetellut vähintään alkeet ennen kuin koulussa on niitä opetettu.
Väitän ettei maailmassa ole yhtään hyvää ohjelmoijaa, joka ei olisi jotain opetellut itsenäisesti.
Väittäisin että ohjelmoinnista ei tule mitään jos sitä ei pysty kykene opiskelemaan itsenäisesti.
The Alchemist kirjoitti:
Minusta vain on jotenkin outoa, että foorumille pastetaan jokin looginen vertailu ja kysytään tulosta, kun sen olisi voinut pastea tekstieditoriin ja katsoa itse.
Ei kysyjä kysynyt tulosta, vaan sitä mitä kyseisessä vertailussa oikeasti tapahtuu. Tottakai kysyjä olisi kokeilemalla saanut tuloksen selville, mutta ei välttämättä sitä miten kyseiseen tulokseen päädyttiin.
vesikuusi kirjoitti:
JOS scorepc:n ja panoksen erotus on nolla JA scorepc on 10 tai vähemmän JA pcmind ei ole kolme, niin jotain. Jos edellämainitut ehdot eivät toteudu, niin katsotaan JOS scorepc:n ja panoksen erotus on nolla JA scorepc on 4000 tai enemmän JA pcmind ei ole kolme, niin jotain.
Suurinpiirtein. Ensin katsotaan kaikki ehdot TAI-operaattorin vasemmalta puolelta. Jos yksikin näistä ehdoista on epätosi, niin siirrytään suoraan TAI-operaattorin oikealle puolelle muita laskematta. Mutta jos kaikki ehdot TAI-operaattorin vasemmalla puolella toteutuvat, niin siirrytään suoraan tekemään jotain, ilman että oikean puolen lausekkeita ikinä käydään läpi.
En ole opasta lukenut, joten en tiedä onko asia siellä jossain paremmin selitetty, mutta ehdot suoritetaan vasemmalta oikealle yksi kerrallaan ja lopputulokseen vaikuttamattomat laskut jätetään suorittamatta kokonaan. Tätä voi käyttää hyväkseen esim. nollalla jaon estämiseen:
if (jakaja != 0 && jaettava / jakaja > 10) { // Tee jotain }
Tässä tapauksessa siis, jos jakaja on 0, ei oikealla puolella olevaa jakolaskua koskaan suoriteta. Jos taas jakaja on jokin muu kuin nolla, niin &&-operaattorin arvojärjestys takaa että operaattorin oikean puolen lauseke lasketaan ennen varsinaisen &&-operaation suorittamista. Samalla tavalla toimii myös ||-operaattori. Ja koska se on arvojärjestyksessä viimeinen, voi sen aivan hyvin ajatella jakavan lausekkeen omiin ehtoihinsa.
Parempi selitys täällä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.