Другие языки программирования и технологии

помогите пожалуйста, Delphi

Есть код решето Эратосфена на Delphi. Он считает Процент простых чисел и т.д. Помогите пожалуйста переделать, чтоб выводились эти самые числа! unit ListEratosfen; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation procedure PEratosfen; {решето Эратосфена} var N: integer; {число введённых первых чисел натурального ряда} G: integer; I: integer; M: array of boolean; P: integer; {число простых чисел среди N первых натуральных чисел} K: integer; begin N:=StrToInt(Form1.Edit1.Text); G:=Trunc(Sqrt(N)); SetLength(M,N+2); for I:=1 to N do M := true; P:=0; K:=2; I:=2; while (K*I<n)>=true then P:=P+1; Form1.Label2.Caption := 'Среди первых '+ IntToStr(N) + ' натуральных чисел существует ' + IntToStr(P) + ' простых чисел'; Form1.Label3.Caption := 'Процент простых чисел равен: ' + FloatToStr(P/N*100); Form1.Label4.Caption := 'Доля простых чисел равна: ' + FloatToStr(P/N); end.
вот полностью раборая прога тебе с каментами моя
program resheto;
{$APPTYPE CONSOLE}

type
PNumber = ^TNumber; //Указатель на элемент списка
TNumber = record //запись элемента списка
num: integer; //Число в списке
next: PNumber; //Указатель на следующий элемент списка.
end;

var
N: integer; //натуральное число N
i: integer;
Numbers: array of TNumber; //Динамический массив для списка.
PNum,PNum1: PNumber;
Num,Num2,Ostatok: integer;

begin
Write('Enter N (N>=2): ');
Readln(N);
if N<2 then Exit; //Если N<2, просто выйти из программы
SetLength(Numbers,N-1); //Сразу выделим нужное количество элементов для однонаправленного списка. 2...N, всего N-1 элементов
//Заполним список числами от 2 до N
For i:=0 to N-2 do begin //Заполнение списка
Numbers.num:=i+2; //Начиная с 2, заканчивая N
if i<(N-2) then
Numbers.next:=@(Numbers[i+1]) //Указать на следующий элемент
else
Numbers.next:=nil; //Последний элемент ни на что не указывает.
end;
PNum:=@(Numbers[0]); //Указатель на текущий делитель
while True do begin
Num:=PNum^.num; //Текущий делитель
Num2:=Num*Num; //Квадрат текущего делителя
If Num2>N then Break; //Условие конца поиска простых чисел
PNum1:=PNum; //указатель PNum1 нужен, чтобы прогнать весь оставшийся список на поиск составных чисел
While (PNum1^.next)^.num < Num2 do PNum1:=PNum1^.next; //Все числа меньшие, чем квадрат делителя - простые, поэтому их пропустим
//Выкинуть все следующие числа, делящиеся без остатка на текущий делитель
While PNum1^.next<>nil do begin //Пока не дойдём до конца списка
Ostatok:=(PNum1^.next)^.num mod Num; //Разделим следующее число на текущий делитель
if Ostatok=0 then //Если делится без остатка
PNum1^.next:=(PNum1^.next)^.next //то выкинуть следующий элемент из списка
else
PNum1:=PNum1^.next; //Иначе переходим на следующий элемент
end;
PNum:=PNum^.next; //Следующий делитель (простое число)
end;
//Вывести оставшийся список
PNum:=@(Numbers[0]); //Указатель на первый элемент списка;
Writeln('Простые числа: ');
while PNum<>nil do begin //Пока не достигнем последнего элемента
Writeln(PNum^.num);
PNum:=PNum^.next; //Следующий элемент
end;
SetLength(Numbers,0); //Освободим занятую память.
Write('Press Enter for Exit');
Readln;
end.
Дмитрий Черноуцан
Дмитрий Черноуцан
1 931
Лучший ответ
Бектемир Кылычбек Уулу Виктор Логвинович, прога работает, но здесь она немного не полностью написана.
Это из-за движка "Ответы Маил. Ру". Индексы массива Numbers надо указать.

Удачи!
приведённый код сомнительный while (K*I<n)>=true then P:=P+1; а то можно было поменять заменить или добавить вместо P=P+1 ещё оператор вывода числа Writeln(n);
Алгоритм-Вход: натуральное число n
Пусть A — булевый массив, индексируемый числами от 2 до n, изначально заполненный значением true.
для i = 2, 3, 4, ..пока i^2 ≤ n:
если A = true:
для j = i^2, i^2 + i, i^2 + 2i, ..пока j ≤ n:
A[j] = false
Теперь все числа i, такие что A = true, являются простыми.

Пример программы на Delfi
FillChar(a,sizeof(a),1);
q:=round(sqrt(n));
for i:=2 to q do
if a then
begin
j:=i*i;
while j<=n do
begin
a[j]:=false;
j:=j+i;
end;
end;

Ещё пример программы
function IsSimple(const N:Integer):Boolean;
var I,M:Integer;
begin
M:=Trunc(Sqrt(N));
for I:=2 to M do
if (N mod I)<>0 then
begin
Result:=False;
Exit
end;
Result:=True
end;
procedure FindSimple(const N : Integer; var P : TInteger1DArray);
var I,K:Integer;
begin
SetLength(P,N);
if N=0 then Exit;
P[0]:=1;K:=1;
for I:=2 to N do
if IsSimple(I) then
begin
P[K]:=I;
Inc(K)
end;
SetLength(P,K)
end;