OskarF - 2011-04-25 22:13:22

Zadanie polega na stworzeniu dwóch funkcji:
void szyfruj(string nazwaPlikuWe, int przesun)
void deszyfruj(string nazwaPlikuWe, int przesun)
Funkcja szyfruj dokonuje szyfrowania pliku, którego nazwa podana została jako
pierwszy parametr. Szyfrowanie polega na zamianie każdej litery na znak przesunięty
o wartość podana drugim parametrem np. dla przesunięcia równego 2 literka
’a’ powinna zostać zastąpiona literką ’c’, literka ’z’ literką ’b’ itp.
Wynikiem działania funkcji ma być plik o nazwie utworzonej na podstawie nazwy
pliku wejściowego poprzez dołączenie znaku ’_’ np. dla pliku dane.txt zaszyfrowana
postać powinna mieć nazwę _dane.txt. Funkcja deszyfruj powinna deszyfrować
plik (niekoniecznie ten sam) zaszyfrowany przez funkcje szyfruj.





#include <iostream>
#include <fstream>
#include <cctype>

using namespace std;

void szyfruj(string nazwaPlikuWe, int przesun);
void deszyfruj(string nazwaPlikuWe, int przesun);

int main()
{
    unsigned int przesuniecie;
    cout<<"Witaj w programie szyfrujacym/deszyfrujacym podany plik tekstowy."<<endl;
    cout<<"Podaj wartosc calkowita przesuniecia."<<endl;
    cin>>przesuniecie;

    szyfruj("zad5plik.txt",przesuniecie);
    deszyfruj("_zad5plik.txt",przesuniecie);

    cin.get();
    return 0;
}

void szyfruj(string nazwaPlikuWe, int przesun)
{
    char z;
    ifstream plik1;
    ofstream plik2;
    plik1.open(nazwaPlikuWe.c_str());
    plik2.open(("_"+nazwaPlikuWe).c_str());

    plik1>>noskipws;
    while(plik1>>z)
    {
        if(isspace(z)) plik2<<z;
        if(isalpha(z))
        {
            if(isupper(z)) z=tolower(z);
            if(z>='a' && z<='z')
            {
                z+=przesun;
                if(z>'z') z-=26;
            }
            plik2<<z;
        }
    }
    plik1.close();
    plik2.close();
    cout<<"Szyfrowanie zakonczone."<<endl;
}

void deszyfruj(string nazwaPlikuWe, int przesun)
{
    char z;
    ifstream plik1;
    ofstream plik2;
    plik1.open(nazwaPlikuWe.c_str());
    plik2.open(("zdeszyfrowany"+nazwaPlikuWe).c_str());

    plik1>>noskipws;
    while(plik1>>z)
    {
        if(z>='a' && z<='z')
        {
            z-=przesun;
            if(z<'a') z+=26;
        }
        plik2<<z;
    }
    plik1.close();
    plik2.close();
    cout<<"Deszyfrowanie zakonczone."<<endl;
}

Royal Milk pipeline apartment taśmy led producent kompensatory mocy biernej