Witam wszystkich.
Próbowałem napisać w Delphi program na zajęcia, który zajmowałby się szyfrowaniem.
Szyfrowanie miałoby polegać na wydzieleniu przez program paczek po 2 znaki w całym wprowadzonym ciągu i wymieszaniu ich wg poniższego wzoru:
aabbccddeeffgghhiijj => bbaaddccffeehhggjjii [zamiana pierwszej i drugiej paczki, zamiana trzeciej z czwartą itd]
Niestety podczas ciężkiej pracy z kodem doszedłem do pewnych rezultatów, lecz wszystko działało gdy pracowałem na wcześniej określonych tablicach, które przechowywały paczki. Gdy przerobiłem program na wersję o dowolnej ilości znaków powstał problem, że program się odpala, ale po kliknięciu na przycisk następuje zawieszenie programu.
Oto kod jaki udało mi się stworzyć:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label5: TLabel;
zdanie: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Edit1Change(Sender: TObject);
procedure zdanieChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
tekst:String;
tekst_po:String; {tekst po ustaleniu parzystosci}
liczba_znakow:Integer;
liczba_znakow_po:Integer; {tekst po ustaleniu parzystosci}
liczba_paczek:Integer;
tablica:array of String;
tablica1:array of String;
parzysta:boolean;
petla:Integer;
x:Integer;
y:Integer;
z:Integer;
wynik:String;
wynik1:String;
begin
{liczenie ilosci znakow}
tekst:=zdanie.Text;
liczba_znakow:=length(zdanie.Text);
Label1.Caption:=IntToStr(liczba_znakow);
{sprawdzanie, czy liczba zakow jest parzysta jesli nie to dodajemy znak spacji, zeby bylo parzyscie}
begin
parzysta:=(liczba_znakow mod 2 = 0);
if parzysta then tekst_po:=tekst
else tekst_po:=tekst+#32;
end;
{ustawienia parametrow tablicy}
SetLength(tablica, liczba_znakow);
{liczenie ilosci znakow}
liczba_znakow_po:=length(tekst_po);
liczba_paczek:=liczba_znakow_po div 2;
Label4.Caption:=IntToStr(liczba_paczek);
{petla zapisywania paczek znakow do tablicy}
x:=1;
petla:=0;
while petla<liczba_paczek do
begin
tablica[petla]:=Copy(tekst_po,x,2);
inc(petla);
inc(x,2);
end;
{ustawienia parametrow tablicy1}
SetLength(tablica1, liczba_znakow);
{zamiana paczek miejscami=> tablica na tablica1}
y:=0;
while y<liczba_paczek+1 do
begin
tablica1[y]:=tablica[y+1];
tablica1[y+1]:=tablica[y];
Inc(y,2);
end;
{Sklejanie paczek}
z:=0;
wynik1:=tablica1[0];
while z<liczba_paczek do
begin
wynik:=wynik1+tablica1[z+1];
end;
{wyswietlenie wyniku}
Edit2.Caption:=wynik;
end;
end.
Bardzo prosiłbym o pomoc i wsparcie. Chciałbym napisać kod w miarę najprostszy, ponieważ dopiero zaczynam programować i chciałbym wszystko zrozumieć - nawet jeśli trzeba będzie rozpisać kod na kilka linijek, aby obejść problem okrężną drogą. Proszę wybaczyć za chaos panujący w kodzie.
Z góry dziękuję za pomoc