#ifndef LSYSTEM_H
  #define LSYSTEM_H
struct sLSystem
{
   double x0,y0;
   double alpha,teta;
   CString axiom;
   CString newf;
   CString newb;
};
#endif
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//Модуль CTurtle.h
//Содержит объявление класса CTurtle используемого для
//итерирования исходного слова L-системы и вывода слова
//в виде изображения с помощью "черепаховой" графики
#indef CTURTLE_H
  #define CTURTLE_H
#include "LSystem.h"
#include "math.h"
#include
using namespace std;
class CTurtle
{
private:
   vector stack;
   sLSystem t_LSystem;
public:
   CTurtle();
   void Iterator(int count);
   void SetTurtle(sLSystem& lSystem);
   void GoGoGo(HDC& dc,COLORREF color);
   ~CTurtle();
};
#endif
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//Модуль CTurtle.cpp
//Реализация класса CTurtle
//Примаю ваши замечания, конструктор пустой
CTurtle::CTurtle()
{
}
//Задаем L-систему которую будет выводить черепашка
void CTurtle::SetTurtle(sLSystem& lSystem)
{
   t_LSystem.x0=lSystem.x0;
   t_LSystem.y0=lSystem.y0;
   t_LSystem.alpha=lSystem.alpha;
   t_LSystem.teta=lSystem.teta;
   t_LSystem.newb=lSystem.newf;
   t_LSystem.newf=lSystem.newf;
   t_LSystem.axiom=lSystem.axiom;
}
//Итерируем начальное слово count количество раз
void CTurtle::Iterator(int count)
{
   for(int i=0;i<count;i++)
   {
     CString new_axiom="";
     for(int j=0;j<t_LSystem.axiom.GetLength();j++)
       switch(t_LSystem.axiom[j])
       {
         case '+':new_axiom+='+';
               break;
         case '-':new_axiom+='-';
               break;
         case 'b':new_axiom+=t_LSystem.newb;
               break;
         case '[':new_axiom+='[';
               break;
         case ']':new_axiom+=']';
               break;
         case 'F':new_axiom+=t_LSystem.newf;
               break;
       }
     t_LSystem.axiom=new_axiom;
   }
}
//Прорисовываем слово на экране
void CTurtle::GoGoGo(HDC& dc,COLORREF color)
{
   double xx0,yy0;
   xx0=t_LSystem.x0;
   yy0=t_LSystem.y0;
   double alpha=t_LSystem.alpha;
   for(int j=0;j<t_LSystem.axiom.GetLength();j++)
   switch(t_LSystem.axiom[j])
   {
     case '+':alpha+=t_LSystem.teta;
           break;
     case '-':alpha-=t_LSystem.teta;
           break;
     case 'F':{
                   HPEN hPen=CreatePen(PS_SOLID,0,color);
                   HPEN hOldPen=(HPEN) SelectObject(dc,hPen);
                   double x=xx0+10*cos(alpha);
                   double y=yy0+10*sin(alpha);
                   MoveToEx(dc,(int)xx0,(int)yy0,NULL);
                   LineTo(dc,(int)x,(int)y);
                   xx0=x;
                   yy0=y;
                   SelectObject(dc,hOldPen);
                   DeleteObject(hPen);
                   break;
               }
     case 'b':{
                   xx0=xx0+10*cos(alpha);
                   yy0=yy0+10*sin(alpha);
                   break;
               }
     case '[':{
                   stack.push_back(xx0);
                   stack.push_back(yy0);
                   stack.push_back(alpha);
                   break;
               }
     case ']':{
                   alpha=stack[stack.size()-1];
                   stack.pop_back();
                   yy0=stack[stack.size()-1];
                   stack.pop_back();
                   xx0=stack[stack.size()-1];
                   stack.pop_back();
                   break;
               }
     }
}
//Да, деструктить тоже нечего
CTurtle::~CTurtle()
{
}
//---------------------------------------------------------------------------------------
В принципе приведенных кодов достаточно, чтобы нарисовать L-систему, но для полноты изложения
я приведу пример использования класса CTurtle.Вот кусок кода, который нужно вставить в
программу для использования класса CTurtle.
   CTurtle my_turtle;
   ................................................
   sLSystem sPlant;
   sPlant.x0=100;     //координаты точки с которой
   sPlant.y0=400;     //мы начнем рисовать
   sPlant.alpha=0;     //начальный угол
   sPlant.teta=0.4;     //приращение угла
   sPlant.axiom="F";     //аксиома
   sPlant.newb="b";     //замена b
   sPlant.newf="-F+F+[+F-F-]-[-F+F+F]";    //замена F
   my_turtle.SetTurtle(sPlant);    //инициализируем черепашку
   my_turtle.Iterator(3);    //Слово итерируется 3 раза
   //рисуем
   PAINTSTRUCT ps;
   RECT rt;
   HDC hdcDraw=::BeginPaint(m_hWndCD,&ps);
   ::GetClientRect(m_hWndCD,&rt);
   turtle.GoGoGo(hdcDraw,current_color);
   EndPaint(&ps);