• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C++ program o populacji wirusów źle oblicza...

Object Storage Arubacloud
0 głosów
275 wizyt
pytanie zadane 12 kwietnia 2019 w C i C++ przez DeaDHanter Nowicjusz (210 p.)
zamknięte 14 kwietnia 2019 przez DeaDHanter

Witam mam problem stworzyłem program z 3 odcinka kursu C++ o pętlach. Ulepszyłem go że można z góry określić jak dużo ma być bakterii.

#include <iostream>
#include <windows.h>

using namespace std;

int iloscbakterii=1; int iloscgodzin=0; int oibakterii;
int main()
{
    cout << "Oczekiwana ilosc bakterii: ";
    cin >> oibakterii;
    do{
        cout <<"minelo godzin: "<<iloscgodzin<<" ilosc bakterii: "<<iloscbakterii<<endl;
        iloscgodzin++;
        iloscbakterii=iloscbakterii*2;
    } while(oibakterii>=iloscbakterii);
}

Problem jest następujący jeśli podaje liczbe 256 to jest dobrze, ale jeśli wpisze się liczbe np. 1 000 000 (milion) to wynik zatrzymuje się na 524288 zamiast przekroczyć granice miliona. Jeśli odwrócę kolejność wtedy jest na odwrót jak wpisze 256 to wypisuje jako ostanie 512 zamiast zatrzymać się 256 (bo warunek jest większy lub RÓWNY). I jeśli ktoś wie czego to wina? 

komentarz zamknięcia: Problem rozwiązany

2 odpowiedzi

+2 głosów
odpowiedź 13 kwietnia 2019 przez adrian17 Ekspert (346,840 p.)
wybrane 14 kwietnia 2019 przez DeaDHanter
 
Najlepsza

I jeśli ktoś wie czego to wina? 

Tak jest kod napisany ;) Objaśnię po kolei:

    do{
// wypisz obecna wartosc (524288)
        cout <<"minelo godzin: "<<iloscgodzin<<" ilosc bakterii: "<<iloscbakterii<<endl;
// zwieksz godziny o 1
        iloscgodzin++;
// podwoj wartosc (powyzej miliona)
        iloscbakterii=iloscbakterii*2;
// czy jest powyzej miliona? Tak, wiec koniec petli!
    } while(oibakterii>=iloscbakterii);

 

komentarz 13 kwietnia 2019 przez DeaDHanter Nowicjusz (210 p.)

dobra rozumiem błąd niepotrzebnie dodałem większe lub równe wtedy tak się dzieje wystarczy zostawić sam znak większości i wszystko działa jak trzeba szkoda że wczoraj tego nie zauważyłem ale dzięki za pomoc.

Działający dobrze kod: 

#include <iostream>
#include <windows.h>

using namespace std;

int iloscbakterii=1; int iloscgodzin=0; int oibakterii;
int main()
{
    cout << "Oczekiwana ilosc bakterii: ";
    cin >> oibakterii;
    do{
        iloscgodzin++;
        iloscbakterii=iloscbakterii*2;
        cout <<"minelo godzin: "<<iloscgodzin<<" ilosc bakterii: "<<iloscbakterii<<endl;
    } while(iloscbakterii<oibakterii);
}

 

0 głosów
odpowiedź 13 kwietnia 2019 przez Luna Cognita Dyskutant (8,130 p.)
Poczytaj o limitach typów danych, int ma bodajże -2147483647 - 2147483647 czyli 4294967294

Podobne pytania

0 głosów
3 odpowiedzi 498 wizyt
0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 19 kwietnia 2019 w C i C++ przez karateka2001 Nowicjusz (180 p.)

92,759 zapytań

141,680 odpowiedzi

320,444 komentarzy

62,102 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...