русский

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

10.02.25 11:05
Re: Мои программы
 
alek4 старожил
in Antwort alek4 31.01.25 14:13

ПРОГРАММА «+-Алгебраический многочлен»

ОГЛАВЛЕНИЕ

1. Общее

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

3. Алгоритм

4. Итог

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

Приложение 1

Распечатка программы


1. Общее

Программа «+-Алгебраический многочлен» разработана в развитие программы «1-Алгебраический многочлен».

Снято ограничение: положительные степени и коэффициенты одночлена.

Моё мнение.

Курс информатики в школе должен быть пересмотрен.

Необходимо.

1.Школьник должен освоить язык программирования.

Разный по школам.

Самый простой Дельфи 7.

Остальное не важно.

2.Программирование должно быть на основе школьных предметов.

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

Михаил Фленов

БИБЛИЯDELPHI

676 стр.

Для решения многих задач по школьной программы достаточно изучить 40 стр.

Программирование, как плавание. Одни люди плавают, другие нет.

Можно плавать по-собачьи, можно баттерфляем.

Алгебра в школе – много об операциях с алгебраическими многочленами.

О многочленах

https://math-prosto.ru/ru/pages/polynomials/polynomial_deg...

Программа «1 –Алгебраический многочлен» создает случайный многочлен.

Есть разные способы генерации случайного многочлена.

Отдельный вопрос насколько разные способы тождественны.

Генерация в программе включает:

1.Генерация членов многочлена

2.Приведение подобных членов

3.Группировка по степени многочлена.

2. Исходные данные]

b=50;//число одночленов в исходном многочлене

c= 20;// задание вероятности одночлена не равного нулю

c1=10;//задание вероятности одночлена не равного нулю

d=20;// задание вероятности степени переменой

f=191; //задание вероятности значения коэффициента в одночлене

e1=8; //знак степени

e2=13;//знак степени

e3= 9; //знак коэффициента

e4= 15;//знак коэффициента

3. Алгоритм

Действие 1

Формируется исходный многочлен

w:array [1..2,1..b] ofcardinal;//

Выбор знака степени одночлена: e1 и e2

Выбор знака коэффициента: e3 и e4

Действие 2

Приводятся подобные члены

u1:array [1..2,1..b] ofcardinal;//массив после приведения

Действие 3

Расстановка одночленов по степени неизвестной

u2:array [1..2,1..b] ofcardinal;// одночлены расставлены по степени

//неизвестной

4. Итог

Массив u2.

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

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

Приложение 1

Распечатка программы

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

b=50;//число одночленов в исходном многочлене

c= 20;// задание вероятности одночлена не равного нулю

c1=10;//задание вероятности одночлена не равного нулю

d=20;// задание вероятности степени переменой

f=191; //задание вероятности значения коэффициента в одночлене

e1=8; //знак степени

e2=13;//знак степени

e3= 9; //знак коэффицинта

e4= 15;//знак коэффицинта

var

Tick: Cardinal;

w:array [1..2,1..b] ofinteger;//

//1 - степень переменной, 2 - коэффицент одночлена

p : array [1..b] of integer;//номера одночленов не равных нулю

p1 :array [1..b] of integer;//массив номеров цикла

u:array [1..2,1..b] ofinteger;//дубль массива

// подобных одночленов массива u

u2:array [1..2,1..b] ofinteger;// одночлены расставлены по степени

y:array [1..199] ofinteger;// массив сложения одночленов

tt,i,j,q ,z,r,i1,i2,i3,i4,i5,i6,j1,j2,j3,g ,k, v:integer;

t,n1, n2, n3,n4 ,n5,n6: integer;//

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

f1,f2,f3,f4,f5,z2,z4,z6,z8,z9, x: integer;//

z1,z3,z5,z7 : real;

n: variant;

procedure TForm1.Button1Click(Sender: TObject);

// окантовка

begin

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

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

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

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

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

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

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

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

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

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

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

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

StringGrid1.Cells[0,0] := '№1';

StringGrid2.Cells[0,0] := '№2';

StringGrid1.Cells[0,1] := 'w[1,..]';

StringGrid1.Cells[0,2] := 'w[2,..]';

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

StringGrid1.Cells[0,4] := 'p1[..]';

StringGrid1.Cells[0,7] := 'y[..]';

StringGrid2.Cells[0,1] := 'u1[1,..]';

StringGrid2.Cells[0,2] := 'u1[2,..]';

StringGrid2.Cells[0,5] := 'u2[1,..]';

StringGrid2.Cells[0,6] := 'u2[2,..]';

For i:=1 to b do//формирование случайного многочлепна

if(random (c) +1) <=c1 then

begin

k:=k+1;

p[k] :=k;

p1[k] :=i;

if e1<random (e2) then

w[1,k]:= random(d)

else w[1,k] := -random(d);

if e3<random (e4) then

w[2,k]:= random(f)

else w[2,k] := -random(f)

end;

for i:=1to b do//приведение подобных одночленов

for j:= 1 to bdo

begin

u[1,j] := w[1,j];

u[2,j] := w[2,j];

end;

for z:=1 to b do

begin

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

for i2:=z+1 to b do

if u[1,z] = u[1,i2] thenbegin

v:=i2; x:=x+1; y[i2] :=i2;

u[2,z]:= u[2,z]+u[2,i2];

u[1,i2] :=0;

u[2,i2] :=0;

end;

end;

//Растановка одночленов по величине

// степени переменной

for i:=1 to 2 do

for j:=1 to b do begin

u2[1,j]:= u[1,j]+d;

u2[2,j]:= u[2,j];

end;

for tt:=1 to b*b do

for i3 := 2 to bdo

begin

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

begin

n1:=u2[1,i3-1] ;

n2 :=u2[2,i3-1] ;

n3 :=u2[1,i3];

n4 := u2[2,i3] ;

end;

if (n1>0) and ((n3>=0)and (n4<>0))then

ifn1< n3then

begin

u2[1,(i3-1)]:=n3;

u2[2,i3-1]:=n4;

u2[1,(i3)] :=n1 ;

u2[2,i3] :=n2;

end;

if(n2=0) and (n4<>0) then

begin

u2[1,(i3-1)]:=n3;

u2[2,i3-1]:=n4;

u2[1,(i3)] :=n1 ;

u2[2,i3] :=n2;

end;

end;

for j2:=1 to b do

u2[1,j2]:=u2[1,j2] -d;

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

for j:=1 tob do begin

StringGrid2.Cells[j,1] := IntToStr(u[1,j]);

StringGrid2.Cells[j,2] := IntToStr(u[2,j]);

StringGrid2.Cells[j,5] := IntToStr(u2[1,j]);

StringGrid2.Cells[j,6] := IntToStr(u2[2,j]);

end;

for i:=1 to 2 do

for j:=1 tob do

StringGrid1.Cells[j,i] := IntToStr(w[i,j]);

for i:=1 to b do begin

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

StringGrid1.Cells[i,3] := IntToStr(p);

StringGrid1.Cells[i,4] := IntToStr(p1);

//StringGrid1.Cells[i,5] := IntToStr(p2);

StringGrid1.Cells[i,7] := IntToStr(y);

end;

Edit1.Text :=

'k=' +''+ IntToStr(k)

+''+ 'p[2]=' +''+ IntToStr(p[2])

+''+ 't=' +''+FormatFloat('0.00',t)

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

+''+ 'y[2]=' +''+ IntToStr(y[2])

+''+ 'n1=' +''+ IntToStr(n1)

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

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

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

+''+ 'u2[1,10]=' +''+ IntToStr(u2[1,10]) ;

end;

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

procedure TForm1.Button5Click(Sender: TObject);

begin

close

end;

initialization

randomize;

end.

 

Sprung zu