Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Цитата Сообщение от rangerx Посмотреть сообщение
И как вы собираетесь всё это дело потом дешифровывать?
Примерно так:
C++
1
2
3
4
5
int ch, i;
 
for(i=0; ~(ch=getchar()); ++i)
  if(!(i&2))
    putchar(ch);
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
18.12.2013, 01:55     Шифрование. Аргументы функции MAIN #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
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
18.12.2013, 10:04     Шифрование. Аргументы функции MAIN #38

Не по теме:

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



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

Цитата Сообщение от schdub Посмотреть сообщение
для латиницы
В примере же чётко через 2 символа и пробелы тоже считаются.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
18.12.2013, 16:04     Шифрование. Аргументы функции MAIN #39
Цитата Сообщение от Qwertiy Посмотреть сообщение
Эм.. Какие слоги? Ничего в задании про слоги нет.
Я имел в виду слоги, которыми шифруется строка
после первых двух символов вставляется слог БУ, после следующих двух вставляется КА
Цитата Сообщение от Qwertiy Посмотреть сообщение
Зачем это определять? Команда шифровать или расшифровывать передаётся как аргумент командной строки.
Цитата Сообщение от Qwertiy Посмотреть сообщение
Примерно так:
Т.е. практически, как я думал, вы собираетесь удалять из текста все символы 2 через 2, назависимо от того, как там шифрует функция encode. Не знаю, может быть TC и устроит такой вариант...
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
18.12.2013, 16:27     Шифрование. Аргументы функции MAIN #40
Цитата Сообщение от Qwertiy Посмотреть сообщение
Нашёлся любитель паттернов..
Скорее антипаттернов)
Интерфейс IState с методом doWork, который теоретически может означать все что угодно - это тот еще номер. Желание свести классы кодера и декодера к одному интерфейсу как минимум надуманое. В остальной код не вчитывался.
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
18.12.2013, 16:34     Шифрование. Аргументы функции MAIN #41
Цитата Сообщение от rangerx Посмотреть сообщение
Не знаю, может быть TC и устроит такой вариант...
Это же задание по практике в вузе. Почему же не устроит?

Не по теме:

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



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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 16:38     Шифрование. Аргументы функции MAIN
Еще ссылки по теме:

Как на это код добавить аргументы функции 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) { }

Аргументы, передаваемые в main - C++
Всем доброго утра. Вот такой вопрос возник. Запуская программу в консоли имеем вид &gt;cpp1.exe -b -s -f=10 test.txt text_output.rez ...

Аргументы main(int argc, char *argv[]) - C++
Эксперты в с++,объясните пожалуйста новичку примерно понял как использовать эти аргументы,но не как не могу понять куда писать то что он...


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

Или воспользуйтесь поиском по форуму:
Qwertiy
818 / 626 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
18.12.2013, 16:38     Шифрование. Аргументы функции MAIN #43
А вот кодер и декодер через один интерфейс - в целом идея зрдавая, но в данном случае вообще не вижу причин делать именно интерфейс, а не функцию. Да и само оформление кода
struct Encoder : IState, SecretsHolder { void doWork() const {
как бы намекает, что кроме этой функции нам ничего и не надо.
Yandex
Объявления
18.12.2013, 16:38     Шифрование. Аргументы функции MAIN
Ответ Создать тему
Опции темы

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