Nadesłany przez Krzysztof Maćkowiak, 17 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
rot13_c/ROT13_S.CPP:
//Program szyfrujacy tekst z pliku za pomoca algorytmu ROT13
//Program pobrano ze strony www.algorytm.org
//Opracowal Krzysztof Mackowiak
#include<stdio.h>
#include<iostream.h>
#include <math.h>
void main()
{
FILE *we, *wy;
char znak; //znak odczytany z pliku
//Przed uruchomieniem programu nalezy utworzyc 2 pliki - 1. z tekstem jawnym, 2. pusty na t.zaszyfrowany
char plik_jawny[20]; //nazwa pliku z tekstem jawnym
char plik_zaszyfrowany[20]; //nazwa pliku z tekstem zaszyfrownym
cout<<"Podaj nazwe pliku, ktorego tresc ma zostac zaszyfrowana: " ;
cin>>plik_jawny;
cout<<"Podaj nazwe pliku wynikowego: ";
cin>>plik_zaszyfrowany;
if((we=fopen(plik_jawny,"rb"))!=NULL) //otwieranie pliku 1. do odczytu - oba pliki musza istniec
{
if((wy=fopen(plik_zaszyfrowany,"wb"))!=NULL) //otwieranie pliku 2. do zapisu
{
while((znak=getc(we))!=EOF) //pobieranie znaku z pliku 1. tak dlugo az nie nastapi znak konca pliku
//Kazdy odczytywany znak wg kodow ASCII jest przydzielany do 3 grup duze litery, male litery, cyfry
{
if ((znak>=65)&&(znak<=90))
{
znak-=65;
znak+=13;
znak=fmod(znak,26); //operacja ta potrzebna jest aby przykladowo litera z szyfrowana byla jako c a nie jako znaczek o nr o 3 wiekszym w tablicy ASCII
znak+=65;
putc(znak,wy);
}
else if ((znak>=97)&&(znak<=122))
{
znak-=97;
znak+=13;
znak=fmod(znak,26);
znak+=97;
putc(znak,wy);
}
else if ((znak>=48)&&(znak<=57))
{
znak-=48;
znak+=13;
znak=fmod(znak,10);
znak+=48;
putc(znak,wy);
}
//Wszystkie inne znaki sa pomijane. Jezeli zalezy Ci aby nie pomijac niektorych znakow powinienes
//dodac w tym miejscu nastepujace linijki kodu:
//else if(znak==nr) gdzie przez nr rozumiemy nr kodu ASCII danego znaku
//{znak+=13;
//putc(znak,wy);}
//W funkcji deszyfrujacej nalezy umiescic to samo zmieniajac + na -.
}
fclose(wy);
}
fclose(we);
}
cout<<"Szyfrowanie zostalo zakonczone";
return;
}
rot13_c/ROT13_D.CPP:
//Program deszyfrujacy tekst z pliku za pomoca algorytmu ROT13
//Program pobrano ze strony www.algorytm.org
//Opracowal Krzysztof Mackowiak
#include<stdio.h>
#include<iostream.h>
#include <math.h>
void main()
{
FILE *we, *wy;
char znak; //znak odczytany z pliku
//Przed uruchomieniem programu nalezy utworzyc 2 pliki - 1. z tekstem zaszyfrowanym, 2. pusty na t.odszyfrowany
char plik_jawny[20]; //nazwa pliku z tekstem jawnym
char plik_zaszyfrowany[20]; //nazwa pliku z tekstem zaszyfrownym
cout<<"Podaj nazwe pliku zawierajacego tekst zaszyfrowany: ";
cin>>plik_zaszyfrowany;
cout<<"Podaj nazwe pliku,w ktorym zapisany ma byc tekst odszyfrowany: " ;
cin>>plik_jawny;
if((we=fopen(plik_zaszyfrowany,"rt"))!=NULL) //otwieranie pliku 1. do odczytu
{
if((wy=fopen(plik_jawny,"wt"))!=NULL) //otwieranie pliku 2. do zapisu
{
while((znak=getc(we))!=EOF) //pobieranie znaku z pliku 1. tak dlugo az nie nastapi znak konca pliku
//Kazdy odczytywany znak wg kodow ASCII jest przydzielany do 3 grup duze litery, male litery, cyfry
{
if ((znak>=65)&&(znak<=90))
{
znak-=65;
znak-=13;
if (znak<0)
znak=26-fabs(znak);
znak+=65;
putc(znak,wy);
}
else if ((znak>=97)&&(znak<=122))
{
znak-=97;
znak-=13;
if (znak<0)
znak=26-fabs(znak);
znak+=97;
putc(znak,wy);
}
else if ((znak>=48)&&(znak<=57))
{
znak-=48;
znak-=3;
if (znak<0)
znak=10-fabs(znak);
znak+=48;
putc(znak,wy);
}
}
fclose(wy);
}
fclose(we);
}
cout<<"Deszyfrowanie zostalo zakonczone";
return;
}

