Deutsch

Мои программы

02.02.25 09:36
Re: Мои программы
 
alek4 старожил
в ответ alek4 31.01.25 14:13

ПРОГРАММА «2-Арифметическая»

ОГЛАВЛЕНИЕ

1. Сведения об арифметической прогрессии

2 Цель программы

3. Исходные данные

4. Алгоритм

5.Вывод

6. Итоги

7. Скачать программу

Приложение 1

Распечатка программы «2-Арифметическая»


1. Сведения об арифметической прогрессии

Википедия

Арифметическая прогрессия

Материал из Википедии — свободной энциклопедии

Арифмети́ческая прогре́ссия - последовательность чисел (членов прогрессии), в которой каждое число, начиная со второго, получается из предыдущего добавлением к нему постоянного числа(шага, или разности прогрессии).

2. Цель программы

Программа «2—Арифметическая» есть продолжение исследований про программе «1-Ариметическая». Цель программы изучить закономерности серий простых чисел при разных комбинациях первого числа прогрессии и шага прогрессии.

3. Исходные данные.

Пример

Const

w1=199;//нижняя граница первых чисел арифметической прогресии

w=1000; //верхняя граница первых чисел арифметической прогресии

ma =30;// нижняя граница шагов арифметической прогрессии

m=600;//верхняяграница шагов арифметической прогрессии

n=300;// число членов арифметической прогрессии

4. Алгоритм

4.1.Общий цикл по переменой r.

На каждой итерации первое число равно r.

Генерируются арифметическиепрогрессии с шагами от 1 до m.

4.2. На каждой итерации цикла r формируется массивы

s:array [1..m,1..n] of cardinal;//таблица арифметических прогрессий,

//каждая из n элементов, при m величин шагов, вычисляется

//последовательнодля 1-w первых чисел

a: array [1..w, 1..m] ofcardinal;//длины маскимальных серий

//простых чисел при разных сочетанияхпервых чисел и величины шага

c: array [1..w,1..m] ofcardinal;

// номер шага началамаксимальных длин серий простых чисел

h: array [1..50] ofcardinal;

//распределениедлинсерий простых чисел

4.3. По матрице ф находится m1 – дли на максимальной серии протычх чисел.

4.4.По числу m1 и матрицам aи c находятся матрицы

p:array [1..10,1..100] ofcardinal;//

//p[1,t] первые числа в максимальной серии

//p[2,t]шагв максимальной серии

//p[3,t]номер шагав максимальной серии

//p[4,t]длинамаксимальной серии

// t- порядковый номер максимальной серии.

//Равен номеру окантовки.

u: array [1..50] of cardinal;

//распределениедлин максимальных серий простыхчисел

h: array [1..50] ofcardinal;

5. Вывод

Выводятся все массивы введенные выше.

Массивы c и a выводятся в одной таблице №1

Пары чисел: ca

6. Итоги

Найдены три сериипо 10 простых.

Первое число – шаг – номер шага – длина серии простых

199210110

21042012610

799420125..10

7. Скачать программу

zip

https://disk.yandex.ru/d/gCPBHHR82Djq8Q

Приложение 1

Распечатка программы2-Арифметическая

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button5: TButton;

Label1: TLabel;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

Edit1: TEdit;

Label4: TLabel;

StringGrid1: TStringGrid;

StringGrid4: TStringGrid;

Edit2: TEdit;

procedure Button1Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

const

{ w1=4;//нижняя граница начальных чисел арифметической прогресии

w=40 ;//верхняя граница начальных чисел арифметической прогресии

ma =1;// нижняя граница шагов арифметической прогрессии

m=12;//верхняяграница шагов арифметической прогрессии

n=25;// число членов арифметической прогрессии }

w1=1;//нижняя граница первых чисел арифметической прогресии

w=1500; //верхняя граница первых чисел арифметической прогресии

ma =300;// нижняя граница шагов арифметической прогрессии

m=300;//верхняяграница шагов арифметической прогрессии

n=1000;// число членов арифметической прогрессии

var

Tick: Cardinal;

s:array [1..m,1..n] of cardinal;//таблица арифметических прогрессий,

//каждая из n элементов, при m величин шагов, вычисляется

//последовательнодля 1-w первых чисел

a: array [1..w, 1..m] ofcardinal;//длины маскимальных серий

//простых чисел при разных сочетанияхпервых чисел и величины шага

c: array [1..w,1..m] ofcardinal;

// номер шага началамаксимальных длин серий простых чисел

p:array [1..10,1..100] ofcardinal;//

//p[1,t] первые числа в максимальной серии

//p[2,t]шагв максимальной серии

//p[3,t]номер шагав максимальной серии

//p[4,t]длинамаксимальной серии

// t- порядковый номер максимальной серии.

//Равен номеру окантовки.

u: array [1..50] of cardinal;

//распределениедлин максимальных серий простыхчисел

h: array [1..50] ofcardinal;

//расрпределениедлинсерий простых чисел

i,j,q ,z,r,i1,j1,tt,t,k,x,e ,aa,v,d,y:cardinal;

n1, n2, n3,n4: cardinal;//

m1,m2,m3,m4,m5: cardinal;//

f1,f2,f3,f4,f5:cardinal;//

// Функция нахождения простых чисел

// По книгеЖуков "Программируем в Delphi"

function good(Numb:integer):boolean;

var

i:integer;

begin

Form1.Caption:=IntToStr(GetTickCount-Tick);

good:= true;

for i:=2 to Trunc(Sqrt(Numb)) do

if (Numb mod i) =0then

begin

good := false;

exit;

end; end;

procedure TForm1.Button1Click(Sender: TObject);

// окантовка

begin

for q:=1 to m// нумерация по вертикалив табл №1 ,

do if good (q) then StringGrid2.Cells[0,q]:='*'+IntToStr(q)

elseStringGrid2.Cells[0,q]:=IntToStr(q);

for q:=1 to n //нумерация по горизонтали в табл №1 ,

doif good (q) thenStringGrid2.Cells[q,0]:='*'+IntToStr(q)

elseStringGrid2.Cells[q,0]:=IntToStr(q);

for q:= 1 to w// нумерация по вертикалив табл №1 ,

do if good (q) then StringGrid1.Cells[0,q]:='*'+IntToStr(q)

elseStringGrid1.Cells[0,q]:=IntToStr(q);

for q:=1 to m //нумерация по горизонтали в табл №1 ,

doif good (q) thenStringGrid1.Cells[q,0]:='*'+IntToStr(q)

elseStringGrid1.Cells[q,0]:=IntToStr(q);

for q:= 1 to 10// нумерация по вертикалив табл №1 ,

do if good (q) then StringGrid4.Cells[0,q]:='*'+IntToStr(q)

elseStringGrid4.Cells[0,q]:=IntToStr(q);

for q:=1 to 100//нумерация по горизонтали в табл №1 ,

doif good (q) thenStringGrid4.Cells[q,0]:='*'+IntToStr(q)

elseStringGrid4.Cells[q,0]:=IntToStr(q);

//////////////////

aa:=((2*3)*(5*7)) ;

for r:= w1 to w do

begin

n1:=0; n2:=0;

for i:=ma to m do

for j:=1 to n do

s[i,j] :=0;

for i:=mato mdo

s[i,1] :=r;

for I:=ma to m do

for J:=2 to n do

s[i,J] :=s[i,J-1] +i;

//отыскание максимальныхсерийпростых чисел

//вычисление матрицыс[i,j]

for I:=ma to m do begin

n2:=0;n1:=0;

for J:=1 to ndobegin

if good (s[i,j]) thenbegin

x:=1;n2:=n2+1 ;d:=d+1;END;

if good (s[i,j])=FALSE then

begin

h[n2] := h[n2] +1;

v:= v+1;

end;

if (good (s[i,j])=FALSE )AND (N2>N1)

then begin

n1:= n2; n2:=0; a[r,i] :=n1;

n4:=j;c[r,i] := J-n1;

end;

if (((j=n) and(n2>0))and good (s[i,j])) thenh[n2] := h[n2] +1;

if j=n then

if ((good (s[i,j])AND (N2>N1)))

then begin

n1:= n2;h[n1] := h[n1] +1; n2:=0; a[r,i] :=n1; n4:=j;

c[r,i] := J;

end;

if (good (s[i,j])=FALSE )then n2:=0;

end;

if x=0 then e:=e+1;

x:=0;

end;

end;

/////////распределение серий по длине

/////////////////////////////

//отыскание максимальной серии

for i:=w1 to w do

for j:=ma tom do

if a[i,j] >m1 then

begin m1:= a[i,j]; m2:=i; m3:= j;m4:=c[i,j];

end;

for i:=w1 to w do

for j:=ma tom do

if a[i,j]=m1 then

m5:= m5+1;

for i:=w1 to w do

for j:=ma tom do

if a[i,j] = m1 then begin

k:=k+1;p[1,k] :=i;p[2,k]:=j; p[3,k] := c[i,j]; p[4,k] := m1;

end;

u[50]:=0;

for i:=w1 to w dobegin

for j:=ma tom do

if a[i,j]>0 then

begin

t:=a[i,j];

u[t]:=u[t] +1;

end;

end;

for i:=1 to 50 do

if h>0 then

Z:=z+h*i;

for i:=1 to 50 do

if u>0 then

tt:=tt+u*i;

y:= v+d;

StringGrid2.Cells[0,0] := 's[..]';

StringGrid1.Cells[0,0] := 'a[]c[]';

StringGrid4.Cells[0,0] := '№ 4';

StringGrid4.Cells[0,1] := 'p[1,k]';

StringGrid4.Cells[0,2] := 'p[2,k]';

StringGrid4.Cells[0,3] := 'p[3,k]';

StringGrid4.Cells[0,4] := 'p[4,k]';

StringGrid4.Cells[0,7] := 'u[1..50]';

StringGrid4.Cells[0,8] := 'h[1..50]';

Form1.Caption:=IntToStr(GetTickCount-Tick);

for i:=1 to mdo

for j:=1 to n doif s[i,j]>0 then

if good (s[i,j]) then StringGrid2.Cells[j,i]:='*'+ ' '+ IntToStr(s[i,j])

else StringGrid2.Cells[j,i]:= IntToStr(s[i,j]);

Form1.Caption:=IntToStr(GetTickCount-Tick);

for i:=w1 to wdo

for j:=ma to m do

StringGrid1.Cells[j,i]:=

IntToStr( c[i,j])+''+ IntToStr( a[i,j]);

for i:=1 to 5do

for j:=1 to 100 do

if good (p[i,j]) then

StringGrid4.Cells[j,i]:='*'+IntToStr(p[i,j])

elseStringGrid4.Cells[j,i]:= IntToStr(p[i,j]);

for i1:=1 to 50 do

StringGrid4.Cells[i1,7]:= IntToStr(u[i1]);

for i:=1 to 50do

StringGrid4.Cells[i,8]:= IntToStr(h);

Edit1.Text :='n1=' +''+ IntToStr(n1)+''+

'n2=' +''+ IntToStr(n2)

+''+ 'n3=' +''+ IntToStr(n3)

+''+ 'n4=' +''+ IntToStr(n4)

+''+ 'm1=' +''+ IntToStr(m1)

+''+ 'm2=' +''+ IntToStr(m2)

+''+ 'm3=' +''+ IntToStr(m3)

+''+ 'm4=' +''+ IntToStr(m4)

+''+ 'm5=' +''+ IntToStr(m5)

+''+ 'f1=' +''+ IntToStr(f1)

+''+ 'f2=' +''+ IntToStr(f2)

+''+ 'h[1]=' +''+ IntToStr(h[1])

+'' +' h[2] '+''+ IntToStr(h[2])

+'' +'v='+ ''+ IntToStr(v)

+''+ 'd=' +''+ IntToStr(d)

+''+ 'y=' +''+ IntToStr(y) ;

Edit2.Text :=IntToStr(u[50])

+''+'z=' +''+ IntToStr(z)

+''+ ' tt=' +''+ IntToStr(tt)

+''+ ' e=' +''+ IntToStr(e)

+''+ ' x=' +''+ IntToStr(x)

+''+ ' aa=' +''+ IntToStr(aa);

Form1.Caption:=IntToStr(GetTickCount-Tick);

end;

////////////////////////////////////////////////////////////////

procedure TForm1.Button5Click(Sender: TObject);

begin

close

end;

initialization

randomize;

end.

 

Перейти на