Сворачивание массива в тор - C#

Узнай цену своей работы

Формулировка задачи:

Подскажите, пожалуйста, как свернуть массив в тор на C# в консоли?

Решение задачи: «Сворачивание массива в тор»

textual
Листинг программы
#include "stdafx.h"
#include "stdio.h"
// Количество клеток
const int count=23;
// Функция, обеспечивающая заворачивание структуры
// клеточного автомата в тор для избежания краевых
// эффектов
inline int TorIt(int x)
{
if (x<0) return x+count; else return x%count;
}
// Функция поведения клетки
// U - Верх; UR - Верх-Право; R - Право; DR - Низ-Право;
// D - Низ; DL - Низ-Лево; L - Лево; UL - Верх-Лево
int f(int y, int yU, int yUR, int yR, int yDR, int yD, int yDL, int
yL, int yUL)
{
// Вычисление количества живых соседей
int i=yU+yUR+yR+yDR+yD+yDL+yL+yUL;
// Мертвая клетка оживет, если у нее имеется 3 живых соседа
if (y==0 && i==3) return 1;
// Живая клетка останется живой, если у нее имеется 2 или 3
// живых соседа
if (y==1 && (i==2 || i==3)) return 1;
// В остальных случаях клетка будет мертвой
return 0;
}
// Главная функция приложения
int main(int argc, char* argv[])
{
// Массив для хранения текущих состояний клеток
int y[count][count];
// Массив для хранения новых состояний клеток
int y1[count][count];
// Переменная, используемая при обработке нажатия кнопок
// <ENTER> и <q>
char c;
// Счетчик итераций
long iter=0;
// Начальное заполнение массива клеток
for (int i=0; i<count; i++) for (int j=0; j<count; j++)
{
y[i][j]=0;
}
y[11][11]=1;
y[10][11]=1;
y[ 9][11]=1;
y[11][12]=1;
y[10][13]=1;
// Итерации автомата
for (;;)
{
// Визуализация
for (i=0; i<count; i++)
{
for (int j=0; j<count; j++) printf("%d",y[i][j]);
printf("\n");
}
printf("#%d",iter);
// Вычисление новых состояний клеток
for (i=0; i<count; i++) for (int j=0; j<count; j++)
{
y1[i][j]=f(y[TorIt(i)][TorIt(j)],
y[TorIt(i-1)][TorIt(j)],y[TorIt(i-1)][TorIt(j+1)],
y[TorIt(i)][TorIt(j+1)],y[TorIt(i+1)][TorIt(j+1)],
y[TorIt(i+1)][TorIt(j)],y[TorIt(i+1)][TorIt(j-1)],
y[TorIt(i)][TorIt(j-1)],y[TorIt(i-1)][TorIt(j-1)]);
}
// Перенос новых состояний в массив текущих состояний
for (i=0; i<count; i++) for (int j=0; j<count; j++)
y[i][j]=y1[i][j];
// Обработка нажатия кнопок <ENTER> и <q>
c=getchar();
if (c=='q') return 0;
iter++;
}
return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы