Вывести все пары простых чисел, которые отличаются друг от друга на 2, в заданном промежутке

Valvi

два простые числа отличаются друг от друга на 2 (пример 41 и 43)вывести все пары таких чисел в промежутке [n,2n],где n- натуральное число больше 2,числа задаются в текстовом файле.
14 ответов

Valvi

{$R *.dfm}
function Prost(a:integer):boolean;
var i:integer;
begin
result:=true;
i:=2;
while(i*i<=a)and result do
if a mod i=0 then result:=false
else i:=i+1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var f:textfile;
    n,i,k:integer;
begin
assignfile(f,'1.txt');//файл в папке с программой
reset(f);
read(f,n);
closefile(f);
Memo1.Lines.Add('Пары близнецов от '+inttostr(n)+' до '+inttostr(2*n));
k:=0;
for i:=n to 2*n-2 do
if Prost(i) and Prost(i+2) then
 begin
  k:=1;
  Memo1.Lines.Add(inttostr(i)+'  '+inttostr(i+2));
 end;
if k=0 then  Memo1.Lines.Add('В данном диапазоне чисел-близнецов нет');
end;


Valvi

можно через stringgrid пусть чисел 10 будет.


Valvi

В файле число 500
{$R *.dfm}
function Prost(a:integer):boolean;
var i:integer;
begin
result:=true;
i:=2;
while(i*i<=a)and result do
if a mod i=0 then result:=false
else i:=i+1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var f:textfile;
    n,i,k:integer;
begin
assignfile(f,'1.txt');
reset(f);
read(f,n);
closefile(f);
with StringGrid1 do
 begin
  fixedcols:=0;
  fixedrows:=0;
  colcount:=2;
  rowcount:=1;
 end;
Label1.Caption:='Пары близнецов от '+inttostr(n)+' до '+inttostr(2*n);
k:=-1;
for i:=n to 2*n-2 do
if Prost(i) and Prost(i+2) then
 begin
  k:=k+1;
  StringGrid1.Cells[0,k]:=inttostr(i);
  StringGrid1.Cells[1,k]:=inttostr(i+2);
  StringGrid1.RowCount:=StringGrid1.RowCount+1;
 end;
if k=0 then  ShowMessage('В данном диапазоне чисел-близнецов нет');
end;


Valvi

вот что есть,как можно это модифицировать что бы оно все таки считало.
$R *.dfm}
 
procedure TForm1.BitBtn1Click(Sender: TObject);
 
  var
   myFile: TextFile;       // файл
   fName: String[80]; // имя файла
   st: String[80];   // буфер для чтения из файла
   i,j, CountGor, CountVer:integer;
   h:real;
begin
 if OpenDialog1.Execute then
         begin
            assignFile(myFile, opendialog1.FileName);
         end;
   {$I-}
    Reset(myFile);  // открыть для чтения
   {$I+}
   if IOResult <> 0 then
     begin
       MessageDlg('Ошибка доступа к файлу ' + fName,
                   mtError,[mbOk],0);
       exit;
     end;
 
 
      Reset(myFile);
      ReadLn(myFile,st);
 
      CountGor:=0;
          for i:=0 to length(st) do
              if st[i]=#32 then
                  begin
                    inc(CountGor)
                  end
              else
                if st[i]=#9 then
                  begin
                    inc(CountGor)
                  end;
        inc(CountGor);
        CountVer:=0;
 
        Reset(myFile);
        While not EOF(myFile) do
            begin
                ReadLn(myFile,st);
                CountVer:=CountVer;
            end;
 
        StringGrid1.ColCount:=CountGor;
        StringGrid1.RowCount:=CountVer;
        Reset(myFile);
 
        for i:=0 to CountVer do
            for j:=0 to CountGor do
                begin
                    if j = CountGor then readln(myFile, h) else read(myFile, h);
                    StringGrid1.Cells[j, i]:=FloatToStr(h);
                end;
 
        CloseFile(myFile);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
    var
    a:array  [0..9] of integer;
begin
for i:=0 to 9 do
  begin
     a[i]:=StrToInt (StringGrid1.Cells[i,0];
 
  end;
 
  for i:=0 to 9 do
  if a[i]>(a[i+1]+2) and a[i]<(a[i+1]+2) then
 
    ShowMessage (intToStr(a[1])) ;
 
end;
загружает нормально,но не считает количество пар близнецов.и не вижу изменений в своем коде.


Valvi

Написано конечно очень круто, особенно это
if a[i]>(a[i+1]+2) and a[i]<(a[i+1]+2) then


Valvi

это именно то место,где где мысли по поводу того что должно быть дальше,пропали.


Valvi

Или все пиши сам, или пользуйся тем что дают...


Valvi

у меня есть определенные условия,ты можешь что-то придумать с те что я написала?


Valvi

у меня есть определенные условия
Вот что написано в задании
два простые числа отличаются друг от друга на 2 (пример 41 и 43)вывести все пары таких чисел в промежутке [n,2n],где n- натуральное число больше 2,числа задаются в текстовом файле.
Это я сделал, а чего нет в задании, я не экстрасенс.


Valvi

спасибо большое. но такая загрузка не работает,сделала так,можешь попробовать здесь исправить ошибки чтобы работало.


Valvi

но такая загрузка не работает
Все работает.


Valvi

можешь попробовать здесь исправить ошибки чтобы работало.
Вот уж извините, мне мой мозг еще нужен, ломать его в ваших каракулях Боже упаси...


Valvi

да,все работает. но мне немного другой тип загрузки просто нужен.у stringGridв нем 10 значений,нужна процедура или функция,которая после нажатия кнопки все эти пары посчитает.


Valvi

у stringGridв нем 10 значений,
Как Вы узнаете сколько будет значений, если это зависит от числа, записанного в файле? Пока не прочитаете файл и не прогоните программу, не узнаете.