Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2022, 16:42   #1
AlexFirefield
Пользователь
 
Регистрация: 22.06.2022
Сообщений: 11
По умолчанию написал код, что лучше переделать?

цикл жизни 1
поле заполняется рандомно 1

с каждым ходом
в пустой ячейке появляется 1, если рядом 3 ячейки с 1.
каждая 1 будет жить если имеет 2-3 соседки 1.

когда все заполнится 0, программа завершится
или если 1 выстроятся во взаимосвязанную цепочку.

Код:
#include<iostream>
#include<ctime>
#include<vector>
#include<Windows.h>
using namespace std;
int Variable1()
{
	return 0;
}
int Variable2()
{
	return rand() % 2;
}
vector<vector <int>> CreateNewVec(int(*FooPtr_)(), const int& sizeField_)//заполнения двумерного вектора 0 или рандом
{
	vector<vector <int>> field_;
	for (int i = 0; i < sizeField_; i++)
	{
		vector <int> tempLine;

		for (int i = 0; i < sizeField_; i++)
		{
			tempLine.push_back(FooPtr_());
		}
		field_.push_back(tempLine);
	}
	return field_;
}
void Show(const vector<vector <int>>& field_)//вывод на экран
{
	for (auto& it : field_)
	{
		for (auto& el : it)
		{
			cout << el << " ";
		}
		cout << endl;
	}
}
int algorithm_Life(const vector<vector <int>>& field_, const int& x, const int& y, const int& sizeField_)//алгоритм жизни 1
{
	int sum = 0;
	for (int j = y - 1; j <= y + 1; j++)
	{
		if (j >= 0 && j < sizeField_)
		{
			for (int i = x - 1; i <= x + 1; i++)
			{
				if (i >= 0 && i < sizeField_)
				{
					sum += field_[j][i];
				}
			}
		}
	}
	if (sum == 3)
	{
		return 1;
	}
	else if (sum == 4 && field_[x][y] == 1)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

bool Cicle(vector<vector <int>>& field_, vector<vector <int>>& field_old, const int& sizeField_)//проверка на населенность поля
{
	vector<vector <int>>Newfield = CreateNewVec(Variable1, sizeField_);
	if (field_ == Newfield)		//проверка на наличие 1
	{
		cout << "All is null.\n";
		return false;
	}
	else if (field_old == field_)		//проверка на повторы двух полей, периодический цикл
	{
		cout << "Repeat configuration\n";
		return false;
	}
	for (int x = 0; x < sizeField_; x++)
	{
		for (int y = 0; y < sizeField_; y++)
		{
			Newfield[y][x] = algorithm_Life(field_, x, y, sizeField_);
		}
	}
	if (field_old == Newfield)//проверка на повторы поля, 1 выстроились во взаимосвязаный круг
	{
		cout << "Repeat configuration\n";
		return false;
	}
	else
	{
		field_old = field_;//презапись нового поля
		field_ = Newfield;

		return true;
	}
}
int main()
{
	srand(time(NULL));
	bool key = true;
	int sizeField = 10; 
	vector<vector <int>> OldField;
	vector<vector <int>> Field = CreateNewVec(Variable2, sizeField); // создаем поле
	while (key) {
		Show(Field);//вывести поле на экран
		cout << endl;
		key = Cicle(Field, OldField, sizeField);//следуюший этам жизни
		Sleep(1000);		
		system("cls");
		
	}
	return 0;
}
AlexFirefield вне форума Ответить с цитированием
Старый 16.07.2022, 13:48   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

https://bookzip.ru/50772-jetjudy-dlj...rammistov.html
Код не читал. Сама постановка задачи - это не "жизнь", а размножение бактерий в чашке Петри. По указанной ссылке задача описана более интересная. Там предусмотрена и гибель клетки - если соседей <2, то от одиночества, если >3, то от тесноты. Когда-то на СМ-4 я от неча-делать начирикал такую на Фортране. Было любопытно - собирались колонии, метались по экану, изменяя конфигурацию. Поигрался - и забросил.

Последний раз редактировалось digitalis; 16.07.2022 в 13:53.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше переделать? Есть два класса, назовём их TItem и TContener. Все экземпляры TContener совместно содержат некоторое количество (минимально 0) экземпляров TItem... taras-proger77 Общие вопросы C/C++ 4 23.04.2019 11:53
написал чат, но он не работает Сёмга52 PHP 5 10.10.2016 11:34
Кто что написал? ts-alan Свободное общение 13 05.02.2015 23:44
Что же я написал? Sibedir Свободное общение 26 04.10.2010 05:01