Сворачивание массива в тор - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д