![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]()
Здравствуйте, у меня такая проблема:
Нужно написать программу которая шифровала бы текстовые файлы аналогично "Шифру цезаря" т.е. дан текстовый файл и число k, каждую букву в текстовом файле заменить на букву которая находится на k позиций впереди )) как то так... Буква Ё не учитывается.... С латинским алфовитом программа работает нормально, а вот с русским что то никак... по идее функция CheckAlpha должна определять что считанный символ это буква, русского или латинского алфавита, с латинским она определяет, т.к там стандартная функция, а вот мои условия ему что то ненравятся, или может я считываю как то покривому... ВОбщем помогите пожалуйста переделать, так чтобы программа работала еще и с русским алфавитом. Заранее благодарен... Исходный код: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> int CheckAlpha(char ch); FILE *infile, *outfile; char Infilename[23]; char Outfilename[23]; int CheckCH(int ch) { if ((isalpha(ch))||((ch>='А')&&(ch<='Я '))|| ((ch>='а')&&(ch<='п')&&(ch>='р')&&( ch<='я'))) return 1; return 0; } void EnterInfo(int &k, int &wish) { printf("The Cipher Program"); printf("\nEnter Input Filename:"); scanf("%s",Infilename); printf("\nEnter Output Filename:"); scanf("%s",Outfilename); printf("\nEnter 1 if you wish to encode latin Alphabet"); printf("\nEnter 2 if you wish to decode latin Alphabet"); printf("\nEnter 3 if you wish to encode Russian Alphabet"); printf("\nEnter 4 if you wish to decode Russian Alphabet"); printf("\nEnter your choice here:"); scanf("\n%d",&wish); printf("Enter k: "); scanf("\n%d",&k); } void Encode(int k,char firstCH,char endCH,int APower) { int ch; if (((outfile=fopen(Outfilename,"w"))= =NULL) || ((infile=fopen(Infilename,"r"))==NU LL)) { printf("ERROR: Opening files\n"); exit(-1); } while((ch=getc(infile))!=EOF) { if (CheckCH(ch)) { if ((ch>=firstCH)&&(ch<=endCH)) { ch=firstCH+((ch+k-firstCH)%APower); fprintf(outfile,"%c",ch); } else { ch=toupper(ch); ch=firstCH+((ch+k-firstCH)%APower); fprintf(outfile,"%c",tolower(ch)); } } else { fprintf(outfile,"%c",ch); } } fclose(outfile); fclose(infile); } void Decode(int k,char firstCH,char endCH,int APower) { int ch; if (((outfile=fopen(Outfilename,"w"))= =NULL) || ((infile=fopen(Infilename,"r"))==NU LL)) { printf("ERROR: Opening files\n"); exit(-1); } while((ch=getc(infile))!=EOF) { if (isalpha(ch)) { if ((ch>=firstCH)&&(ch<=endCH)) { ch=endCH+((ch-k-endCH)%APower); fprintf(outfile,"%c",ch); } else { ch=toupper(ch); ch=endCH+((ch-k-endCH)%APower); fprintf(outfile,"%c",tolower(ch)); } } else { fprintf(outfile,"%c",ch); } } fclose(outfile); fclose(infile); } void main() { int k,wish; char firstCH, endCH, endch, firstch, APower; EnterInfo(k,wish); switch (wish) { case 1:firstCH='A'; endCH='Z'; APower=26; Encode(k,firstCH,endCH,APower); break; case 2:firstCH='A'; endCH='Z'; APower=26; Decode(k,firstCH,endCH,APower); break; case 3:firstCH='А'; endCH='Я'; APower=32; Encode(k,firstCH,endCH,APower); break; case 4:firstCH='А'; endCH='Я'; APower=32; Decode(k,firstCH,endCH,APower); break; } } |
![]() |
![]() |
![]() |
#2 | |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
![]() Цитата:
Росли вроде умными, выросли дурнями... (c)А.Васильев
Последний раз редактировалось Greblin; 24.01.2010 в 21:59. |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]()
Да я вроде проверял, работает... весь прикол что компилятор какбудто непонимает что считывается буква... а в чем ошибка я так и не расдуплил... там вообще таблица аски если выводить числовые значения от А до Я то выводит от -128 до -97 чтоли) почему минус я незнаю... а так если прописать от 128 - 160 вроде то пропишет то же самое от А до Я
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]()
Я думал вообще что можно сделать все с массивами алфавитов,но так получится не интересно и помоему долго программа работать будет... Раз уж начал хочу вот так но немогу...
|
![]() |
![]() |
![]() |
#5 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
![]()
А то, что я выделил, исправили?
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]() |
![]() |
![]() |
![]() |
#7 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
![]()
Ну вот именно что ИЛИ, а у Вас там &&, я ж специально красным выделил
------------------------------------------ У Вас там везде стоит && - и где надо &&, и где надо ||. Во всяком случае в первом посте именно так
Росли вроде умными, выросли дурнями... (c)А.Васильев
Последний раз редактировалось Greblin; 25.01.2010 в 01:09. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]()
Дак ведь от а И до п ИЛИ(||) от р до Я просто я может быть указал не те знаки в условии.... т е я отталкивался от того что А это -128 т е у меня почему-то все русские буквы выводились со знаком минус... хотя в таблице аски вообще значений с минусами нет...
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]()
ой прости я затупил )) ты поправил знак а я думал ты выделил его красным типа он неправильно там стоит !) Ок щас попробую... но помоему всеравно работать не будет потому что с большие буквы он тоже не воспринимает...
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 11.06.2007
Сообщений: 29
|
![]()
Вот кому может быть надо, конечный вариант ) Правда стиль программирования не фонтан, и какаято некрасивость присутствует )
PHP код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Шифр Цезаря | Jasper92 | Помощь студентам | 3 | 02.12.2009 18:47 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |
реализация шифрования. шифр Цезаря + Хэш-функция | BlackThornGreed | Помощь студентам | 0 | 07.06.2009 10:21 |