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

ОГЛАВЛЕНИЕ

1. Общее
2. Исходные данные
3. Алгоритм
4. Итог
5. Скачать программу

Приложение 1
Распечатка программы 

1. Общее
Моё мнение.
Курс информатики в школе должен быть пересмотрен.
Необходимо.
1. Школьник должен освоить язык программирования.
Разный по школам.
Самый простой Дельфи 7.
Остальное не важно.
2. Программирование должно быть на основе школьных предметов.
Знаний программирования для освоения в объеме решения задач школьной программы нужно немного.
Михаил Фленов
БИБЛИЯ  DELPHI
676 стр.
Для решения многих задач по школьной программы достаточно изучить 40 стр.
Программирование, как плавание. Одни люди плавают, другие нет.
Можно плавать по-собачьи, можно баттерфляем.
Алгебра в школе – много об операциях с алгебраическими многочленами.
О многочленах
https://math-prosto.ru/ru/pages/polynom … olynomial/
Программа «1 –Алгебраический многочлен» создает случайный многочлен.

Есть разные способы генерации случайного многочлена.
Отдельный вопрос насколько разные способы тождественны.
Генерация в программе включает:
1. Генерация членов многочлена
2. Приведение подобных членов
3. Группировка по степени многочлена.

Приняты ограничения:
1. Одна переменная
2. Коэффициенты положительные.

Возможное развитие программы «1 –Алгебраический многочлен»
1. Положительные и отрицательные переменные.
2. Несколько переменных
3. Перемножение многочленов

2. Исходные данные
b=20;//  число одночленов в исходном многочлене
       c= 20;// задание вероятности одночлена не равного нулю
       c1=10;//  задание вероятности одночлена не равного нулю
        d=20;// задание вероятности степени переменой
          f=  191; //задание вероятности значения коэффициента в одночлене

3. Алгоритм
Действие 1
Формируется исходный многочлен
w:   array [1..2,1..b] of  cardinal;//
   Действие 2
Приводятся подобные члены
u1:    array [1..2,1..b] of  cardinal;//массив после приведения
Действие 3
Расстановка одночленов по степени неизвестной
u2:    array [1..2,1..b] of  cardinal;// одночлены расставлены по степени
     //  неизвестной
4. Итог
Массив u2.
5. Скачать программу

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

Приложение 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=20;//  число одночленов в исходном многочлене
       c= 20;// задание вероятности одночлена не равного нулю
       c1=10;//  задание вероятности одночлена не равного нулю
        d=20;// задание вероятности степени переменой
          f=  191; //задание вероятности значения коэффициента в одночлене

      var
       Tick: Cardinal;

     w:   array [1..2,1..b] of  cardinal;//
   //  1 - степень переменной, 2 - коэффицент одночлена
       p : array [1..b] of cardinal;//номера одночленов не равных нулю
   p1 :     array [1..b] of cardinal;//массив номеров цикла
    p2 :     array [1..b] of cardinal;//фиксация сложения одночленов
u:   array [1..2,1..b] of  cardinal;//дубль массива
u1:    array [1..2,1..b] of  cardinal;//массив после приведения
// подобных одночленов массива u
     u2:    array [1..2,1..b] of  cardinal;// одночлены расставлены по степени
     //  неизвестной
       y:   array [1..199] of  cardinal;// массив сложения одночленов

tt,i,j,q ,z,r,i1,i2,i3,i4,j1,g ,k, v:  integer;
t,  n1, n2, n3,n4    : 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 ,
     do   StringGrid1.Cells[0,q]:=IntToStr(q) ;
    for q:=1 to b //нумерация по горизонтали в табл №1 ,
     do   StringGrid1.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 ,
     do  StringGrid2.Cells[q,0]:=IntToStr(q);

             for q:= 1 to 10   // нумерация по вертикали  в табл №1 ,
     do       StringGrid3.Cells[0,q]:=IntToStr(q);
    for q:=1 to 500//нумерация по горизонтали в табл №1 ,
     do    StringGrid3.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;
                   w[1,k]:= random(d);
              w[2,k] := random (f);
             end;

            for i:=1  to b do     //   приведение подобных членов
        for j:= 1 to b  do
        begin
         u[1,j] := w[1,j];
            u[2,j] := w[2,j];
        end;

                    for z:=1 to b do
                     begin
                    for i2:=z+1 to b do
            if u[1,z] = u[1,i2] then   begin
             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
                    u2[i,j]  := u[i,j];

             for tt:=1 to b do
            for i3 := 2 to  b  do
                       begin
                       begin
                    n1:=   u2[1,i3-1] ;
                      n2 :=  u2[2,(i3-1)] ;
                     n3 :=    u2[1,i3];
                      n4 := u2[2,i3] ;
                      end;
                       if  u2[1,(i3-1)]< u2[1,i3 ]  then
                        begin
                u2[1,(i3-1)]  :=n3;
                          u2[2,i3-1]:=n4;
                             u2[1,(i3)] :=n1 ;
                                u2[2,i3] :=n2;
                   end;
                   end;
     /////////////////////////////////////////////////////////////////////////////////////////

                for j:=1 to  b 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 to  b do
                    StringGrid1.Cells[j,i] := IntToStr(w[i,j]);

                  for i:=1 to b do begin
                     StringGrid1.Cells[i,3] := IntToStr(p[i]);
                      StringGrid1.Cells[i,4] := IntToStr(p1[i]);
                        //  StringGrid1.Cells[i,5] := IntToStr(p2[i]);
                      StringGrid1.Cells[i,7] := IntToStr(y[i]);
                     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)     ;

                                end;
  /////////  ///////////////////////////////////////////////////////
        procedure TForm1.Button5Click(Sender: TObject);
begin
      close
end;
         initialization
randomize;
end.

Отредактировано ABC (2023-02-09 00:30:43)