int i = 0

advertisement
Министерство образования и науки Российской Федерации.
СПбГЭТУ “ЛЭТИ”.
ФКТИ, кафедра МОЭВМ.
Отчёт по лабораторно-практической работе №2
Выполнил: Ткаченко П.А.
Группа: 1303
Факультет: КТИ
Проверил: Романенко Д.А.
Санкт-Петербург,2013
1. Цель работы.
Написать программу реализующую алгоритм «Эдемский сад».
2. Постановка задачи.
Для данного кругового состояния определить, является ли данное состояние Эдемским садом или достижимым состоянием.
3. Анализ задачи.



Кле́точный автома́т — дискретная модель, Включает регулярную решётку ячеек,
каждая из которых может находиться в одном из конечного множества состояний, таких как 1 и 0. Решетка может быть любой размерности. Для каждой ячейки определено множество ячеек, называемых соседством. К примеру, соседство может быть определено как все ячейки на расстоянии не более 2 от текущей. Для работы клеточного
автомата требуется задание начального состояния всех ячеек, и правил перехода ячеек
из одного состояния в другое. На каждой итерации, используя правила перехода и состояния соседних ячеек, определяется новое состояние каждой ячейки. Обычно правила перехода одинаковы для всех ячеек и применяются сразу ко всей решётке.
Правилом перехода в данной задаче является XOR(Left,Right).
Состояние является достижимым, когда идентификатор состояния равен идентификатору автомата, иначе состояние называется эдемским садом.
4. Код программы.
#include "include.h"
#define max 20
class Edem
{
public:
int mass[max];
int n;
Edem(int temp[], int val)
{
for (int i = 0; i < val; i++)
{
mass[i] = temp[i];
}
n = val;
}
int identification()
{
int ident = 0;
for (int i = 0; i < n; i++)
{
ident += mass[i] * pow(2,i);
}
}
return ident;
int xor(int a, int b)
{
if (!a == !b || a == b)
{
return 0;
}
else
return 1;
}
bool sad(int id)
{
bool flag = false;
int next[max];
int ident;
for (int i = 0; i < pow(2,n); i++)
{
ident = identification();
if (ident == id)
{
flag = true;
break;
}
else
{
next[0] = xor(mass[1],mass[n-1]);
for (int k = 1; k < n-1;k++)
{
next[k] = xor(mass[k-1],mass[k+1]);
}
next[n-1] = xor(mass[n-2],mass[0]);
for (int k = 0; k < n; k++)
{
mass[k] = next[k];
}
}
}
return flag;
}
};
bool check_spase (char c)
{
if (c == ' ' || c == '\t')
return false;
else return true;
};
int main()
{
{
setlocale(0,"");
int massive[max];
int n;
int id = 0;
ifstream file ("fail.txt");
string line;
char c;
if (file.good())
while (!file.eof() )
{
getline (file,line);
int i = 0;
string buf = "";
do
{
buf += line[i];
i++;
}
while (check_spase(line[i]));
i++;
id = atoi(buf.c_str());
buf = "";
do
{
buf += line[i];
i++;
}
while (check_spase(line[i]));
i++;
n = atoi(buf.c_str());
for (int y = 0; i < line.length(); y++)
{
buf = line[i];
massive[y] = atoi(buf.c_str());
i++;
}
Edem a(massive, n);
if (a.sad(id))
cout << "reachable" << endl;
else
cout << "Garden of Eden" << endl;
}
file.close();
}
else cout << "Unable to open file" << endl;
system ("pause");
return 0;
};
5. Блок-Схема.
6. Примеры работы.
Входные данные
312 5 01001
522 9 111110000
0 4 1111
12 3 101
100 10 000000001
717 6 111110
0 5 00000
7. Вывод.
В ходе лабораторной работы был реализован алгоритм «Эдемский сад».
Download