Мои программы
ПРОГРАММА «+-Алгебраический многочлен»
ОГЛАВЛЕНИЕ
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.