Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Sb98050

.pdf
Скачиваний:
4
Добавлен:
13.02.2021
Размер:
403.74 Кб
Скачать

Пример возвращаемого значения:

Rosalind_Sequence_0808

60.92%

Задание: необходимо реализовать программу, которая будет считать показатель GC и выводить в требуемом формате на консоль.

2. Играем в жизнь

Входе разработки автором была написала программа, которая играет сама с собой в жизнь Конвея (http://ru.wikipedia.org/wiki/Жизнь_(игра)). К

сожалению, часть файлов затерлась, а именно, часть программы, где реализованы четыре функции правил игры в жизнь.

Задание: восстановить утерянные куски кода.

Пример работы программы:

 

Эпоха 1

 

Эпоха 2

 

 

Эпоха 3

|

|

|

*

|

|

* *|

|

|

|

 

|

|

|

|

* | => |

 

| => |

|

|

*|

|

*

*|

|

*|

|

* * *|

|

* *|

|

* *|

| | | * | | * *|

Исходный код: обратите внимание, что в некоторых случаях код может отличаться в зависимости от вашей платформы и используемого компилятора. Так, например, вместо time.h необходимо использовать unistd.h, если вы работаете под OS X Maverics с компилятором clang.

main.cpp

#include "game.h" #include "console.h" #include <time.h>

// Start program int main()

{

//Set rows and cols of the future field size_t rows = 20, cols = 40;

//Get a blank field

matrix *field = Game::getBlankField(rows, cols);

21

//Some magic things for getting random numbers srand(time(NULL));

//Set randomly alive or dead cell

for (uint i = 0; i < rows; i++) { for (uint j = 0; j < cols; j++) {

field->at(i).at(j) = rand() % 2;

}

}

// 1000 times will be shown for (uint i = 0; i < 1000; i++) {

//Clear console Console::clearUnix();

//Draw the field into console Console::drawField(*field);

//Save the current field...

matrix *oldField = Game::getBlankField(rows, cols); Game::copy(*oldField, *field);

//...and update field Game::step(*field);

//Check if life is frozen. If so break the loop if (Game::isEqual(*oldField, *field))

break;

//Sleep time

usleep(250 * 1000);

}

return 0;

}

console.h

#include <iostream> #include <cstdlib> #include <vector>

typedef std::vector<std::vector<bool> > matrix; typedef unsigned int uint;

/* Utils for working with console */ namespace Console {

// Clear console in *nix void clearUnix() {

system("clear");

}

22

//Clear console in Windows™ void clearWin() {

system("cls");

}

//Let's draw the field into console space! void drawField(matrix &field) {

//For each row...

for (uint i = 0; i < field.size(); i++) {

//...draw first '|'...

std::cout << '|';

//...then for each value in row...

for (uint j = 0; j < field[0].size(); j++) {

// ...draw '*' if the cell is alive, ' ' otherwise...

std::cout << (field[i][j] ? '*' : ' ') << ' ';

}

// ...close row with '|' std::cout << "|\n";

}

}

}

game.h

#include <vector>

typedef std::vector<std::vector<bool> > matrix; typedef unsigned int uint;

/* Functions implement game logic */ namespace Game {

// Returns blaaaank field where nobody is alive matrix *getBlankField(size_t rows, size_t cols) {

matrix *field = new matrix(); // Add rows...

for (uint i = 0; i < rows; i++) { field->push_back(std::vector<bool>()); // ... and values into the row

for (uint j = 0; j < cols; j++) { (field->at(i)).push_back(false);

}

}

return field;

}

23

// Returns rows number

size_t getRows(const matrix &field) { return field.size();

}

// Returns cols number

size_t getCols(const matrix &field) { if (getRows(field) != 0) {

return field[0].size();

}

return -1;

}

//======================= YOUR CODE HERE =======================

//=========================================================

}

Makefile

all:

g++ main.cpp -o ./life

№ 3. Шифрование

Требуется создать программу для шифрования текста шифром Цезаря. Текст может быть любым символом из стандартной таблицы ASCIII. Запуск программы осуществляется следующим образом:

$ crypt [options] <key> <source> [<dest>]

options:

 

-a, --alphabet=<alphabet>

alphabet – алфавит для работы алгоритма (по умол-

чанию содержит буквы из латинского алфавита и цифры: AaBbCc..Zz0..9)

-t, --type=<type>

type может быть 'encode' или 'decode', по умолчанию –

encode

 

-h, --help

выводит эту справку

key:

ключ для шифрования/дешифрования source:

исходный файл для шифрования/дешифрования dest:

файл, куда будет записан новый зашифрованный текст. Если не указан, то переписывает source

24

Таким образом, команда crypt -a "ABC0" -t encode 1 file_to_encode.txt

зашифрует и перезапишет методом Цезаря файл file_to_encode.txt, сдвинув символы ABC0 на 1, где 1 – это ключ. Параметры могут следовать в любой очередности. Также должны работать следующие вызовы:

$ crypt 5 my.txt

$ crypt -t decode 3 my.txt another.txt

$ crypt -type=encode 3 another.txt my.txt

$ crypt -a "AaBbCcDd0135" 8 "C:/Program Files/yes.txt" "C:/Program Files/no.txt" $ crypt --help

Следующие вызовы должны сообщать о неправильных введенных данных (например, отрицательный ключ или несуществующий файл):

$ crypt my.txt $ crypt -9

$ crype all.txt 1

Следующий вызов приводит к ошибке «Неверно заданы параметры»:

$ crypt -a -t decode 7 my.txt $ crypt -r encode 9 all.txt

№ 4. Стеганография в изображениях

Безопасная передача информации является важной задачей в современном цифровом мире. Одним из методов защиты информации является скрытие факта передачи сообщения. Так, произвольный текст может быть спрятан внутри публично опубликованного изображения, используя избыточность самого изображения.

Стеганогра́фия (от греч. στεγανός – скрытый + γράφω – пишу; буквально «тайнопись») – способ передачи или хранения информации с учетом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввел в

1499 г. Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.

Задание: необходимо реализовать программу, которая размещает исходный текст в цифровом изображении либо получает текст из изображения, хранящего текст. Изображения рекомендуется использовать в формате хранения без потерь (например, bmp). Один байт текста будет кодироваться в одном пикселе изображения. Так, один байт текста 10 101 010 будет расположен в пикселе изображения следующим образом:

25

R:11110010

G:00001101

B:11001010

Алгоритм кодирования информации:

1.Загрузить изображение в память программы.

2.Определить количество доступных пикселей изображения.

3.Определить максимальную длину текста.

4.Загрузить текст в память программы из консоли или файла.

5.Если текст превышает максимально допустимую длину, сообщить об этом пользователю и завершить программу.

6.Организовать цикл по байтам текста и пикселям изображения, кодировать байт текста по схеме 2-3-3 битов на каждый из каналов пикселя.

7.Сохранить изображение на диске в исходном формате.

Алгоритм декодирования разрабатывается похожим образом. Для чтения изображения в формате bmp используется бинарное чтение файлов, заголовок которого описан следующей структурой для 32-битной архитектуры:

#pragma pack(push, 1) typedef struct

{

unsigned char b1,b2; unsigned long bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned long bfOffBits;

} BITMAPFILEHEADER;

typedef struct

 

{

 

unsigned int

biSize;

int

biWidth;

int

biHeight;

unsigned short

biPlanes;

unsigned short

biBitCount;

unsigned int

biCompression;

unsigned int

biSizeImage;

int

biXPelsPerMeter;

int

biYPelsPerMeter;

unsigned int

biClrUsed;

unsigned int

biClrImportant;

} BITMAPINFOHEADER; #pragma pack(pop)

26

Требования к программе. Базово программа должна обеспечивать возможность кодирования текста из таблицы ASCII в изображении формата BMP без компрессии на стандартной палитре. В качестве усложнения программы могут быть реализованы:

Кодирование любого текста из заранее известных кодировок (UTF-16, CP-1251, UTF-8).

Использование других форматов изображения без потерь.

Шифрование текста перед кодированием в изображение для большей защищенности передачи информации.

Использование других схем записи байта текста в пиксель изображения, например, 1 бит текста в 1 пиксель, таким образом, кодировка является менее заметной, но существенно сокращается размер доступного для кодирования текста.

Вопросы для самопроверки:

Зачем используется #pragma pack(push, 1)?

Как осуществляется чтение и запись бинарных файлов?

Что такое формат хранение без потерь?

Что из себя представляет формат bmp?

Что такое бит/байт текста?

Какие каналы используются для хранения информации о цвете пикселя?

Как в программу передаются аргументы при вызове?

Каким могут быть варианты хранения скрытого текста, кроме хранения в изображениях?

Какая информация может быть скрыта?

27

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

Страуструп Б. Язык программирования C++. Специальное издание. М.: Изд-во «Бином», 2011.

Орлов С.А. Теория и практика языков программирования: учеб. для вузов. СПб.: Питер, 2013.

Полубенцева М. С/С++. Процедурное программирование. СПб.: БХВПетербург, 2008.

28

СОДЕРЖАНИЕ

 

1. ТИПЫ ДАННЫХ.................................................................................................

3

1.1. Общие понятия.............................................................................................

3

1.2. Основные типы данных...............................................................................

5

1.2.1. Целочисленный тип (char, short (int), int, long (int), long long)......

5

1.2.2. Тип с плавающей точкой...................................................................

7

1.2.3. Булевый тип........................................................................................

7

1.2.4. Символьный тип.................................................................................

7

1.2.5. Массивы..............................................................................................

8

1.2.6. Строки.................................................................................................

8

1.2.7. Ссылка.................................................................................................

9

1.2.8. Указатель.............................................................................................

9

1.2.9. Перечисления ...................................................................................

10

1.2.10. Void..................................................................................................

10

1.3. Приведение типов ......................................................................................

11

1.4. Унарные и бинарные операции.................................................................

11

2. ВЫПОЛНЕНИЕ ПРОГРАММЫ......................................................................

12

2.1. Понятие программы...................................................................................

12

2.2. Операторы ветвления (выбора).................................................................

13

2.3. Циклы ..........................................................................................................

15

2.4. Область видимости переменной...............................................................

16

2.5. Функция и ее аргументы............................................................................

17

3. ПОЛЬЗОВАТЕЛЬСКИЕ СТРУКТУРЫ В C++ ..............................................

18

3.1. Запись структуры.......................................................................................

18

3.2. О размере структуры..................................................................................

19

4. ПРАКТИЧЕСКИЕ ЗАДАНИЯ.........................................................................

20

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ...............................................

28

29

Пелевин Максим Сергеевич

Введение в программирование на языке C++ с практическими заданиями

Учебно-методическое пособие

Редактор Е. А. Ушакова

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Подписано в печать 20.05.19. Формат 60×84 1/16. Бумага офсетная. Печать цифровая. Печ. л. 2,0.

Гарнитура «Times New Roman». Тираж 81 экз. Заказ 57.

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Издательство СПбГЭТУ «ЛЭТИ» 197376, С.-Петербург, ул. Проф. Попова, 5

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]