Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП курсач.docx
Скачиваний:
40
Добавлен:
16.04.2021
Размер:
743.8 Кб
Скачать
  1. Спецификация

    1. Спецификация

Обозначение

Наименование

Примечание

44.4716.18-01

Документация программы

Формула всего (Таппера)

Спецификация

44.4716.18-12

Документация программы

Формула всего (Таппера)

Текст программы

44.4716.18-13

Документация программы

Формула всего (Таппера)

Описание программы

44.4716.18-31

Документация программы

Формула всего (Таппера)

Описание применения

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ

  1. ПРОГРАММА

  2. Формула всего (Таппера)

Текст программы

  1. 44.4716.18-12

РЕФЕРАТ ВЫПОЛНИЛА

СТУДЕНТКА ГР. №

4716

С.А. Янышева

подпись, дата

инициалы, фамилия

Санкт-Петербург

2018

  1. Текст программы

Аннотация

В документе приводится текст программы «формула Таппера», написанной на языке 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;

}

Соседние файлы в предмете Основы программирования