Program do tworzenia iloczynu potęg liczb pierwszych uruchamia się, ale zawiesz.

0

Hej,
Prosiłbym o pomoc w znalezieniu błędu. Program ma przedstawiać liczbę w postaci iloczynu potęg liczb pierwszych. Ogólnie działa tak, że sprawdza wystąpienia dzielników do jego pierwiastka a jeśli ich nie ma to znaczy, że liczba jest liczą pierwszą. Program się kompiluje, ale po wpisaniu jakiejś liczby zawiesza.

unit z1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Math;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: 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;

  //Zerowanie tablicy
  j:=0;
  while j<e do
        begin
          tab[i]:=0;
        end;

  //Tabelka wystąpień
  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;

    //Sprawdzanie czy jest pierwsza
    pierwsza:=true;
    i:=3;
    while i<=e do
      begin
         if tab[i]<>0 then
         begin
           pierwsza:=false;
           Break;
         end;
      end;

    //Wyświetlanie
        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;
      Edit2.Text:=napis;
end;

end. 
0

A jakie zdarzenia masz podpięte pod Edit1 ?

0
Ceis napisał(a):

Hej,
Prosiłbym o pomoc w znalezieniu błędu. Program ma przedstawiać liczbę w postaci iloczynu potęg liczb pierwszych. Ogólnie działa tak, że sprawdza wystąpienia dzielników do jego pierwiastka a jeśli ich nie ma to znaczy, że liczba jest liczą pierwszą. Program się kompiluje, ale po wpisaniu jakiejś liczby zawiesza.

Niech zgadnę: newbie który szuka debuggera? Oczywiście www.google.pl okazało się zbyt wymagające.

0

Zdarzenia? Pole Edit1 jest wykorzystywane tylko do wpisania wartości zmiennej 'a'.

0

Jeżeli nie masz żadnego zdarzenia podpiętego pod Edit1 to samo wpisanie liczby nie może spowodować zawieszenia programu (właściwie to może ale do tego niezbędne są takie umiejętności programowania w Delphi których ewidentnie nie posiadasz).

0
_13th_Dragon napisał(a):

Jeżeli nie masz żadnego zdarzenia podpiętego pod Edit1 to samo wpisanie liczby nie może spowodować zawieszenia programu (właściwie to może ale do tego niezbędne są takie umiejętności programowania w Delphi których ewidentnie nie posiadasz).

Mu zapewne chodzi że klawisz wciska, tylko jest tak dokładny w opisie problemu jak w przeszukaniu forum na obecność tutorialów od debuggera.

0

Tak, samo wpisanie liczby go nie zawiesza. Dopiero po kliknięciu Buttona.

0

A czy twoja wersja Delphi jest całkiem pozbawiona debugiera?

0
_13th_Dragon napisał(a):

A czy twoja wersja Delphi jest całkiem pozbawiona debugiera?

Bodaj nie ma Delphi bez debuggera. Lazarus też ma debugger od daawnych czasów, nawet TP ma debugger. Obawiam się że problem leży w pytaczu który nie posiada komponentu TBrain oraz TGoogle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1