Tarttis apua ongelmaan jonka kaveri lähetti.

Mulla ja kaverilla on jatkuva paremmuus kilpailu kielistä. Nyt hän lähetti seuravaanlaisen viestin:
Tarkastele seuraavaa lauseketta: i--%5>0

a) Mikä on lausekkeen tulos, jos i:n arvo on alussa 10?
b) Muotoile lauseketta niin, että se tuottaa saman tuloksen, mutta on helpompi lukea.

Help. kaveri ei suostu auttaa. Me saadaan kysyä apua ulkopuolisilta, mutta sillä ehdolla että toinen antaa luvan ja saa luvan avun tarpeeseen myöhemmin.
Ilmianna
Jaa

17 Vastausta



Noo joo. Ja viesti jossa tää tuli oli C kielen salaisuuksia joten siitä päättelin että tänne ois.
Ilmianna
Jaa
Python ratkaisu

i=10
print(i--5>0)

Tulos on TRUE

Linux Mint 18.1 Serena
Xfce 64-bit
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
Huomaa siinä oli % merkki, eli jakojäännös.

Miinusmerkit i:n jälkeen taas meinaa, että i:n vähennys yhdellä tehdään vasta lausekkeen jälkeen.

Eli 10 % 5 = 0.

0 > 0 = false.
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
a) 0
b) kysymyksessä ei ole järkeä
Ilmianna
Jaa
"paremmuus kilpailu kielistä"

Huonoa kieltä. Taisit hävitä.
Ilmianna
Jaa
a) false, numeroarvona 0.
b) i-- % 5 > 0

Ei tuossa mitään vaikeaa ole, mutta välilyönneillä ryhmittely selkeyttää ehkä hieman ja on muutenkin suositeltavaa ettei kaikkea kirjoiteta yhteen pötköön. Saman tuloksen toki saa myös, jos vähentää i:tä erikseenkin.
Ilmianna
Jaa
Selvä kaveri näköjään lähetti infoa: Hän päätti olla laiska ja ottaa tuon AMK moodlesta, eli hänen tehtävänsä.
Ilmianna
Jaa
Eikös tuo ole että i-muuttujasta vähennetään 5% 0:sta, eli i=i, sen arvo ei muutu.
Kommentoi
Ilmianna
Jaa
1 VASTAUS:
Eikös prosenttimerkki yleensä meinaa jakojäännöstä, ainakin C:ssä ja sen sukuisissa ?
Kommentoi
Ilmianna
Jaa
+Lisää kommentti
a)
i-- tarkoittaa sama kuin i - 1
(i-1)%5 tarkoittaa jakojäännöstä, kun (i-1) jaetaan 5:llä.
i on lähtötilanteessa 10
->(10-1)%5 = 9%5 = 4

ja kun suoritetaan vertailu 4>0 on tuloksena tosi.

b) (i-1)mod5>0
Ilmianna
Jaa
i-- tarkoittaa, että lausekkeessa käytetään i:n alkuperäistä arvoa ja sitä vähennetään vasta sen jälkeen. Eli kun i on alussa kymmenen, lasketaan 10%5, joka on nolla, joka ei ole suurempi kuin nolla, eli tulos on "false". i:n arvo laskennan jälkeen on 9.
Ilmianna
Jaa
Esimerkki koodista josta toiset tykkää ja toiset välttää kun sitä on vaikea hahmottaa. Lauseista saa kyllä lyhyitä ja tehokkaita. Kääntäjä osaa kyllä tehdä hyvää koodia lauseesta i= i-1 . i-- käyttö ei tee koodista nopeampaa. i-- merkitsee tosiaan sitä, että vähennys tehdään vasta lauseen laskemisen jälkeen. --i taas sitä, että vähennys tehdään ensin.
Ilmianna
Jaa
Joo, siis kyseessä true/false lauseke, jonka ratkaisu riippuu i:n sen hetkisestä arvosta.

a) i--%5>0 kun i = 10.
Tässä suoritetaan ensin i--, jolloinka i on 9
seuraavaksi otetaan jakojäännös 9:stä, kun jaetaan 5:lla, eli saadaan 1 (C pyöristää alaspäin).
1 > 0, joten lauseke on tosi.

b)

int i = 10;
i--;
int jakojaannos = i % 5;
if (jakojaannos > 0) {
// ...... tee jotakin...
}
Kommentoi
Ilmianna
Jaa
4 VASTAUSTA:
Sinäpäs pitkähkön vastauksen tuollaiseen trivialiteettiin kirjoittelit.
Kommentoi
Ilmianna
Jaa
minkkilaukku kirjoitti:
Sinäpäs pitkähkön vastauksen tuollaiseen trivialiteettiin kirjoittelit.
Ja vielä väärin, hih!
Kommentoi
Ilmianna
Jaa
minkkilaukku kirjoitti:
Ja vielä väärin, hih!
Missä kohtaa väärin?
Kommentoi
Ilmianna
Jaa
minkkilaukku kirjoitti:
Ja vielä väärin, hih!
Joohei, hihhih! Huomasinkin jo hihhih!
Kommentoi
Ilmianna
Jaa
+Lisää kommentti

Vastaa alkuperäiseen viestiin

Tarttis apua ongelmaan jonka kaveri lähetti.

Mulla ja kaverilla on jatkuva paremmuus kilpailu kielistä. Nyt hän lähetti seuravaanlaisen viestin:
Tarkastele seuraavaa lauseketta: i--%5>0

a) Mikä on lausekkeen tulos, jos i:n arvo on alussa 10?
b) Muotoile lauseketta niin, että se tuottaa saman tuloksen, mutta on helpompi lukea.

Help. kaveri ei suostu auttaa. Me saadaan kysyä apua ulkopuolisilta, mutta sillä ehdolla että toinen antaa luvan ja saa luvan avun tarpeeseen myöhemmin.

5000 merkkiä jäljellä

Peruuta