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

Program populacja i while

Object Storage Arubacloud
+1 głos
320 wizyt
pytanie zadane 17 maja 2015 w C i C++ przez Kamil Kucharski Nowicjusz (190 p.)
Witam! Mam tutaj program "populacja" poczatkowo jest 100 ludzi; pracuja od 20 do 60 lat kazdy produkuje 2 jednostki jedzenia a zjada 1 na rok.żywość się nie kumuluje jesli zabraknie jedzenia najestarsze osoby umieraja. należy podać współczynnik urodzin a program sprawdzi ile lat populacja by przeżyła. Wydaje mi się że wszystko jest ok lecz nie wiem jak i gdzie wstawić while by wykonywalo się dopóki populacja będzie istniec.

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    int liczba_ludnosci=0,osoby_w_wieku_produkcyjnym=0,przyrost=0,rozmnazanie=0,rok=0;

cout << "Podaj roczny przyrost ludnosci na 100: "<< endl;
cin >> przyrost;

 

    int t[80];
    for(int i=0; i<80; i++)
    {
        t[i]=0;
    }

    srand(time(NULL));
    for(int i=0; i<100; i++)
    {
        int a=0;
        a=0+(rand()%(80));
        t[a]=t[a]+1;
    }

    for(int i=0; i<80; i++)
    {
        cout << t[i] << " ";
    }
    for(int i=0; i<80; i++)
    {
        liczba_ludnosci=liczba_ludnosci+t[i];
    }
    cout << "liczba ludnosci: " << liczba_ludnosci <<endl;

while(liczba_ludnosci>0)
{
rok++;
cout << "rok: "<< rok << endl;
    for( int i=19; i<60; i++)
    {
        osoby_w_wieku_produkcyjnym=osoby_w_wieku_produkcyjnym+t[i];
    }
    cout << "osoby w wieku produkcyjnym: "<< osoby_w_wieku_produkcyjnym<<endl;

 

    int zywnosc=osoby_w_wieku_produkcyjnym*2;
    cout << "wyprodukowana zywnosc: "<< zywnosc <<endl;

    if(zywnosc>liczba_ludnosci)
    {
        cout << "wszyscy przezyli" <<endl;
    }
    else
    {
        int osoby_ktore_musza_umrzec=liczba_ludnosci-zywnosc;
        for(int i=79; i>0; i--)
            if(t[i]<=osoby_ktore_musza_umrzec)
        {
            t[i]=0;
        }
        else
        {
          t[i]=t[i]-osoby_ktore_musza_umrzec;

        }
        cout << "zmarlo: " << osoby_ktore_musza_umrzec <<endl;

    }
        for(int i=0; i<80; i++)
        {
            t[i]=t[i+1];
        }

        rozmnazanie=liczba_ludnosci*przyrost/liczba_ludnosci;

        t[0]=rozmnazanie;

}

cout << "populacja przezyla: " << rok << " lat";

 

 

 

 

 

 

 

 

}

2 odpowiedzi

0 głosów
odpowiedź 17 maja 2015 przez Boshi VIP (100,240 p.)
Nie chce mi się tego analizować całego, ale w tej chwili while wykonuje się dopóki liczba ludności jest wieksza od 0. Tutaj szukaj błędu.
komentarz 17 maja 2015 przez Kamil Kucharski Nowicjusz (190 p.)
Tak. Ale właśnie o to chodzi, ma się zatrzymać dopiero jak wszyscy umrą.
komentarz 17 maja 2015 przez Boshi VIP (100,240 p.)
To daj warunek  wykonuje się dopóki wszyscy są żywi ?  żywi >0?
0 głosów
odpowiedź 17 maja 2015 przez Bartek85 Mądrala (7,440 p.)

Poniżej wklejam Twój poprawiony kod. Jak będziesz miał pytania to pytaj ;)

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cmath>
using namespace std;

int PoliczLiczbeLudnosci(int *in, int przedzialMin, int przedzialMax)
{
	int n = 0;
	for(int i = przedzialMin; i < przedzialMax; i++)    
		n += in[i];
	return n;
}

void PostarzejKazdegoORok(int *in, int przedzialMin, int przedzialMax)
{
	for(int i = przedzialMax - 1; i > przedzialMin; --i)
		in[i] = in[i - 1]; 
}

 int main()
{
	const int przedzialWiekowyMax	= 80;
	const int przedzialWiekowyMin	= 0;
	const int wiekProdukcyjnyMin	= 20;
	const int wiekProdukcyjnyMax	= 60;

    int liczba_ludnosci				= 0,
		osoby_w_wieku_produkcyjnym	= 0,
		przyrost					= 0,
		rozmnazanie					= 0,
		rok							= 0;

	cout << "Podaj roczny przyrost ludnosci na 100: "<< endl;
	cin >> przyrost;

    int t[przedzialWiekowyMax];
	memset(t, 0, przedzialWiekowyMax*sizeof(int));
	
    srand(time(NULL));
    for(int i=0; i<100; i++)
    {
		//Poprawiony.
		int a = przedzialWiekowyMin + (rand()%(przedzialWiekowyMax));
		t[a] += 1;
    }

    for(int i=przedzialWiekowyMin; i<przedzialWiekowyMax; i++)
        cout << t[i] << " ";

	liczba_ludnosci = PoliczLiczbeLudnosci(t, przedzialWiekowyMin, przedzialWiekowyMax);
    
    cout << "liczba ludnosci: " << liczba_ludnosci <<endl;

	while(liczba_ludnosci > 0)
	{		
		cout << "rok: "<< rok << endl;
		liczba_ludnosci = PoliczLiczbeLudnosci(t, przedzialWiekowyMin, przedzialWiekowyMax);

		osoby_w_wieku_produkcyjnym = 0;
		
		for( int i=wiekProdukcyjnyMin; i <= wiekProdukcyjnyMax; i++)		
			osoby_w_wieku_produkcyjnym += t[i];
		
		cout << "osoby w wieku produkcyjnym: " << osoby_w_wieku_produkcyjnym << endl;	 

		int zywnosc = osoby_w_wieku_produkcyjnym*2;
		cout << "wyprodukowana zywnosc: "<< zywnosc <<endl;

		if(zywnosc < liczba_ludnosci)		
		{
			int osoby_ktore_musza_umrzec = std::abs(zywnosc - liczba_ludnosci);
			cout << "zmarlo: " << osoby_ktore_musza_umrzec <<endl;

			for(int i=przedzialWiekowyMax - 1; i >= przedzialWiekowyMin && osoby_ktore_musza_umrzec > 0; i--)
			{
				if(t[i] - osoby_ktore_musza_umrzec < 0)
				{
					osoby_ktore_musza_umrzec -= t[i];
					t[i] = 0;
				}
				else
				{
					t[i] -= osoby_ktore_musza_umrzec;
					osoby_ktore_musza_umrzec = 0;					
				}
			}
		}		

		// Każdy się starzeje
		PostarzejKazdegoORok(t, przedzialWiekowyMin, przedzialWiekowyMax);
		
		rozmnazanie=liczba_ludnosci*przyrost/100.0;
		t[0]=rozmnazanie;		

		rok++;
	}

	cout << "populacja przezyla: " << rok << " lat";
	getchar();

	return 0;
}

 

komentarz 17 maja 2015 przez Bartek85 Mądrala (7,440 p.)
Oczywiście, sprawdź czy działa po Twojej myśli. W Twoim opisie były miekie założenia, więc pewne sprawy każdy mógł zinterpretować po swojemu.

Podobne pytania

0 głosów
1 odpowiedź 6,433 wizyt
pytanie zadane 7 października 2015 w C i C++ przez Armando Obywatel (1,870 p.)
0 głosów
3 odpowiedzi 938 wizyt
0 głosów
3 odpowiedzi 174 wizyt
pytanie zadane 17 maja 2015 w C i C++ przez Kamil Kucharski Nowicjusz (190 p.)

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...