Нужно зашифровать текст, хранящийся в текстовом файле и состоящий из русских букв, цифр и знаков препинания. Зашифрованный текст записать в другой файл. Ещё нужно написать программу для расшифровки зашифрованного файла. Алгоритм: каждая буква имеет номер. Маска вводится с клавиатуры и накладывается на текст, пока он не кончится. Складываем номер буквы текста с номером буквы маски, получаем номер новой буквы. Если номер больше длины алфавита, то отнимаем от него длину - это и будет номер новой буквы
Подскажите как исправить программу, работает неправильно, не понимаю почему. Вот что у меня получилось | Код | #include<stdlib.h> #include<stdio.h> #include<string.h> #include<conio.h>
FILE *finp, *fout1; // *out2; char alfavit[]={'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с', 'т','у','ф','х','ц','ч','ш','щ','ь','ы','ъ','э','ю','я','.',',',';',':','-','!','?',' ', '1','2','3','4','5','6','7','8','9','0'};
int nomer(char a) //ф-ия к-ая должна сравнивать очередной символ с алфавитом и определять её номер { for(int i=0;i<strlen(alfavit);i++) { if(a==alfavit[i]) return(i); }
}
int nomer_res(int a, int b) //функция к-ая определяет номер буквы, которая будет шифровать наш очередной символ { int result=0; result=a+b; if(result<strlen(alfavit)) return(result); else return(result-(strlen(alfavit))); } /////////////////////////////////////////////////////////////////////////////////////////////////// void main(){
char maska[30] ; char str[20], str1[100]="";
int dl_m; int k,i,l, res;
printf("Vvedite masku ne menee 5 simvolov\n Maska="); gets(maska);
dl_m=strlen(maska); //определяем длину маски, такое же количество символов будем считывать из файла
/////////////////////////////////////////////////////////////////////////////////////////////////////// if(!(finp=fopen("inp.txt","r"))) { printf("Input file opening error\n"); exit(-1); }
if(!(fout1=fopen("out1.txt","w"))) { printf("Input file opening error\n"); exit(-1); } ////////////////////////////////////////////////////////////////////////////////////////////////////////
while(!feof(finp)) { if(fgets(str,dl_m+1,finp)) l=0; {for(i=0;i<dl_m;i++) { res=0; int a=nomer(str[i]); int b=nomer(maska[i]); res=nomer_res(a,b);
// printf(" %d/%d ",a,b); //при выводе этих значений получаются совсем не те, к-ые должны получаться в соответствии с // алфавитом
str1[l]=alfavit[res]; l++; }
fputs(str1,fout1);
}
}
fclose(finp); fclose(fout1); }
|
|