Материал: Sb98050

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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