Решето Эратосфена. Добавить ручной ввод количества простых чисел и вывод итога в файл

Помогите добавить возможность ручного ввода исходного количества используемых чисел (а то у меня программа автоматически использует только 255 значений). И чтобы она это все в txt выводила.
var
  m, p: set of byte;
  i, min: byte;
  h: integer;
 
begin
  write('h=');
  readln(h);
  m := [2..h];
  p := [];
  repeat
    min := h;
    for i := 2 to h do
      if (i in m) and (i < min) then 
        min := i;
    for i := 2 to h do
      if (i in m) and (i mod min = 0) then 
        m := m - [i];
    p := p + [min];
  until m = [];
  writeln('prostie chisla ot 2 do h');
  for i := 2 to h do
    if i in p then 
      write(i:4);
  readln;
end.
14 ответов

возможность ручного ввода исходного количества используемых чисел
А это что?
write('h=');
readln(h);


Puporev, это для того я добавил чтобы вручную можно было граничное число вводить анализируемых чиселPuporev, изначально просто этих строк не было .. а вместо h было 255


Сформулируйте полное и точное условие задания нормальным человеческим языком.


Puporev,


Просто она мне до 255 выводит числа, а мне нужно до вводимого мною диапазона. Плюс нужно вывод в файл сделать


С массивом так. Но в условии список, а с ними я не дружу.
var n,i,j:integer;
    m:array[1..1000] of boolean;
    f:text;
begin
repeat
write('Введите верхнюю границу диапазона до 1000 n=');
readln(n);
until n<=1000;
//разбиваем числа от 2 до n на простые и составные, используя решето Эратосфена
m[1] := false;//число 1 не простое
for i:=2 to n do m[i] := true;//пока все считаем простыми
for i:=2 to round(sqrt(n)) do
for j:=2 to n div i do //перебираем все возможные произведения
m[i*j]:=false;//это составное, будем "выкалывать"
assign(f,'prostye.txt');
rewrite(f);
for i:=1 to n do
if m[i] then
 begin
  write(i:4);
  write(f,i:4);
 end;
close(f);
end.


Puporev, А почему турбо паскаль постоянно выдает эту фигню (до 255) а с абц все нормально. С чем это связано


выдает эту фигню (до 255) а с абц все нормально.
В смысле с одним и тем же кодом и типами переменных разные результаты?


я кинул пример на скрине


Puporev,то есть в абц все норм с эти кодом турбо не хочет давать возможность вводить значение, то есть он сразу рассматривает диапазон от 0 до 255


Puporev, Помоги поставить в эту прогу вывод в файл, а то я ставлю аналогично как у тебя а у меня числа в файл не заносятся (хотя файл создается)
program Resheto;
 
var  a:array[1..100000]of longint;
      n,i,j,k,h:longint;
 
 
begin
   writeln('Program: "Resheto Eratosphena"');
   writeln;
   writeln('Vvedite chislo N, kotoroe budet granicey "resheta"');
   readln(n);
   writeln;
 
   for i:=2 to n do 
        if a[i]=0 then begin
                             h:=i;
                             j:=i+h;
                             while j<n do begin
                                                a[j]:=1;
                                                j:=j+h;
                                                end;
                           end;
          
   for i:=2 to n-1 do
      if a[i]=0 then write(i,' ');
 
   k:=0;
   for I:=2 to n-1 do
     if n mod i = 0 then k:=1;
 
   if k=0  then write(n);
   
   
  readln;
end.


В упор не вижу где создается файл и где в него что-то пишете.
(хотя файл создается)
Чудеса однако..


Puporev, Я просто аналогичную конструкцию как и ты написал в проге выше (строки 15-21.......) просто вставлял в 32 строку и у меня ничего не записывалось
assign(f,'prostye.txt');
rewrite(f);
for i:=1 to n do
if m[i] then
 begin
  write(i:4);
  write(f,i:4);


А в конце написали close(f);?