
- •Спецификация.....................................................................................6
- •Текст программы...............................................................................10
- •Введение
- •Постановка задачи
- •Спецификация
- •Спецификация
- •Содержание
- •3.2 Результаты тестирования
- •Содержание
- •Используемые технические средства
- •4.6 Вызов и загрузка
- •Содержание
- •Список используемой литературы
Спецификация
Спецификация
-
Обозначение
Наименование
Примечание
44.4716.18-01
Документация программы
Формула всего (Таппера)
Спецификация
44.4716.18-12
Документация программы
Формула всего (Таппера)
Текст программы
44.4716.18-13
Документация программы
Формула всего (Таппера)
Описание программы
44.4716.18-31
Документация программы
Формула всего (Таппера)
Описание применения
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
|
Текст программы |
|
РЕФЕРАТ ВЫПОЛНИЛА
СТУДЕНТКА ГР. № |
4716 |
|
|
|
С.А. Янышева |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург
2018
Текст программы
Аннотация
В документе приводится текст программы «формула Таппера», написанной на языке C++, а также результаты тестирования.
Содержание
3.1 Текст программы
3.2 Результаты тестирования
3.1 текст программы
gotoxy.h
#include <iostream>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <math.h>
#include <ctime>
#include <string>
#include <fstream>
const int N = 5;
const int M = 10;
int map [N][M] = {0}; //размер поля
int x = 0, y = 0; //точка начала
int dir = 0; //поворот кисти
int size_point; //размер кисти
int ch, q = 0;
using std::cout;
using std::cin;
using std::endl;
//передвижение курсора
void gotoxy (int x, int y)
{
COORD p = {x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
//положение курсора
void point_show(int x, int y, int dir, int size_point)
{
for (int i = 0; i < size_point; i++)
{
gotoxy(x,y);
cout <<'#';
switch (dir)
{
case 0:
x++;
break;
case 1:
y++;
break;
case 2:
x--;
break;
case 3:
y--;
break;
}
}
}
//проверка границ
bool point_in_map(int x, int y, int dir, int size_point)
{
bool in_map = 1;
for (int i=0; i<size_point; i++)
{
if (x<0||y<0||x>=M||y>=N)
{
in_map = 0;
break;
}
switch (dir)
{
case 0:
x++;
break;
case 1:
y++;
break;
case 2:
x--;
break;
case 3:
y--;
break;
}
}
return in_map;
}
set_point.h
//поставновка (созранение точки) точки
bool set_point(int map[N][M], int x, int y, int dir, int size_point)
{
int Points_id = 1;
int Points[10] = {0};
int temp_x = x;
int temp_y = y;
bool setting_is_possible = 1;
for (int i=0; i<size_point; i++)
{
if (x<0||y<0||x>=M||y>=N)
{
setting_is_possible = 0;
break;
}
switch (dir)
{
case 0:
x++;
break;
case 1:
y++;
break;
case 2:
x--;
break;
case 3:
y--;
break;
}
}
if (setting_is_possible == 1)
{
x = temp_x;
y = temp_y;
for (int i = 0; i < size_point; i++)
{
map[y][x] = Points_id;
switch (dir)
{
case 0:
x++;
break;
case 1:
y++;
break;
case 2:
x--;
break;
case 3:
y--;
break;
}
}
Points[Points_id] = size_point;
Points_id++;
}
return setting_is_possible;
}
main.cpp:
int main()
{//17*106
int tap [17][106] {
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1},
{1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1},
{0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1},
{0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1},
{0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,1},
{1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1},
{0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1},
{1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1},
{0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1},
{1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1},
{0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1},
{0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1},
{1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1},
{1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1},
{0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1}};
int var;
int q = 0;
setlocale(LC_ALL,"Russian") ;
for (;;)
{//Выбор вида действия с содержимым файла
cout << "\n Выберите вид действия:" << endl ;
cout << " 1 - Вывести формулу Таппера" << endl ;
cout << " 2 - Рисовать" << endl ;
cout << " 3 - Выход" << endl ;
cout << " Введите вид действия ->" ;
cin >> var ;
system("cls");
switch(var)
{default:break ;
case 1:
{
for (int j=1; j<18; j++)
{cout << endl;
for (int i=1; i<107; i++)
{
if (tap[j-1][i-1] == 0)
{
cout << '.' ;
}
else
{
cout << '#';
}
}
}
cout << endl << endl;
}
break ;
case 2:
{
cout << "Ведите размер кисти (в дальнейшем его изменить невозможно) : \n" ;
cin >> size_point;
cout << endl << "Инструкция управления кистью:" << endl << endl;
cout << " w - вверх" << endl;
cout << " s - вниз" << endl;
cout << " a - влево" << endl;
cout << " d - вправо" << endl;
cout << " r - поворот" << endl;
cout << "Enter - фиксация точки" << endl;
cout << "Пробел - завершение" << endl << endl;
cout << "Управление осуществляется только на английской раскладке клавиатуры. " << endl;
cout << "Чтобы продолжить нажмите Enter" << endl;
getch();
system("cls");
while(q<1)
{
show.h
point_show(x, y, dir, size_point);
int temp_x = x;
int temp_y = y;
int temp_dir = dir;
ch = getch();
switch (ch)
{
case 100:// d вправо
x++;
break;
case 115:// s вниз
y++;
break;
case 97:// a влево
x--;
break;
case 119://w вверх
y--;
break;
case 114://r поворот
dir = !dir;
break;
case 13://enter установка точки
if (set_point(map, x, y, dir, size_point))
{
}
break;
case 32://пробел выход из цикла
q++;
break;
}
if (!point_in_map(x, y, dir, size_point))
{
x = temp_x;
y = temp_y;
dir = temp_dir;
}
system("cls");
//вывод карты
for (int i=0; i<N; i++)
{
for (int j=0; j<M; j++)
{
if (map[i][j] == 0)
{
cout << '-' ;
}
else
{
cout << map[i][j];
}
}
cout << endl;
}
}
//расположение рисунка
unsigned long int k=0;
int st=0, w=0;
for (int i=M-1; i>=0; i--)
{
for (int j=0; j<N; j++)
{
if (map[j][i] == 1)
{
st= pow(2,j+((M-1)-i)*N);
k=k+st*17;
}
}
}
cout << "\nПо оси ординат рисунок располагается на высоте\n "<< k <<" от начала координат.\n ";
cout << endl;
}
break ;
case 3: return 0 ;
}
}
system("pause");
return 0;
}