[C++] Drzewo genealogiczne trutnia i pszczoły
Ostatnio zmodyfikowano 2012-02-09 23:43
bartelemii Temat założony przez niniejszego użytkownika |
[C++] Drzewo genealogiczne trutnia i pszczoły » 2012-02-09 23:43:57 Witam forumowiczów, mam za zadanie stworzenie programu, który wygeneruje i wyświetli "drzewo genealogiczne" trutnia - czyli męskiego osobnika pszczoły - do podanego pokolenia. Z biologicznego punktu widzenia wygląda to tak: -truteń: powstaje z niezapłodnionego jaja (czyli ma tylko matke, nie ma ojca) -pszczoła: powstaje z zapłodnionego jaja (ma matke i ojca) Ilość osobników w kolejnym pokoleniu można policzyć ze wzoru fibonacciego. Jest to chyba dość znany matematyczny problem, bo znalazłem kilka objaśnień. Ale do rzeczy, mam już taki kod: main.cpp #include <iostream> #include "variables.h"
using namespace std;
int main() { Owad Drzewo( truten ); cout << "Wstawianie" << endl; int nLicznik = 0; Drzewo.filltree( 3, & nLicznik ); cout << "Wyswietlanie" << endl; Drzewo.printpostorder(); return 0; } variables.h enum SEX { pszczola, truten };
typedef class Owad Owad; class Owad { public: SEX plec; Owad * ojciec; Owad * matka; void filltree( int generations, int * count ); void printinorder(); void printpostorder(); Owad( SEX x ) : plec( x ) { ojciec = matka = 0; } }; functions.cpp #include "variables.h" #include <iostream>
void Owad::filltree( int generations, int * count ) { if( * count != generations ) { switch( plec ) { case truten: matka = new Owad( pszczola ); ++count; break; case pszczola: matka = new Owad( pszczola ); ojciec = new Owad( truten ); ++count; break; } this->ojciec->filltree( generations, count ); this->matka->filltree( generations, count ); } else return; }
void Owad::printinorder() { if( this == 0 ) return; this->ojciec->printinorder(); switch( plec ) { case pszczola: std::cout << "P" << std::endl; break; case truten: std::cout << "T" << std::endl; break; } this->matka->printinorder(); }
void Owad::printpostorder() { if( this == 0 ) return; this->ojciec->printpostorder(); this->matka->printpostorder(); switch( plec ) { case pszczola: std::cout << "P" << std::endl; break; case truten: std::cout << "T" << std::endl; break; } } Brak mi pomysłu na algorytm który ma wypełnić moje drzewo. Kombinowałem na różne sposoby, chciałem przerobić algorytmy które służą do wypisywania: poprzeczne, wzdłużne i wsteczne, ale poległem ;D Jeżeli macie jakieś propozycje lub uwagi do mojego kodu, wysłucham z chęcią i pokorą ;D |
|
« 1 » |