Eyebullet Posted April 17, 2009 Report Share Posted April 17, 2009 Ostatnio naszla mnie ochota, zeby sprawdzic czy udaloby mi sie rozwiazac jakiekolwiek zadanie maturalne z informatyki. I znalazlem jakis stary arkusz, wybralem w nim dosc proste w zalozeniu zadanie: Polana o powierzchni 30000 m2 jest częściowo porośnięta trawą. Na polanie żyje pewna ilość królików, które żywią się trawą. Króliki żerują dwa razy dziennie: o świcie oraz o zmierzchu. Podczas każdego posiłku jeden królik zjada trawę z ćwierci metra kwadratowego polany. Trawa na polanie odrasta: od świtu do zmierzchu każdego dnia 5% nie zarośniętej powierzchni polany pokrywa się znów trawą, natomiast ilość królików nie zmienia się. 1 maja 2002 roku o godzinie 0:00 połowa powierzchni polany była porośnięta trawą, zaś na polanie żyło 100 królików. Napisz program, ktory obliczy: Jaka część polany (w procentach) będzie zarośnięta 1 czerwca 2002 roku tuż przed wieczornym posiłkiem królików? Okazuje sie ze moje umiejetnosci programowania sa niskie i niestety nie uzyskalem poprawnego wyniku. I tu nasuwa sie moje pytanie: Dlaczego? Oto kod mojego programu (dodaje z komentarzami ): #include <cstdlib> #include <iostream> #include <stdio.h> #define kroljedz 25 /* 1 krolik je 0.25m2 - 100 krolikow 25m2 - stad stala */ #define polana 30000 /* Pole polany */ main() { int dni; /* dni- licznik a- polana zarosnieta b- niezarosnieta c- 5% niezerosnietej polany, ktora pokrywa sie trawa */ double trawa, c, b, a; char litera='%'; a=15000.0; b=15000.0; dni=0; do { ++dni; a=a-2*kroljedz; /* Króliki zjadaja zarosnieta czesc polany */ b=b+2*kroljedz; /* Zjedzona czesc polany staje sie niezarosnieta */ c=b*5/100; /* Obliczanie 5% z niezarosnietej czesci polany */ a=a+c; /* 5% niezarosnietej trawy staje sie zarosnieta */ b=b-c; }while (dni <= 31); /* Petla dla liczby dni od 1 maja do 31 maja 2002. */ /* Dzień 1 czerwca */ a=a-kroljedz; trawa=a*100/polana; printf("Procent zarosnietej czesci polany wynosi %g",trawa); printf("%c\n",litera); system("PAUSE"); return EXIT_SUCCESS; } Prawidlowa odpowiedz wynosi: 87,78% Prosilbym o wskazanie tego, co zrobilem zle, ale takze chetnie zobacze inne sposoby rozwiazania tego zadania. Wiem, ze struktura programu pozostawia wiele do zyczenia, ale ucze sie dopiero od niedawna i specjalnie nie myslalem nad minimalizacja tego kodu. Uzywam Dev C++ 4.9.9.2, jezeli ma to jakies znaczenie. Link to comment Share on other sites More sharing options...
wies.niak Posted April 17, 2009 Report Share Posted April 17, 2009 W tym jest więcej matmy niż programowania. Zwróć uwagę, że posiłków będzie 63 (31*2 za maj + 1 za pierwszy posiłek czerwca). Twoje króliki jedzą 2 posiłki po czym trawa odrasta, a wg. treści zadania króliki jedzą z rana, trawa odrasta po czym jest drugi posiłek. W nocy trawa nie odrasta i cykl się powtarza. Niech króliki zjedzą, trawa odrośnie, a później faktycznie możesz jechać pętlą tak, jak to robisz. PS. Tytuł tematu zmieniłem na bardziej konkretny. Link to comment Share on other sites More sharing options...
Eyebullet Posted April 18, 2009 Author Report Share Posted April 18, 2009 Twoje króliki jedzą 2 posiłki po czym trawa odrasta, a wg. treści zadania króliki jedzą z rana, trawa odrasta po czym jest drugi posiłek. Masz racje, po wprowadzeniu zmian zadzialalo. Popelnilem jeszcze blad z dniami. 1 czerwca zrobilem osobno, a petla zaczynala sie od dnia 0 do 31, czyli powtarzala sie 32 razy, a nie 31. Tez poprawilem. Po zaokragleniu wyniku do 2 miejsc po przecinku wyszedl poprawny wynik. Dzieki za pomoc. Link to comment Share on other sites More sharing options...