Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2015, 19:22   #1
nason
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 1
Восклицание Помогите пожалуйста, объясните что происходит в каждой строчке программы.

Код:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
/*Структура для хранения позиции символа в x – смещение по ширине, y – смещение по длине*/
struct Position
{
    int x;
    int y;
    void operator = (Position &temp)
    {
        this->x = temp.x;
        this->y = temp.y;
    }
};
/*Класс WTable для генерации таблицы с алфавитом для шифра Уитстона*/
class WTable
{
public:
    vector<vector<char> > table;
/*Конструктор генерирующий таблицу с алфавитом, где x- ширина таблицы, y -длина*/
    WTable(int x, int y)
    {
        char a[x*y];
        vector<char> temp;
        char z;
        char count = 0;
        bool fl = true, fl2 = true;
        for (int i = 0; i < x; ++i)
        {
            temp.clear();
            for (int j = 0; j < y; ++j)
            {
                while(fl && count != 26)
                {
                    z = 65 + (rand() % 26);
                    for (char ch: a) if (ch == z) fl2 = false;
                    if (fl2)
                    {
                        temp.push_back(z);
                        fl = false;
                        ++count;
                    }
                    a[y*i+j] = z;
                    fl2 = true;
                }
                fl = true;
            }
            if (count == 26)
            {
                temp.push_back('.');
                temp.push_back(',');
            }
            table.push_back(temp);
        }
    }
    char& Element(Position t)
    {
        return table[t.x][t.y];
    }
    friend ostream& operator << (iostream &os, WTable &Table)
    {
        for_each(Table.table.begin(), Table.table.end(), [&os](vector<char> T){
                for_each(T.begin(), T.end(), [&os](char t){
                        os << t << " ";
        });
                os << endl;
        });
        return os;
    }
/*Функция поиска символа в таблицы, где ch – искомый символ, temp - позиция найденного символа */
    void FindLetter(char ch, Position &temp)
    {
        int i = 0, j;
        for_each(table.begin(), table.end(), [&i, &j, ch, &temp](vector<char> T){
            j = 0;
            for_each(T.begin(), T.end(), [&i, &j, ch, &temp](char t){
                if (t == ch)
                {
                  temp.x = i;
                  temp.y = j;
                }
                ++j;
            });
            ++i;
        });
    }
};
class TTable
{
public:
    vector<char> table;
/*Конструктор создания таблицы для шифра Трисемуса*/
    TTable()
    {
        for (char j = 65; j <= 90; ++j)
        {
            table.push_back(j);
        }
        table.push_back(' ');
        table.push_back('.');
        table.push_back(',');
    }
    friend iostream& operator << (iostream& os, TTable &T)
    {
        for_each(T.table.begin(), T.table.end(), [](char t){
            cout << t << " ";
        });
        cout << endl;
        return os;
    }
/*Функция поиска символа в таблице, где ch – искомый символ*/
    int FindLetter(char ch)
    {
        int i = 0, j;
        for_each(table.begin(), table.end(), [&ch, &i, &j](char t){
           if (t == ch) j = i;
           ++i;
        });
        return j;
    }
};
class PTable
{
public:
    vector<vector<char> > table;
    string key;
    int x;
    int y;
/*Конструктор создания таблицы с алфавитом для шифра Плейфера*/
    PTable()
    {
        cout << "\nEnter key: ";
        cin >> key;
        cout << "Enter size: ";
        cin >> x >> y;
        vector<char> temp;
        vector<char> last;
        bool fl;
        int i = 0, count = 0;
        char ch = 65;
        while(count < x*y)
        {
            fl = true;
            for_each(last.begin(), last.end(),[ch, &fl](char c)
            {
                if (ch == c) fl = false;
            });
            if (fl)
            {
                temp.push_back(ch);
                last.push_back(ch);
                ++count;
            }
            if (count % y == 0)
            {
                table.push_back(temp);
                temp.clear();
            }
            if (ch == '.') ch -= 2;
            else if (ch >= 65 && ch < 90 && ch != '.') ++ch;
            else ch = '.';
        }
    }
    char& Element(Position t)
    {
        return table[t.x][t.y];
    }
    friend iostream& operator << (iostream &os, PTable &Table)
    {
        for_each(Table.table.begin(), Table.table.end(), [&os](vector<char> T){
                for_each(T.begin(), T.end(), [&os](char t){
                        os << t << " ";
        });
                os << endl;
        });
        return os;
    }

Последний раз редактировалось Stilet; 15.12.2015 в 21:03.
nason вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объясните пожалуйста в коментариях что происходит в каждой строчке(С++Builder) Coca Colla Помощь студентам 6 13.05.2014 14:37
помогите решить задачку. она имеет два решения только я не могу его найти. в каждой строчке нужно выбрать 1 значение. спасибо) Ivan1996 Помощь студентам 3 24.10.2013 21:05
Коментарии к каждой строчке ganster Общие вопросы C/C++ 10 09.07.2012 22:42
К каждой строчке добавляется фраза Dominatorsha Общие вопросы Delphi 1 30.05.2011 16:21