Классическая задача на алгоритмы под незатейливым названием «Черепаха». Суть задачи заключается в том, чтобы определить количество возможных проходов из точки А в точку Б.
Читаем данные из файла и пишем результат в файл.
Входные данные для обработки (то, что заносим вручную):
1 2 3 4 |
00000 01010 01010 00000 |
Выходные данные (то, что должны получить после выполнения программы):
1 2 3 4 |
11111 10101 10101 11223 |
Задача реализуется через классы.
Пишем код нашего класса Turtle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
#include <iostream> #include <string> //библиотека для работы со строками #include <fstream> //библиотека для работы с файлами class Turtle { private: int i, j, k, column, line, **a, **b; //создаем переменные для счетчика столбцов, строк, динамических матриц а и b std::string stroka, sd; char buff[1]; public: Turtle() { std::ifstream in("input.txt"); //создаем переменную в которую положили файл с исходными данными a = new int*[10]; for (int i = 0; i < 5; i++) { //заведомо знаем, что в файле пять строк a[i] = new int[10]; //строим двумерный массив } while (in >> stroka) { //подсчёт столбцов всей матрицы for (j = 0; j < stroka.size(); j++) { a[k][j] = char(stroka[j]); } k++; i++; } in.close(); column = i; in >> stroka; line = stroka.size(); } void values() { b = new int*[column]; for (int i = 0; i < column; i++) { //работаем по столбцам b[i] = new int[line]; //строим двумерный массив } i = 0; for (j = 0; j < line; j++) { //работаем по самой верхней строке b[i][j] = 1; //заполняем строку единицами } j = 0; for (i = 1; i < column; i++) { //работаем по самому левому столбцу b[i][j] = 1; //заполняем столбец единицами } for (i = 1; i < column; i++) { //работаем по столбцам for (j = 1; j < line; j++) { //работаем по строкам if (a[i][j] == 48) { //48 это код символа '0' b[i][j] = 0; //если удоволетворяет - пишем 0 } else { b[i][j] = 1; //если не удоволетворяет - пишем 1 } } } for (i = 1; i < column; i++) { //работаем по столбцам, но лево не трогаем for (j = 1; j < line; j++) { //работаем по строкам, но верх не трогаем if (b[i][j] == 1) { b[i][j] = 0; } else { b[i][j] = 1; } } } for (i = 1; i < column; i++) { //работаем по столбцам for (j = 1; j < line; j++) { //работаем по строкам if (b[i][j] != 0) { b[i][j] = b[i - 1][j] + b[i][j - 1]; } } } std::ofstream out("output.txt"); //открываем файл на запись for (i = 0; i < column; i++) { //работаем по столбцам for (j = 0; j < line; j++) { //работаем по строкам out << b[i][j]; //записываем каждый элемент в файл друг за другом } out << std::endl; //добавляем переход на следующую строку } if (!out.is_open()) { // если файл не открывается std::cout << "\n---------------------------------" << std::endl; std::cout << "\tФайл не записан!" << std::endl; std::cout << "---------------------------------\n\n\n" << std::endl; } else { std::cout << "\n---------------------------------" << std::endl; std::cout << "\tФайл записан!" << std::endl; std::cout << "---------------------------------\n\n\n" << std::endl; } out.close(); //закрываем файл } }; int main() { setlocale(LC_ALL, "Russian"); //подключаем русский язык Turtle matrix; //создаём объект класса Turtle (черепаха) matrix.values(); //производим действие над объектом system("pause"); //необходимо для того, чтобы программа завершилась только после нажатия на клавишу return 0; } |