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

[C++] Drzewo genealogiczne trutnia i pszczoły

Ostatnio zmodyfikowano 2012-02-09 23:43
Autor Wiadomość
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
C/C++
#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
C/C++
enum SEX {
    pszczola,
    truten
};

typedef class Owad Owad;
class Owad
{
public:
    SEX plec;
   
    //wskaźniki na rodziców naszego owada
    Owad * ojciec; /* mniejszy (lewy) */
    Owad * matka; /* wiekszy (prawy) */
   
    void filltree( int generations, int * count );
    void printinorder();
    void printpostorder();
   
    Owad( SEX x )
        : plec( x )
    {
        ojciec = matka = 0;
    }
   
};

functions.cpp
C/C++
#include "variables.h"
#include <iostream>


/* filltree: wypełnia drzewo aż do podanej ilości pokoleń */
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;
   
}

/* printinorder: wypisanie węzłów drzewa przy zastosowaniu metody
                 przeglądania poprzecznego */
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
P-50454
« 1 »
  Strona 1 z 1