Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Амаралис
0 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 8

Клеточный автомат, треугольная решетка

29.05.2014, 11:47. Показов 1605. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
треугольная решетка:

Название: 1877-25_1.png
Просмотров: 76

Размер: 4.5 Кб

в ней сделать игру жизнь

решила построить треугольник с помощью функции полигон, но выдает ошибку

файл lab1.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <vcl.h>
#pragma hdrstop
 
#include "Lab1.h"
#include "Lab01_2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N3Click(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N4Click(TObject *Sender)
{
Form2->ShowModal();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   int i,j;
for (i=0; i<NX; i++)
  {
   for (j=0; j<NY; j++)
      { Grid[i][j] =0;}
  }
  CellSize = 3;
  Image1->Width=NX*CellSize;
  Image1->Height=NY*CellSize;
  randomize();
  i=random(NX-1);
  j=random(NY-1);
 // Grid[i][j]=1;
  Plot();
}
//---------------------------------------------------------------------------
 
 
__fastcall TForm1::Plot()
{
 int i,j;
 TRect p3;
 
 for ( i=0; i<NX; i++)
{
for ( j=0; j<NY; j++)
{ p3.Left=CellSize*i;
  p3.Top=CellSize*j;
  p3.Right=p3.Left+CellSize;
  p3.Bottom=p3.Top+CellSize;
  if (Grid[i][j]>0)
     {
       Image1->Canvas->Brush->Color=clBlack;
       Image1->Canvas->Polygon(p3);
       }
   else
     {
      Image1->Canvas->Brush->Color=clWhite;
       Image1->Canvas->Polygon(p3);
       }
   }
}
}
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   int i,j;
i=X/CellSize;
j=Y/CellSize;
if ( (i>=0)&&(i<NX)&&(j>=0)&&(j<NY) )
   { if (Button==mbLeft)
       { Grid[i][j]=1;}
     else { Grid[i][j]=0;}
   }
 
 Plot();
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Step()
{
        //TODO: Add your source code here
        int k,x,y;
 
for(x=0;x<NX;x++)
{ for (y=0;y<NY;y++)
   { GridNew[x][y]=0;
     GridDead[x][y]=0;
   }
}
 
for(x=0;x<NX; x++)
  {for (y=0;y<NY;y++)
    { k=Calc(x,y);
    if (Grid[x][y])
      {  if(k<2||k>3)
         GridDead[x][y]=1;
      }
      else {
           if(k==3)
           GridNew[x][y]=1;
           }
    }
  }
 
 
  for (x=0;x<NX;x++)
   {for (y=0;y<NY;y++)
     { if (GridDead[x][y]&&Grid[x][y])
       { Grid[x][y]=0; }
       if (GridNew[x][y])
          { Grid[x][y]=1;}
       }
     }
}
 
 
int __fastcall TForm1::Calc(int x,int y)
{
        //TODO: Add your source code here
 int i,j,n=0;
 for(i=x-1; i<=x+1; i++)
  { for (j=y-1; j<=y+1; j++)
   { if (i==x&& j==y)
     {}
     else if ( (i>=0)&&(i<NX)&&(j>=0)&&(j<NY) )
        {  if (Grid[i][j]) n++;  }
     }
   }
  return(n);}
 
void __fastcall TForm1::N6Click(TObject *Sender)
{
   Step();
 Plot();
 h++  ;
   Label1->Caption=IntToStr(h);
}
//---------------------------------------------------------------------------
 
 
 
int __fastcall TForm1::Clean()
{
       int i,j;
   h=0;
  for (i=0;i<NX;i++)
   {for (j=0;j<NY;j++)
    {Grid[i][j]=0; }
    }
    Plot();  //TODO: Add your source code here
}
void __fastcall TForm1::N7Click(TObject *Sender)
{
  Clean();
Plot();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N8Click(TObject *Sender)
{
   int i,j;
  for (i=0;i<NX;i++)
  {for (j=0;j<NY;j++)
    {Grid[i][j]=random(2); }
  }
  Plot();
}
//---------------------------------------------------------------------------




файл lab1.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef Lab1H
#define Lab1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
 
 #define NX 100
#define NY 100
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMainMenu *MainMenu1;
        TMenuItem *N1;
        TMenuItem *N2;
        TMenuItem *N3;
        TMenuItem *N4;
        TImage *Image1;
        TMenuItem *N5;
        TMenuItem *N6;
        TLabel *Label1;
        TMenuItem *N7;
        TMenuItem *N8;
        void __fastcall N3Click(TObject *Sender);
        void __fastcall N4Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);
        void __fastcall N6Click(TObject *Sender);
        void __fastcall N7Click(TObject *Sender);
        void __fastcall N8Click(TObject *Sender);
      //   void __fastcall FormCreate(TObject *Sender);
 
 
 
private:    // User declarations
public:     // User declarations
        char Grid[NX][NY];   //   ðåøåòêà
        char CellSize;   // ðàçìåð îäíîé êëåòêè ðåøåòêè
         char GridNew[NX][NY];
         char GridDead[NX][NY];
        __fastcall TForm1(TComponent* Owner);
        __fastcall Plot();
        void __fastcall TForm1::Step();
        int __fastcall TForm1::Calc(int x,int y);
        int h;
        int __fastcall Clean();
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


файл Lab01_2.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef Lab01_2H
#define Lab01_2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

файл Lab01_2.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Lab01_2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
   Close();
}
//-------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2014, 11:47
Ответы с готовыми решениями:

Клеточный автомат
Добрый день! Проблема: не знаю как сделать так, чтобы программа работала со StringGrig следующем образом. При нажатии кнопки...

Доработать клеточный автомат
Здравствуйте. Есть задание сделать клеточный автомат. Проект прикреплю. Как сделать так , чтобы по нажатию кнопки клетки закрашивались...

Клеточный автомат блуждания частицы по поверхности фуллерена C60
всем доброго времени суток))) приехали в провинцию умные дяди из Москвы и задали создать клеточный автомат блуждания частицы по поверхности...

3
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
30.05.2014, 10:58
Доброго, Вы не правильно работаете с полигоном. Это должен быть массив,каждый элемент которого должен состоять из двух координат...ниже пример функции

C
1
2
3
4
5
6
7
8
9
10
11
12
13
//---------------------------------------------------------------------------
void __fastcall TForm1::triangle(int x1,int y1,int x2,int y2,int x3,int y3,int color)
{
// рисует закрашенный треугольник по трём координатам
  TPoint points[2];
  points[0] = Point(x1,y1);
  points[1] = Point(x2,y2);
  points[2] = Point(x3,y3);
 
  Image1->Canvas->Brush->Color = color;
  Image1->Canvas->Polygon(points, 2);
}
//---------------------------------------------------------------------------
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
30.05.2014, 14:10
C++
1
2
3
4
TPoint points[2];
  points[0] = Point(x1,y1);
  points[1] = Point(x2,y2);
  points[2] = Point(x3,y3);
разве за пределы массива не выйдет?
Может так
C++
1
2
3
4
5
6
TPoint points[3];
  points[0] = Point(x1,y1);
  points[1] = Point(x2,y2);
  points[2] = Point(x3,y3);
  Image1->Canvas->Brush->Color = color;
  Image1->Canvas->Polygon(points, 2);
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
30.05.2014, 14:27
Цитата Сообщение от Xank Посмотреть сообщение
разве за пределы массива не выйдет?
Может так
Отобразил по факту рабочий вариант...хотя Вы правы во многих случаях был бы выход за пределы массива, но не в этом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2014, 14:27
Помогаю со студенческими работами здесь

Подправить клеточный автомат "Жизнь" (Builder 2007)
Имеется программа клеточного автомата. Принцип следующий: -пустая (мёртвая) клетка, рядом с которой ровно три живые клетки,...

Клеточный автомат
Никак не могу написать прогу. Если кто знает help me пожалуйста. А вот собственно и текст проги: Напишите прогу представляющую...

Клеточный автомат
Ребят снова я со своим лабвью. Задача отброзить клеточный автомат 2D диффузии. Кто подскажет формулу и в какой из циклов ее пихнуть? И еще...

Одномерный клеточный автомат
На рисунке показано несколько поколений одномерного клеточного автомата. У каждой клетки только два соседа — слева и справа, а поле...

Клеточный автомат на торе
Добрый день! Нужно сделать клеточный автомат, который натянут на тор. Движок уже имеется (с учёт безграничности тора), остаётся только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru