konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

Próbuję wykonać aplikację okienkową na odnajdywanie liczb pierwszych. Widzicie może coś w poniższym kodzie, co powinienem poprawić?

Już wiem, że nie mogę użyć funkcji readln i writeln, ale co w zamian? :)


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const rozmiar =100;

var
Form1: TForm1;
tablica:array [2..rozmiar] of boolean;
i,j:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

for i:=2 to rozmiar do tablica[i]:=true;

for i:=2 to rozmiar do
if (tablica[i]=true) then
begin
j:=2*i;
while (j<=rozmiar) do
begin
tablica[j]:=false;
j:=j+i;
end;
end;

for i:=2 to rozmiar do
if (tablica[i]=true) then write(i,', ');


end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
Dariusz Grochocki edytował(a) ten post dnia 27.10.11 o godzinie 08:30

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

"Podstawy masz" ale chyba jeszcze nie do końca ogarniasz VCL ;)

"Już wiem, że nie mogę użyć funkcji readln i writeln, ale co w zamian? :)"

np. Dodaj do formy komponent Memo.
zamiast if (tablica[i]=true) then write(i,', ');
wpisz: if (tablica[i]=true) then memo1.Lines.Add(inttostr(i))

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

Dzięki Jarku, pomogło!

Ponieważ ja na prawdę jestem początkujący :) potrzebuję wiedzieć, jak zrobić, aby wyskakiwały liczby pierwsze z przedziału [a,b], gdzie człowiek sam je określa. Koniec zbioru już ustawiłem, działa. Zrobiłem analogicznie z wyznaczaniem początku - i tu mam problem. Wiecie może, ja kto rozegrać?


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const rozmiar =10000000;

var
Form1: TForm1;
tablica:array [2..rozmiar] of boolean;
g,i,j:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

g:=StrToint(Edit1.text);

for i:=2 to g do tablica[i]:=true;

for i:=2 to g do
if (tablica[i]=true) then
begin
j:=2*i;
while (j<=g) do
begin
tablica[j]:=false;
j:=j+i;
end;
end;

for i:=2 to g do

if (tablica[i]=true) then memo1.Lines.Add(inttostr(i))

end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

end.
Dariusz Grochocki edytował(a) ten post dnia 27.10.11 o godzinie 18:47

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

Mała optymalizacja - nie musisz dalej sprawdzać niż pierwiastek z "g"
- czyli pętle mogą działać do max_g = round(sqrt(g)).

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

już mi się udało rozwiązać zadanie. dzięki za pomoc.

przy okazji, czego użyć, aby w memo, przy kolejnym generowaniu liczb pierwszych kasowały się poprzednie wyniki?
Piotr M.

Piotr M. programista

Temat: Sito Eratostenesa - gdzie jest błąd

http://lmgtfy.com/?q=how+to+clear+memo+delphi

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

bardzo dobra podpowiedź :) pomogło

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

http://kd5col.info/swag/

Pod tym linkiem jest bardzo dużo praktycznych przykładów dla programowania w języku pascal (pod kompilatory TP 7.0, Free Pascal, Delphi itp). Kiedyś sam często z tego korzystałem.
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Sito Eratostenesa - gdzie jest błąd

Dariusz Rorat:
http://kd5col.info/swag/

Pod tym linkiem jest bardzo dużo praktycznych przykładów dla programowania w języku pascal (pod kompilatory TP 7.0, Free Pascal, Delphi itp). Kiedyś sam często z tego korzystałem.
Połowa z tego pewnie już nie działa, a druga połowa za chwilę nie będzie działać na nowych Windows...
Strasznie leciwe owe porady - najmłodsza jest sprzed prawie 12 lat!!
Zdecydowanie lepszym źródłem porad dla początkujących jest strona http://delphi.about.com/.

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

Daniel "wloochacz" Grabowski:
Dariusz Rorat:
http://kd5col.info/swag/

Pod tym linkiem jest bardzo dużo praktycznych przykładów dla programowania w języku pascal (pod kompilatory TP 7.0, Free Pascal, Delphi itp). Kiedyś sam często z tego korzystałem.
Połowa z tego pewnie już nie działa, a druga połowa za chwilę nie będzie działać na nowych Windows...
Strasznie leciwe owe porady - najmłodsza jest sprzed prawie 12 lat!!
Zdecydowanie lepszym źródłem porad dla początkujących jest strona http://delphi.about.com/.

Większość kodu jest pod Turbo Pascal 7.0 (kiedyś sprawdzałem). Część da się skompilować pod FPC. Jest tam także dział Delphi. Nawet jeżeli połowa kodu nie działa, zawsze da się dostosować dla obecnego systemu operacyjnego i kompilatora.

Najprościej jest pójść na łatwiznę i skorzystać z gotowców. Trochę trudniej przenieść kod pod żądany kompilator ale da się.
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Sito Eratostenesa - gdzie jest błąd

Dariusz Rorat:
/ciach/
Najprościej jest pójść na łatwiznę i skorzystać z gotowców. Trochę trudniej przenieść kod pod żądany kompilator ale da się.
Jasne, że się da - tylko po co wynajdywać koło po raz stutysięczny?
Nie szkoda na to czasu i energii?

konto usunięte

Temat: Sito Eratostenesa - gdzie jest błąd

Daniel "wloochacz" Grabowski:
Dariusz Rorat:
/ciach/
Najprościej jest pójść na łatwiznę i skorzystać z gotowców. Trochę trudniej przenieść kod pod żądany kompilator ale da się.
Jasne, że się da - tylko po co wynajdywać koło po raz stutysięczny?
Nie szkoda na to czasu i energii?

To kwestia licencji i dostępności kodów źródłowych. Jest wiele gotowych komponentów, kodów źródłowych ale nie wszystkie można wykorzystać chociażby ze względu na licencję, funkcjonalność itd.

Przykład: Lazarus. Nie można tak po prostu zainstalować komponentów Delphi, kod musi być przeniesiony pod ten kompilator (wymaga to odpowiednich zmian).

Następna dyskusja:

Delphi.NET - jest tu ktos? :-)




Wyślij zaproszenie do