Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа шифрования, помогите с написанием 
:(
    Опции темы
WaRPLeX
Дата 25.10.2004, 16:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем! Курсовую задали в инстике. А я не понимаю С++. Это вообще не из моей области. Есть ли добрые люди которые помогли бы.
Суть:
Прога. Вводишь любой текст с клавы. Есть таблица замены символов (к примеру одной букве соответствует другая). По этой таблице текст кодируется (побуквенно) и сохраняется в фаил (любой, по любому пути).
При просмотре файла просто набор букв без смысла выводится, т.к. всё зашифровано.
И обратная программы нужна.
Открываешь фаил (по любому фиксированному пути). Программа с помощью этойже таблицы замены символов текс расшифровывает и выводит на экран.

Надеюсь мне кто-нибудь поможет.
Заранее благодарен.
Мыло: [email protected]
  Вверх
chipset
Дата 25.10.2004, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Совет: используй std::map


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Mad
Дата 25.10.2004, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



chipset
зачем так сложно, можно и по проще :
Код

char code_table[256] = {' ', .../*описание таблицы*/};

char EncodeChar(char c)
{
    return code_table[c];
}

:D :D :D


--------------------
user posted image
PM MAIL   Вверх
Step
Дата 25.10.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Mad, chipset- правильно советует... а обратное преобразование ты еще через одну таблицу будешь делать...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Mad
Дата 25.10.2004, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



Step
Код

char Decode(char c)
{
   char ret=0;
   while (code_table[ret] != c)
       ret++;
   return ret;
}




--------------------
user posted image
PM MAIL   Вверх
Step
Дата 25.10.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Mad, приношу вам свои извинения (понимая что мог зацепить подобным высказыванием), да можно и так. можно и через две табицы, можно и через ассоциативные масивы... решений много, а вот что выберет вопрошающий это уже его дела... конечна ваше предложение это самая простая реализация и для столь ограниченной задачи наверное оптимольное

:)


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
WaRPLeX
Дата 26.10.2004, 08:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как задать таблицу шифрования типа

Буква её шифр
А В
Б Г
В Д

И какие #include <?> - нужны для моей прогИ?

Таблица задаётся массивом?

char Decode(char c)
{
char ret=0;
while (code_table[ret] != c)
ret++;
return ret;
}
Выше это что и к чему относится!
  Вверх
WaRPLeX
Дата 2.11.2004, 16:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дак помогите что ли
  Вверх
LuckLess
Дата 2.11.2004, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: 1
Всего: 1



таблица в данном случае - это массив(одномерный).
Любому символу соответствует его код (1 байт если не брать unicode) , и если брать код символа как идекс массива , то какбы получаешь таблицу.


Добавлено @ 21:17
для приведенного Mad-ом кода #includ-ы не нужны.
но вероятно тебе понадабются windows.h и kernel32.lib для readfile()/writefile()/createfile()
и stdio.h для scanf()(если используешь C) или iostream.h(если не ошибся , так как обыцно пишу все на С) для ввода на С++.
PM MAIL   Вверх
bel_nikita
Дата 5.11.2004, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



WaRPLeX
Цитата
Дак помогите что ли

Помогу, что ли smile

Вот, типа простенький алгоритм шифорования/дешифорования:
Код

#pragma warning(disable:4786) // 'identifier' : identifier was truncated to 'number' characters in the debug information
#include <map>

typedef struct __stCode {
 char  Char;  // символ
 char  Code; // шифр символа
 __stCode(char ch,char code){ Char = ch; Code = code; };
} stCode;

#define INSERT_CODE(Symbol,Code) stCode(Symbol,Code)

stCode CodeTable[]=  // задаем таблицу шифрования, тут я думаю все понятно
{
 INSERT_CODE('A','1'),
 INSERT_CODE('B','2'),
 INSERT_CODE('E','3'),
 INSERT_CODE('L','4'),
 INSERT_CODE('N','5'),
 INSERT_CODE('I','6'),
 INSERT_CODE('K','7'),
 INSERT_CODE('T','8'),
};

typedef std::map<char,char> CODINGMAP;

CODINGMAP CodingTable; // таблица для кодирования символов
CODINGMAP DeCodingTable; // таблица для декодирования символов

// создание таблиц
void CreateCodingTable()
{
 for(int i=0; i<sizeof(CodeTable)/sizeof(CodeTable[0]); ++i)
   CodingTable.insert(CODINGMAP::value_type(CodeTable[i].Char,CodeTable[i].Code));

 for(i=0; i<sizeof(CodeTable)/sizeof(CodeTable[0]); ++i)
   DeCodingTable.insert(CODINGMAP::value_type(CodeTable[i].Code,CodeTable[i].Char));
}

// кодирование си-строки
void Coding(char* p)
{
 for (; *p; p++ )
 {
   CODINGMAP::iterator iter=CodingTable.find(*p);
   if ( iter!=CodingTable.end() )
   {
     *p = iter->second;
   }
 }
}

// декодирование си-строки
void DeCoding(char* p)
{
 for (; *p; p++ )
 {
   CODINGMAP::iterator iter=DeCodingTable.find(*p);
   if ( iter!=DeCodingTable.end() )
   {
     *p = iter->second;
   }
 }
}

// пример использования
int main(int argc, char* argv[])
{

 CreateCodingTable(); // создаем таблицы кодирования/декодирования

 char* pchData = "BEL_NIKITA"; // типа данные, которые хотим зашифровать

 // тут покопируем строчки
 char Temp[256];
 sprintf(Temp,"%s",pchData);
 // зачем это надо было - потом как-нить объясню

 
 printf("\n%s",Temp); // выводим исходные данные
 Coding(Temp); // кодируем
 printf("\n%s",Temp); // выводим кодированые данные
 DeCoding(Temp); // декодируем
 printf("\n%s",Temp); // выводим декодированые данные

 return 0;
}


Результат:
Цитата
BEL_NIKITA
234_567681
BEL_NIKITA


З.Ы.: Ну, а писать, читать файл и вводить строки от пользователя в следующей серии. Спать уже охота. Поздно, однако smile

З.Ы.2: а компилятор какой? а то может BC 3.1, так зря все писал это...


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
WaRPLeX
Дата 5.11.2004, 17:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











bel_nikita
ой спасибо. у меня завтра в 12 утра здавать. Как ты вовремя. И как раз мне на день рождения (у меня сегодня). Спасибо просто приогромнейшее.
Круто было бы если бы она целая была, тоесть полная как в задании. Я бы такую в жизни не написал! И коменты вообще к стати.
Ещё раз спасибо.
И если не трудно, было-бы здорово, если её дописать.
  Вверх
WaRPLeX
Дата 5.11.2004, 17:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Буду надеяться, что опять мне поможете.
  Вверх
WaRPLeX
Дата 5.11.2004, 17:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











И у нас вообще не билдер а ДОС версия.
вроде ВС7
  Вверх
bel_nikita
Дата 5.11.2004, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



WaRPLeX В честь Дня Рождения примите поздравления! smile

Цитата
И у нас вообще не билдер а ДОС версия.
smile

Дык, это... там же я STL юзаю. Под ДОСом моя писанина не будет работать. Точнее в BC 3.1 нет STL smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
WaRPLeX
Дата 6.11.2004, 12:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за поздравления.
Я вчера посмотрел, у нас ВС 3.1.
Я преподу показал прогу, говорю, типа она пока не до конца. А он мне, что это, а что это. Говорит, типа ты чё так сложно то сделал. Типа ты гений чтоли.
Говорит, что сложно так будет её защищать. Нам ведь каждую строчку обяснять что делает надо.
Он мне говорил как надо переделать, что-то про таблицу из одномерного массива, но я ничего не понял, т.к. был пьян (день рождения всё таки).
Вообщем препод дал мне ещё времени.

bel_nikita
Если тебе не сложно, то напиши как можно проще. Мы ещё только самые основные понятия прошли по С++. А то я сам много что в программе не понял. Мы такое наверно дальше будем изучать.
Вообщем, буду очень благодарен, если поможешь!
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.