Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Miksi tämä on ikuinen silmukka?

Sivun loppuun

Karza [11.07.2007 23:55:15]

#

Tämänhän siis pitäisi olla ikuinen... ja niin onkin, mutta en ymmärrä miksi, koska minusta ehto näkyy toteutuvan. En vain älyä... yksinkertainen juttu, mutta ei vain välähdä nyt kyllä...

int i = 0;
   while (i >= 0) {
       cout << "argh";
       ++i;
   }

Eli i = 0... niin kauan kun i on suurempi tai YHTÄ SUURI kuin 0, ehto toteutuu. Ja sehän on 0 eli YHTÄ SUURI kuin 0... miksi ehto ei toteudu? Siis ehdonhan pitäisi tuossa toteutua aivan ensilystissä... vai lisätäänkö arvoon tuo 1 ihan heti ennenkuin tuo ehtii tarkistamaan sen alkuarvon?

Antti Laaksonen [11.07.2007 23:59:25]

#

Silmukkaa juuri toistetaan niin kauan kuin ehto on tosi. Eli jos i ei koskaan muutu nollaa pienemmäksi, silmukkaa toistetaan loputtomiin.

Karza [12.07.2007 00:01:15]

#

Antti Laaksonen kirjoitti:

Silmukkaa juuri toistetaan niin kauan kuin ehto on tosi. Eli jos i ei koskaan muutu nollaa pienemmäksi, silmukkaa toistetaan loputtomiin.

miksi pitäisi muuttua nollaa pienemmäksi? siis suurempi tai yhtä suuri kuin...

Antti Laaksonen [12.07.2007 00:03:12]

#

Silmukka päättyy vasta, kun i on nollaa pienempi. Ehtohan sanoo: toistetaan seuraavaa niin kauan kuin on voimassa "i >= 0".

Karza [12.07.2007 00:07:51]

#

Antti Laaksonen kirjoitti:

Silmukka päättyy vasta, kun i on nollaa pienempi. Ehtohan sanoo: toistetaan seuraavaa niin kauan kuin on voimassa "i >= 0".

Ahh aivan... Jotenkin ajattelin, että kun i >= 0 tulee trueksi, niin silmukasta mennään pois.

Yön villejä mietteitä taas...

Antti Laaksonen [12.07.2007 00:09:39]

#

Tuo ei muuten ole kovin ikuinen silmukka, koska lukumuuttuja pyörähtää ennen pitkää ympäri ja luku muuttuu negatiiviseksi. Jos silmukasta poistaa tulostuksen, niin se voi päättyä hyvinkin nopeasti.

FooBat [12.07.2007 00:12:35]

#

Asia on niin kuin Antti sanoi, mutta tässä esimerkissä tuota silmukka ei taidetakaan toistaa aivan loputtomiin, vaan ainoastoon noin 2147483648 kertaa 32 bittisessä ympäristössä. Kun ymmärrät syyn tähän, ymmärrät jotain siitä miten tietokone käsittelee lukuja. Tätä voi kokeilla ottamalla tulostuksen pois silmukasta, jolloin sen suoritus nopeutuu.

Edit: olinpa taas hidas

Karza [12.07.2007 00:55:28]

#

FooBat kirjoitti:

Asia on niin kuin Antti sanoi, mutta tässä esimerkissä tuota silmukka ei taidetakaan toistaa aivan loputtomiin, vaan ainoastoon noin 2147483648 kertaa 32 bittisessä ympäristössä. Kun ymmärrät syyn tähän, ymmärrät jotain siitä miten tietokone käsittelee lukuja. Tätä voi kokeilla ottamalla tulostuksen pois silmukasta, jolloin sen suoritus nopeutuu.

Edit: olinpa taas hidas

Kyllä sen ymmärrän... sehän ei ollut yöllisen kysymykseni tarkoitus kuitenkaan.
Sitäpaitsi se on kohta ammattini ymmärtää tuo :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta