Programs Ada Program generujacy losowo


Program generujacy losowo litery odpowiadajace malym i duzym literom alfabetu

--Autorzy. Michal Danicki (138004), Maciej Szpakowski

--Krotki opis: program pobiera od uzytkownika nazwe pliku, po czym tworzy p~lik o

podanej nazwie i zapisuie w nim

litery alfabetu wraz z wygenerowanymi im losowo odpowiednikami --Dane weqsciowe: nazwa pliku, skladajaca sie nie wiecej niz z 30 znakow (Nazwa) --Dane wyjsciowe: program zapisuje litery alfabetu wraz z ich odpowiednikami w pliku

--Poprawnosc danych wejsciowych: podana nazwa pliku musi zawierac nie wiecej niz 30 znakow --Gr. dziek.: 6 --Gr. lab. : 5

WITH Ada.Text_lo;

USE Ada.Text_lo; --wejscie/wyjscie znakow i napisow

with Ada.Numerics.Discrete_Random; --obsluga generownia losowych liczb

PROCEDURE Generator is

subtype zakres is Positive range 1..52;

--podtyp liczb calkowitych do indeksowania tablicy duzych i malych liter

package Losowanie IS NEW Ada.Numerics.Discrete_Random(Zakres);

--przemianowanie pakietu Ada.Numerics.Discrete_Random na pakiet Losowanie

--z zaznaczeniem zakresu losowanych liczb (1..52)

T : ARRAY (Positive RANGE 1 .. 2, Zakres) OF character;

--tablica do przechowywania liter i wylosowanych im odpowiednikow

Czy_Byl : array (T1range (2)) OF Boolean := (OTHERS => False);

--tablica przechowuiaca za pomoca zmiennych logicznych, czy dana litera z pierwszego wiersza tablicy T zostala

--juz przyporzadkowana podczas generowania

G : Losowanie.Generator; --zmienna do genarowania losowej liczby

Pom : zakres; --zmienna pomocnicza sluzaca do

przechowywania numerow indeksow

Plik : File_Type; --zmienna plikowa sluzaca do zapisu

tablicy do pliku

Nazwa : String (1 .. 30); --nazwa pliku

Dlugosc : Natural := 0; --zmienna pomocnicza przy wczytywaniu

nazwy pii ku

BEGIN

--wczytanie do pierwszego wiersza tablicy T wielkich liter alfabetu

FOR I IN 1..26 LOOP

T(l,I):=Character'Val(1+64);

END LOOP;

--wczytanie do pierwszego wiersza tablicy T (na kolejnych miejscach) malych liter alfabetu

FOR I IN 27. .52 LOOP

T(l, I) :Character' val (1+70) ;

end LOOP;

Losowanie.Reset(G); --zresetowanie zmiennej G

--generowanie losowych liter odpowiadajacych literom alfabetu zapisanym w pierwszym wierszu tablicy FOR I IN zakres LOOP

LOOP

Pom:=Losowanie.Random(G); --wygenerowanie losowej liczby IF Czy_By1(Pom)=False THEN

--jezeli wylosowana liczba nie jest indeksem litery z pierwszego wiersza,

--ktora zostala juz wczesniej przyporzadkowana

T(2,l):=T(l,Pom);

--zapisanie w drugim wierszu tablicy wygenerowanej litery

Czy_Byl(Pom):=True;

--po przypisaniu przyjmujemy, ze litera z pierwszego wiersza tablicy

T o indeksie pom

--zostala juz przyporzadkowana exit; END IF; end loop;

END LOOP;

--zapis tab!icy do pliku

Put( Podaj nazwe pliku (maksymalnie 30 znakow): ");

Get_Line(Nazwa, Dlugosc); --pobranie nazwy pliku

IF DlugoSC=0 THEN

Putf'Podano niepoprawna nazwe pliku");

ELSE

Create(Piik,out_File,Nazwa(l..Dlugosc));

--utworzenie pliku o podanej nazwie

--zapis wartosci z kolejnycn kolumn tab!icy w kolejnych wierszach w pliku

FOR I IN zakres LOOP

put(Plik,T(l,D);

PutCPlik,":");

Put(Plik,T(2,i));

New_Line(Plik); END LOOP;

close(Plik); --zamkniecie pliku PutC'wygenerowana tablica zostala zapisana"); end IF;

DELAY 2.0;

END;

--Autorzy: Michal Danicki (138004), Maciej Szpakowski

--Krotki opis: program pobiera od uzytkownika nazwe pliku szyfru, pliku

zrodlowego i pliku wynikowego,

po czym szyfruje Tub deszyfruje (w zaleznosci od wyboru uzytkownika) plik zrodlowy szyfrem podstawianym

z wykorzystaniem par wczytanych z pliku szyfru i zapisuje wynik w pliku wynikowym. Znaki inne niz litery

alfabetu angielskiego sa skopiowane z pliku zrodlowego do wynikowego bez zmian.

--Dane wejsciowe: nazwy plikow: szyfru, zrodlowego i wynikowego skladajace sie nie wiecej niz z 30 znakow,

znaki odpowiadajace rodzajom operacji, jakie uzytkownik chce wykonac (szyfrowanie Tub odszyfrowywanie)

--Dane wyjsciowe: plik wyjsciowy zawierajacy znaki przetworzone (zaszyfrowane Tub odszyfrowane) z pliku zrodlowego

--Poprawnosc danych wejsciowych: podane nazwy plikow musza zawierac nie wiecej niz 30 znakow, pliki: zrodlowy i szyfru

musza istniec --Gr. dziek.: 6 --Gr. lab. : 5

with Ada.Text_io;

use Ada.Text_lo; -- wejscie/wyjscie znakow i napisow

procedure szyfrator is

SUBTYPE Zakres IS Positive RANGE 1..52;

--podtyp liczb calkowitych do indeksowania tablicy duzych i malych liter

T : array (Positive range 1 .. 2, zakres) OF Character; --tablica do przechowywania danych z pliku szyfru

--zawiera w pierwszym wierszu litery alfabetu, a w drugim przyporzadkowane

--tym literom losowo ich odpowiedniki

Plik_Szyfru,

Plik_zrodlowy,

Plik_Wynikowy : File_Type; --zmienne plikowe umozliwiajace dzialania

na plikacn

Nazwa : String (1 .. 30); --zmienna przechowujaca nazwy plikow

Dlugosc, --zmienna pomocnicza przy wczytywaniu nazwy

pliku

I : Natural; --licznik petli sprawdzjacej jaki znak z

pliku wejsciowego wczytano

Pom : Character; --zmienna przechowuja.ca wczytane z pliku

wejsciowego i szyfrowane znaki

BEGIN

--pobranie nazwy pliku szyfru

PutC'Podaj nazwe pliku szyfru (nie wiecej niz 30 znakow): ");

Get_Li ne(Nazwa,Dlugosc);

Open(Plik_szyfru, in_File, Nazwa(l..Dlugosc)); --otwarcie pliku szyfru

--wczytanie liter alfabetu wraz z przyporzadkowanymi tym literom odpowiednikami z pliku szyfru do tablicy T

for D IN Zakres LOOP

Get(Plik_Szyfru, T(l,3)); --wczytanie litery alfabetu

Get(Plik_Szyfru,Pom); --wczytanie znaku ":"

Get(Plik_Szyfru, T(2,D)); --wczytanie przyporzadkowanej litery

END LOOP;

close(Plik_szyfru); --zamkniecie pliku szyfru

--pobranie nazwy pliku zrodlowego

PutC'Podaj nazwe pliku zrodlowego (nie wiecej niz 30 znakow): ");

Szyfrator.adb Get_Line(Nazwa,Dlugosc);

Open(Plik_zrodlowy, in_File, Nazwa(l..Dlugosc)); --otwarcie pliku zrodlowego

--pobranie nazwy pliku wyjsciowego

PutC'Podaj nazwe pliku wynikowego (nie wiecej niz 30 znakow): ");

Get_Line(Nazwa,plugosc);

create(Piik_Wynikowy, Out_File, Nazwa(l..Dlugosc));

--stworzenie pliku wyjsciowego

Put_Line("Co chcesz zrobic: ");

put_Line("l. zaszyfrowac dane");

Put_Line("2. odszyfrowac dane");

Put("wcisnij 1 albo 2: ");

Get(Pom); --wczytanie znaku odpowiadajacego wybranej opcji

case Pom IS

when 'I1 => --kiedy uzytkownik chce zaszyfrowac dane

while (NOT End_Of_File(Plik_Zrodlowy)) and End_of_Line( Plik_zrodlowy) LOOP

New_Li ne(Pli k_wyni kowy);

--wstawienie nowej linii do pliku wyjsciowego

Skip_Line(Plik_Zrodlowy);

--przejscie do nowej linii w pliku zrodlowym END LOOP; LOOP

--w petli wczytywane sa kolejne znaki z pliku wejsciowego i po zastapieniu tych znakow ich

--odpowiednikami zapisywane do pliku wyjsciowego

Get(Plik_zrodlowy, Pom;;

--pobranie znaku z pliku wejsciowego

i:=0;

LOOP

--pet!a sprawdzajaca czy wczytany znak jest litera alfabetu angielskiego - czyli

--czy znak ten wystepuje w tablicy liter T

I:=!+!;

EXIT WHEN (T(l,l)=Pom) OR (l>=52);

--koniec petli kiedy znak znaleziono w tablicy

--Tub kiedy sprawdzono cala tab!ice i znak nie wystapil

END LOOP;

IF T(l,l)=Pom THEN

--jezeli poprzednia petla zakonczyla sie dlatego, ze znaleziono

--odpowiadajaca wczytanemu znakowi litere

Pom:=T(2,l);

--zmiennej pom przypisany zostaje znaleziony odpowiednik wczytanej litery

END IF;

Put (Pi i k_vyyni kowy, Pom) ;

--zapisanie zaszyfrowanego znaku do pliku wynikowego

EXIT when End_of_File(Plik_zrodlowy);

--warunek konczacy wczytywanie znakow z pliku wejsciowego,

--jezeli osiagnieto koniec pliku

--petla wstawiajaca nowa linie w pliku wyjsciowym, jezeli w pliku zrodlowym osiagnieto koniec linii, -- ale nie koniec pliku

--petla dziala do momentu, az w kolejnej linii w pliku zrodlowym znajduja sie jakies znaki

while End_Of_Line(Plik_Zrodlowy) LOOP

New_Li ne(Pii k_wyni kowy);

--wstawienie nowej linii do pliku wyjsciowego

Skip_Line(Plik_Zrodlowy);

--przejscie do nowej linii w pliku zrodlowym

END LOOP; END LOOP;

Put("zapisano dane w pliku wynikowym");

Strona 2

Szyfrator.adb

WHEN '2' => --kiedy uzytkownik chce odszyfrowac dane

while (not End_Of_File(Plik_zrodlowy)) AND End_Of_Line(

Plik_zrodlowy) loop New_Li ne (Pii k_wyni kowy);

--wstawienie nowej linii do pliku wyjsciowego Skip_Line(Plik_Zrodlowy);

--przejscie do nowej linii w pliku zrodlowym END LOOP;

LOOP

--w petli wczytywane sa kolejne znaki z pliku wejsciowego i po
zastapieniu tych znakow literami, ktorycn sa ^^

--odpowiednikami zapisywane do pliku wyjsciowego Get(Plik_Zrodlowy, Pom); --pobranie znaku z pliku wejsciowego l:=0;

LOOP

--petla sprawdzajaca czy wczytany znak jest litera alfabetu angielskiego - czyli

--czy znak ten wystepuje w tablicy liter T

I:=!+!;

EXIT VyHEN (T(2,l)=Pom) OR (I>=52);

--koniec petli kiedy litere znaleziono w tablicy jako odpowiednik

--jakiejs litery Tub kiedy sprawdzono cala tablice i znak nie wystapil

END LOOP;

IF T(2,I)=Pom THEN

--jezeli poprzednia petla zakonczyla sie dlatego, ze znaleziono

--w tablicy odpowiednikow litere taka jak wczytany znak

Pom:=T(l,l);

--zmiennej pom przypisana zostaje litera, ktorej odpowiednikiem jest wczytany znak END IF;

Put (Pi i k_Wyni kowy, Pom) ;

--zapisanie odszyfrowanego znaku do pliku wynikowego EXIT WHEN End_Of_File(Plik_zrodlowy);

--warunek konczacy wczytywanie znakow z pliku wejsciowego, --jezeli osiagnieto koniec pliku

--petla wstawiajaca nowa linie w pliku wyjsciowym, jezeli w pliku zrodlowym osiagnieto koniec linii, -- ale nie koniec pliku

--petla dziala do momentu, az w kolejnej linii w pliku zrodlowym znajduja sie jakies znaki

while End_Of_Line(Plik_zrodlowy) loop New_Li ne(Pli k_wyni kowy);

--wstawienie nowej linii do pliku wyjsciowego Ski p_Li ne(Pli k_zrodlowy);

--przejscie do nowej linii w pliku zrodlowym END LOOP;

END LOOP;

Put("Zapisano dane w pliku wynikowym");

WHEN OTHERS =>

--kiedy nie wybrano ani 1 ani 2 (ani zaszyfrowania ani odszyfrowania)

Put("Nie wybrano zadnej z dostepnych opcji"); end case;

close(Plik_zrodlowy); --zamkniecie pliku zrodlowego Close(Piik_wynikowy); --zamkniecie pliku wynikowego delay 2.0;

--obsluga wyjatkow

EXCEPTION

WHEN Name_Error =>

Put("Podano nazwe pliku. ktory nie istnieje");

DELAY 2.0; when use_Error =>

Put("wystapil bledny dostep do pliku");

Delay 2.0;

When End_error =>

Put(“Nastapil niespodziewany koniec pliku');

Delay 2.0;

end;



Wyszukiwarka

Podobne podstrony:
Ada 95 A guide for C and C programmers S Johnston
program losowosc
Ada Byron Pierwsza kobieta programistka
Nowy Prezentacja programu Microsoft PowerPoint 5
Charakterystyka programu
1 treści programoweid 8801 ppt
Programowanie rehabilitacji 2
Rola rynku i instytucji finansowych INowy Prezentacja programu Microsoft PowerPoint
Nowy Prezentacja programu Microsoft PowerPoint ppt
Szkoła i jej program
wykluczenie społ program przeciwdział
ProgrammingJavaLecture9
Nowa podstawa programowa WF (1)

więcej podobnych podstron