Witam serdecznie
Z góry zaznaczam że dopiero rozpoczynam przygodę z programowaniem, więc proszę o wyrozumiałość
Piszę program zaliczeniowy z Delphi. Ma on przedstawiać liczbę w postaci iloczynu potęg liczb pierwszych. O ile rozkład liczby na czynniki pierwsze nie przysparza mi większych problemów, to pogrupowanie czynniku na wzór np. 2332 zamiast 2223*3 jest już dla mnie sporym problemem
Program, który tutaj przedstawię kompiluje się, debugger nie pokazuje żadnych błędów. Uruchamia się, lecz kiedy wpiszę liczbę do Pola Edit1 i chcę już wykonać obliczenia, po wduszeniu button1 następuje zawieszenie programu. Nie mam pojęcia gdzie popełniłem błąd i prosiłbym o łopatologiczne wyjaśnienie mi mojej pomyłki
Oto kod
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Math, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i, j, k, a, e, temp: Integer;
tab: array of Integer;
napis: String;
pierwsza: Boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToInt(Edit1.Text);
e:=floor(sqrt(a))+1;
SetLength(tab, e);
temp:=a;
j:=0;
while j<e do
begin
tab[i]:=0;
end;
i:=3;
if a=2 then tab[a]:=1
else
begin
while i<=e do
begin
if (a mod i) = 0 then
begin
tab[i]:=tab[i]+1;
a:=a div i;
end
else i:=i+2;
end;
end;
pierwsza:=true;
i:=3;
while i<=e do
begin
if tab[i]<>0 then
begin
pierwsza:=false;
Break;
end;
end;
j:=2;
if pierwsza=true then napis:=IntToStr(temp)
else
begin
while j<=e do
begin
if (tab[j]>0) then
begin
if tab[j]=1 then napis:=napis+IntToStr(j)
else napis:=napis+IntToStr(j)+'^'+IntToStr(tab[j]);
if i<>e-1 then napis:=napis+'*';
end;
j:=j+1;
end;
end;
Memo1.Lines.Add(napis);
end;
end.
Z góry dziękuję za wszelką pomoc