Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Programowanie obiektowe] Program wykonuje złe obliczenia

Ostatnio zmodyfikowano 2010-08-07 21:31
Autor Wiadomość
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:
C/C++
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 );
};
C/C++
//main:
#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ę.
P-19549
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.
P-19551
Pirotechnik
» 2010-07-06 11:56:37
korzystaj z
using namespace std;
albo:
using std::cout;
P-19576
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.:
C/C++
std::cout << "Napis do standartowego couta" << std::endl;
LenrokSkate::cout << "Napis do własnego couta" LenrokSkate::endl;
P-19578
huberthx
Temat założony przez niniejszego użytkownika
» 2010-08-07 21:31:49
Dziękuję za pomoc. Problem rozwiązany.
P-20586
« 1 »
  Strona 1 z 1