[Programowanie obiektowe] Program wykonuje złe obliczenia
Ostatnio zmodyfikowano 2010-08-07 21:31
| huberthx Temat założony przez niniejszego użytkownika | [Programowanie obiektowe] Program wykonuje złe obliczenia » 2010-07-05 23:04:37 Witam. Jestem tutaj nowy i to mój pierwszy post. Zaznaczam że dopiero  się uczę języka c++. Pisze program który ma symulować życie ssaków i ryb. Będzie on polegał na tym że użytkownik będzie wpisywał ilość tlenu którą będzie posiadało otoczenie, ilość ssaków i ryb a efektem końcowym jego działania będzie podana długość życia ssaków i ryb oraz ilość jaka z nich przeżyje po uwzględnieniu ilości tlenu jaką otrzymają od wody i atmosfery. Próba napisania całego programu od początku do końca skończyła się ogromną ilością błędów podczas kompilacji. Dlatego postanowiłem że będę pisał program stopniowo, obserwował jego działania i w ten sposób chcę uniknąć wielu błędów. Problem pojawił się na samym początku. Program po otrzymaniu pewnej ilości tlenu od użytkownika odpowiednio przelicza ile zostanie go w otoczeniu ale gdy chcę ten tlen przekazać dla wody wyniki jakie otrzymuję całkowicie mijają się z działaniem jakie wykonałem (chodzi o funkcję pobierztlenodotoczenia). Oto kod: klasy: class otoczenie{
 public:
 float tlen;
 float tlenatmosfera;
 float pobierztlen();
 };
 class woda
 : public otoczenie
 {
 public:
 float tleniwoda;
 float pobierztlenodotoczenia();
 };
 funkcje:
 float otoczenie::pobierztlen()
 {
 tlenatmosfera =( tlen * 0.6 );
 };
 float woda::pobierztlenodotoczenia()
 {
 tleniwoda =( tlenatmosfera / 2 );
 };
 
#include <iostream>
 #include <conio.h>
 #include "klasy.h"
 #include "funkcje.cpp"
 
 
 main()
 {
 otoczenie otoczenieobiekt;
 woda wodaobiekt;
 std::cin >> otoczenieobiekt.tlen;
 otoczenieobiekt.pobierztlen();
 wodaobiekt.pobierztlenodotoczenia();
 std::cout << "W atmosferze zostalo " << otoczenieobiekt.tlenatmosfera << " tlenu." << std::endl;
 std::cout << "W wodzie jest " << wodaobiekt.tleniwoda << " tlenu." << std::endl;
 getch();
 };
Za pomoc dziękuję. | 
|  | 
| DejaVu | » 2010-07-05 23:21:21 Utworzyłeś metody które nie zwracają wartości. Jeżeli uczysz się programowania to nie powinieneś zaczynać od programowania obiektowego.
 /edit:
 Poza tym operujesz na różnych obiektach i każdy obiekt ma inne dane, więc dostajesz wyniki nieoczekiwane.
 | 
|  | 
| Pirotechnik | » 2010-07-06 11:56:37 korzystaj z using namespace std; albo: using std::cout; | 
|  | 
| lenrokskate | » 2010-07-06 11:59:21 @Pirotechnik nie odzywaj się, namespacy są po to, żeby się nazwy nie biły a ty mu każesz dawać usingi poprawnie nie powinno się używać using namespace ani tym podobnych, zobaczysz jak będziesz miał większy projekt i np. napiszesz własną funkcję do wyśweitlania tekstu to będziesz miał np.: std::cout << "Napis do standartowego couta" << std::endl;LenrokSkate::cout << "Napis do własnego couta" LenrokSkate::endl;
 
 | 
|  | 
| huberthx Temat założony przez niniejszego użytkownika | » 2010-08-07 21:31:49 Dziękuję za pomoc. Problem rozwiązany.  | 
|  | 
| « 1 » |