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.
macierz_c/MACIERZ.CPP:
//Program szyfrujacy/deszyfrujacy tekst znajdujacy sie w pliku za pomoca algorytmu //przestawieniowego - metoda kwadratu (macierzy) //Program pobrano ze strony www.algorytm.org //Opracowal Krzysztof Mackowiak #include<stdio.h> #include<iostream.h> #include <math.h> //Program dziala poprawnie dla tekstu o dlugosci max 400 znakow. W przypadku dluzszych tekstow //nalezy zmienic wartosci macierzy i tablicy pomocniczej lub zastosowac struktury dynamiczne void main() { FILE *we, *wy; char znak; //znak odczytany z pliku //Przed uruchomieniem programu nalezy utworzyc 2 pliki - 1. z tekstem jawnym/zaszyfrowanym , 2. pusty char plik_wejsciowy[20]; //nazwa pliku wejsciowego char plik_wyjsciowy[20]; //nazwa pliku wyjsciowego char macierz[20][20]; char tablica_pomocnicza[400]; int i,j,k,l,m,n; cout<<"Podaj nazwe pliku z tekstem: " ; cin>>plik_wejsciowy; //pobranie nazwy pliku wejsciowego cout<<"Podaj nazwe pliku wynikowego: "; cin>>plik_wyjsciowy; //pobranie nazwy pliku wynikowego i=0; if((we=fopen(plik_wejsciowy,"rb"))!=NULL) { if((wy=fopen(plik_wyjsciowy,"wb"))!=NULL) { while((znak=getc(we))!=EOF) //odczytywanie wszystkich znakow z pliku wejsciowego { tablica_pomocnicza[i]=znak; //zapisywanie wszystkich znakow to tablicy pomocniczej i++; //zliczanie wszystkich znakow } j=1; do //dopasowywanie wielkosci macierzy - powiekszamy ilosc kolumn i wierszy tak { //dlugo az pomiesci wszystkie odczytane z pliku znaki j++; k=j*j; } while (k<i); for (l=0; l<j; l++) //wypelnianie macierzy pewnym symbolem - w tym przypadku jest to spacja for (m=0;m<j;m++) //w przypadku gdy macierz nie bedzie w pelni wypelniona tekstem { //zostanie dopelniona pustymi polami macierz[l][m]=32; } m=0; n=0; for (l=0; l<i; l++) //przepisywanie wszystkich znakow z tablicy pomocniczej do macierzy { macierz[n][m]=tablica_pomocnicza[l]; m++; if (m==j) //gdy zapelniony jeden wiersz to do nastepnego { n++; m=0; } } //odczytywanie znakow z macierzy kolumnami for (l=0; l<j; l++) for (m=0;m<j;m++) { znak=macierz[m][l]; putc(znak,wy); } fclose(wy); } fclose(we); } cout<<"Operacja zostala zakonczona"; return; }