Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
#1

Шифрование. Аргументы функции MAIN - C++

10.12.2013, 19:40. Просмотров 1528. Ответов 42
Метки нет (Все метки)

Привет всем Нужна помощь... С++...
Аргументы функции MAIN.

Фраза шифруется следующим образом: после первых двух символов вставляется слог БУ,после следующих двух вставляется КА, это повторяется до тех пор, пока в фразе есть хотя бы две буквы. Например, фраза Я ОТ БАБУШКИ УШЕЛ Шифруется так: Я БУОТКА ББУАБКАУШБУКИКА УБУШЕКАЛ. Напишите функции для шифрации и дешифрации некоторого текста. Функции main в качестве аргументов командной строки передавайте kod для кодирования или dekod для декодирования текста. Программу запускайте с переназначением стандартного ввода на файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2013, 19:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шифрование. Аргументы функции MAIN (C++):

Аргументы функции main - C++
Здравствуйте, программисты! Написать программу для определения, есть ли среди символов этой последовательности символы, образующие слово...

Аргументы функции main() - C++
Написать программу для определения, чередуются ли в данной последовательности символы ‘+’ и ‘-‘, и сколько раз каждый из этих символов...

Аргументы функции main - C++
Здравствуйте! Очень нужна Ваша помощь... Дано натуральное n. Для n, вводимого с клавиатуры получите действительную квадратную матрицу...

Аргументы функции main - C++
что значит определение оформить как функцию и сортировку оформить как функцию??

обработать аргументы функции main - C++
Всем привет. В main() передается строка и число. Как их можно обработать? На это выскакивает ошибка char* str= new char; ...

Аргументы для функции main() - C++
Я совершенно не понял, каким образом работает, допустим вот такой фрагмент программы: int main(int argc, char **argv) { if (argc>1) ...

42
SatanaXIII
17.12.2013, 09:29     Шифрование. Аргументы функции MAIN
  #31
 Комментарий модератора 
Если кто хочет поведать истории бурной молодости, то для этого нужно создать отдельную тему.

Задание озвучено. В дальнейшем прошу отвечать только кодом.
0
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
17.12.2013, 16:13  [ТС] #32
Ну помогите... Ну пожалуйста...
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
17.12.2013, 19:55 #33
Kostia1012, что-то я не наблюдаю какой-то реальной активности с вашей стороны. За неделю, с момента создания темы, хоть какие-то попытки решить задачу у вас были? Хотя бы тот пример, который вам привели вы разобрали и запустили программу? Где вопросы по теме?
И определитесь с тем, что собираетесь использовать для работы с текстом char[] или std::string(используя std::string решить задачу будет проще).
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
17.12.2013, 20:32 #34
Цитата Сообщение от rangerx Посмотреть сообщение
И определитесь с тем, что собираетесь использовать для работы с текстом char[] или std::string(используя std::string решить задачу будет проще).
Не согласен принципиально. Поставленная задача решается посимвольным считыванием через getchar. Строки ни в каком виде не требуются.
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
17.12.2013, 21:43 #35
Цитата Сообщение от Qwertiy Посмотреть сообщение
Не согласен принципиально. Поставленная задача решается посимвольным считыванием через getchar. Строки ни в каком виде не требуются.
Предлагаете всё делать на лету? И как вы собираетесь всё это дело потом дешифровывать? В условии задачи речь идёт, как я понимаю, о шифрации и дешифрации фразы(для простоты можно считать, что имеется в виду строка). Как вы предлагаете на лету, определять зашифрована фраза или нет, удалять все соответствующие слоги, что под руку поподут?
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
17.12.2013, 21:59 #36
Цитата Сообщение от rangerx Посмотреть сообщение
удалять все соответствующие слоги
Эм.. Какие слоги? Ничего в задании про слоги нет.

Цитата Сообщение от rangerx Посмотреть сообщение
Как вы предлагаете на лету, определять зашифрована фраза или нет
Зачем это определять? Команда шифровать или расшифровывать передаётся как аргумент командной строки.

Цитата Сообщение от rangerx Посмотреть сообщение
И как вы собираетесь всё это дело потом дешифровывать?
Примерно так:
C++
1
2
3
4
5
int ch, i;
 
for(i=0; ~(ch=getchar()); ++i)
  if(!(i&2))
    putchar(ch);
0
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,424
Завершенные тесты: 1
18.12.2013, 01:55 #37
Одно из возможных решений для латиницы:
C++
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
#include <iostream>
#include <string>
#include <cstring>
 
struct IState { virtual void doWork() const = 0; };
 
struct ShowUsage : public IState { void doWork() const {
    std::cout << "USAGE: path_to_my_cool_crypt_prog kod|dekod\n" 
              << "       kod   - encode passphrase\n"
              << "       dekod - decode passphrase\n"
              << std::endl;
}};
 
struct SecretsHolder {
    SecretsHolder() : midx(gvery_secret_strings_max) {}
    const std::string & getNextSecretString() const {
        if ((++midx) >= gvery_secret_strings_max) {
            midx = 0;
        }
        return gvery_secret_strings[midx];
    }
private:
    static  std::string gvery_secret_strings[];
    static  unsigned    gvery_secret_strings_max;
    mutable unsigned    midx;
};
std::string SecretsHolder::gvery_secret_strings[] = {
    "BU", "KA" // ... etc
};
unsigned SecretsHolder::gvery_secret_strings_max =
    sizeof(gvery_secret_strings) / sizeof(*gvery_secret_strings);
 
struct Encoder : IState, SecretsHolder { void doWork() const {
    std::string phrase, encoded;
    std::getline(std::cin, phrase);
    unsigned alpha_count = 0;
    for (std::string::iterator i = phrase.begin(); i != phrase.end(); ++i) {
        encoded.push_back(*i);
        if (isalpha(*i) && (++alpha_count) >= 2) {
            alpha_count = 0;
            encoded.append(getNextSecretString());
        }
    }
    std::cout << encoded << std::endl;
}};
 
struct Decoder : IState, SecretsHolder { void doWork() const {
    std::string phrase, decoded;
    std::getline(std::cin, phrase);
    unsigned alpha_count = 0;
    for (std::string::iterator i = phrase.begin(); i != phrase.end(); ++i) {
        decoded.push_back(*i);
        if (isalpha(*i) && (++alpha_count) >= 2) {
            alpha_count = 0;
            i += getNextSecretString().length();
        }
    }
    std::cout << decoded << std::endl;
}};
 
const IState & parseArgs(int argc, char ** argv) {
    if (argc >= 2) {
        if (!strcmp(argv[1], "kod")) {
            return Encoder();
        } else if (!strcmp(argv[1], "dekod")) {
            return Decoder();
        }
    }
    return ShowUsage();
}
    
int main(int argc, char ** argv) { parseArgs(argc, argv).doWork(); }
Пример запуска на моей машине:
Bash
1
2
3
4
5
6
7
8
$ g++ -g -Wall a.cpp -o crryptt
$ ./crryptt kod < enc.txt 
sjBUskKAdjBUfkKAsdBU sdKAkfBUj sKA dkBUfsKAjdBUkfKA sdBUkfKAD DBUDDKAFDBUkdKAjfBUskKA d
$ ./crryptt dekod < dec.txt 
sjskdjfksd sdkfj s dkfsjdkf sdkfD DDDFDkdjfsk d
$ cat enc.txt dec.txt
sjskdjfksd sdkfj s dkfsjdkf sdkfD DDDFDkdjfsk d
sjBUskKAdjBUfkKAsdBU sdKAkfBUj sKA dkBUfsKAjdBUkfKA sdBUkfKAD DBUDDKAFDBUkdKAjfBUskKA d
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
18.12.2013, 10:04 #38

Не по теме:

Нашёлся любитель паттернов... И не лень столько писать вместо пары простых функций.



Цитата Сообщение от schdub Посмотреть сообщение
Одно из возможных решений
Мда.. Он твой код вообще не поймёт

Цитата Сообщение от schdub Посмотреть сообщение
для латиницы
В примере же чётко через 2 символа и пробелы тоже считаются.
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
18.12.2013, 16:04 #39
Цитата Сообщение от Qwertiy Посмотреть сообщение
Эм.. Какие слоги? Ничего в задании про слоги нет.
Я имел в виду слоги, которыми шифруется строка
после первых двух символов вставляется слог БУ, после следующих двух вставляется КА
Цитата Сообщение от Qwertiy Посмотреть сообщение
Зачем это определять? Команда шифровать или расшифровывать передаётся как аргумент командной строки.
Цитата Сообщение от Qwertiy Посмотреть сообщение
Примерно так:
Т.е. практически, как я думал, вы собираетесь удалять из текста все символы 2 через 2, назависимо от того, как там шифрует функция encode. Не знаю, может быть TC и устроит такой вариант...
0
0x10
2480 / 1655 / 248
Регистрация: 24.11.2012
Сообщений: 4,100
18.12.2013, 16:27 #40
Цитата Сообщение от Qwertiy Посмотреть сообщение
Нашёлся любитель паттернов..
Скорее антипаттернов)
Интерфейс IState с методом doWork, который теоретически может означать все что угодно - это тот еще номер. Желание свести классы кодера и декодера к одному интерфейсу как минимум надуманое. В остальной код не вчитывался.
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
18.12.2013, 16:34 #41
Цитата Сообщение от rangerx Посмотреть сообщение
Не знаю, может быть TC и устроит такой вариант...
Это же задание по практике в вузе. Почему же не устроит?

Не по теме:

PS: Вообще, у меня отношение к подобным программам, а также к программам, которые делаю для себя обычно такое: при корректном использовании работает правильно, при некорректном ничего не ломает и по возможности не падает, по необходимости сообщая о некорректности исходных данных. Получилось немного не то, что имел в виду, но не приводить же тут примеры...



Добавлено через 6 минут
Цитата Сообщение от 0x10 Посмотреть сообщение
Желание свести классы кодера и декодера к одному интерфейсу как минимум надуманое. В остальной код не вчитывался.
Там ещё шедевральнее - вывод сообщения об использовании при ошибке в параметрах сделано через этот же интерфейс
0
0x10
18.12.2013, 16:37
  #42

Не по теме:

Цитата Сообщение от Qwertiy Посмотреть сообщение
Там ещё шедевральнее - вывод сообщения об использовании при ошибке в параметрах сделано через этот же интерфейс
Круто, я сразу и не заметил.

0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
18.12.2013, 16:38 #43
А вот кодер и декодер через один интерфейс - в целом идея зрдавая, но в данном случае вообще не вижу причин делать именно интерфейс, а не функцию. Да и само оформление кода
struct Encoder : IState, SecretsHolder { void doWork() const {
как бы намекает, что кроме этой функции нам ничего и не надо.
0
18.12.2013, 16:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 16:38
Привет! Вот еще темы с ответами:

Аргументы командной строки в функции main - C++
Вопрос собственно говоря банальный в домашнем задании требуеться: параметр пронраммы передаеться через командную строку.Пример: ...

Как на это код добавить аргументы функции main? - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;cstdio&gt; #include &lt;Windows.h&gt; using namespace std; int...

Как задать параметры запуска (аргументы командной строки) функции main? - C++
Как их задать в процессе запуска? т.е. пользователь запускает приложение и указывает параметры запуска при этом. Где про них почитать...

аргументы main - C++
int main() { } int main(int argc, char **argv) { }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru