Кодировщик-декодировшикРефераты >> Программирование и компьютеры >> Кодировщик-декодировшик
3.5. Вызов и загрузка
Запуск программы происходит путем запуска файла coDec. exe
3.6 Входные и выходные данные
Файлы-источники при кодировке по возможности должны быть с расширением txt, в то время как файл-приемник может иметь любое. Вызвано это причинами, описанными ранее в пункте 3.2. При декодировке ограничений нет.
4. Текст программы
// Шифратор-дешифратор
Раздел №1
# include <stdio.h>
# include <io.h>
# include <stdlib.h>
# include <iostream.h>
# include <string.h>
# include <math.h>
int main ()
{ Раздел №2
FILE *fp,*fp2; / *указатели на поток*/
int i,k,Sum,Sum_contr,pointer,select;
int W[]={1,2,3,4,5,6,7,8,9,10}; /*массив проверки*/
int Y[10]; /*массив для кодовой перестановки*/
char B[11]; /*массив для перестановленных символов*/
char c; /*переменная для хранения символа*/
char fname[20], fname2[20]; /*массивы для имен файлов*/
/* О с н о в н о е т е л о п р о г р а м м ы */
Раздел №3
/*Выбор кодирования-декодирования*/
while (1)
{
printf ("\nChoose coder(0) or decoder (1) ");
scanf("%d",&select);
if ((select==0)||(select==1)) break;
while (getchar()!='\n');
}
Раздел №4
/*Ввод длины кодовой последовательности*/
while (1)
{
printf ("\nInput length of code k(1 to 10) ");
scanf ("%d", &k);/* ввод десятичного целого*/
if (k>=1&&k<=10&&k==ceil(k)) break;
while (getchar()!='\n') ;
printf ("\n Error!!! K must be integer from 1 to 10 ");
}
Раздел №5
/*Ввод перестановки*/
while (1)
{
printf ("\n Input %d elements \n",k);
for (Sum=0,Sum_contr=0,i=0; i<k; i++)
{
printf ("Element[%d]:",i+1);
scanf ("%d", &Y[i]);
Sum+=Y[i];
Sum_contr+=W[i]; /*Вычисление контрольной суммы*/
}
if (Sum==Sum_contr) break;
while (getchar()!='\n');
printf ("\n Error!!! Repeat input");
}
/*Очистка входного потока*/
while (getchar()!='\n') ;
Раздел №6
/* Вводименифайла-источника */
puts ("\nInput name of file-sourche :");
gets (fname);
/*Открытие файла-источника*/
while((fp=fopen(fname,"r"))==NULL) /*открытие файла для чтения*/
{
puts("Error!!! Can't open file \nInput name of file-source\n");
gets (fname);
}
/* Ввод имени файла-приемника */
puts ("\nInput name of file for results:");
gets (fname2);
/*Создание файла-приемника*/
if ((fp2=fopen(fname2,"w"))==NULL) /*открытие файла для записи*/
{
perror(fname2);
return 1;
}
Раздел №7
/*Шифрация и запись в файл-приемник*/
if (select==0)
{
while (1)
{
for (i=0;i<k;i++)
{
c=fgetc(fp);
if (feof(fp)&&i==0) return 0;
if (feof(fp)&&i>0)
B[i+1]=' ';
else
B[i+1]=c;
}
for (i=0;i<k;i++)
{
pointer=Y[i];
putc(B[pointer],fp2);
}
if (feof(fp)) break;
}
}
Раздел №8
/*Дешифрация и запись в файл-приемник*/
else
{
while (1)
{
for(i=0;i<k;i++)
{
c=getc(fp);
pointer=Y[i];
B[pointer]=c;
}
if (feof(fp)) break;
for (i=0;i<k;i++)
putc(B[i+1],fp2);
}
}
Раздел №9
/*Закрытие файла источника и приемника*/
fclose(fp);
fclose(fp2);
}