logo
Строение идеалов полукольца натуральных чисел

Библиографический список

1. Абрамов А.М. Квант, №3, 1984. с. 40-41.

2. Атья М., Макдональд И. Введение в коммутативную алгебру [Текст] / М. Атья, И. Макдональд. - М.:Мир,1972.

3. Вечтомов Е.М. Введение в полукольца [Текст] / Е.М. Вечтомов. - Киров: Изд-во ВГПУ, 2000.

4. Коганов Л.М. О функциях Мебиуса и константах Фробениуса полугрупп, порожденных линейными формами специального вида / Межвузовский сборник научных трудов Полугруппы и частичные группоиды, Ленинград, 1987. с. 15-25.

5. Скорняков, Л.А. Элементы теории структур [Текст]/Л.А. Скорняков.- М.: Наука, 1982.

6. Чермных, В.В. Полукольца [Текст]/В.В. Чермных. - Киров: Изд-во ВГПУ, 1997.

Приложение 1.

Примеры работы программы при различных исходных данных.

Приложение 2.

Описание алгоритма работы программы "FindC" с помощью блок-схем.

Приложение 3

Полный текст программы "FindC".

unit SearchFirstElementSequence;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit: TEdit;

Button1: TButton;

Memo: TListBox;

Button2: TButton;

procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure EditKeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

masA: variant;

KolObraz: integer;

i, j, l, koef, d, kol, VspomChislo, Chislo: integer;

S: Set of Char = [0..9, ,, #8];

p: boolean;

implementation

{$R *.dfm}

{Сортировка массива}

Procedure SORT;

var min: integer;

begin

min := masA[1,1];;

for i := 1 to KolObraz-1 do

for j := i+1 to KolObraz do

if masA[i,1] > masA[j,1] then begin

min := masA[j,1];

masA[j,1] := masA[i,1];

masA[i,1] := min;

end;

end;

//ищем НОД (алгоритм Евклида)

Function NOD(a,b: integer): integer;

begin

while (a <> 0) and (b <> 0) do

if a > b then a := a mod b

else b := b mod a;

if a = 0 then nod := b

else nod := a;

end;

//проверка на линейность

Procedure Lin (n, j, Chislo: integer; var p: boolean; m1: integer);

var x :integer;

begin

while (n<=m1) and not (p) and (Chislo > 0) do

begin

if j = 0 then x := 0

else x := masA[n,1];

Chislo := Chislo - x;

if Chislo = 0 then p := true

else Lin(n+1, 0, Chislo, p, m1);

if p then masA[n,2] := j;

inc(j);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

list: TStringList;

ss: string;

begin

Memo.Clear;

//разбиение строки

ss := Edit.Text;

list := TStringList.Create; //создаем список list

//в нем будут хранится коэффициенты, полученные в результате разбиения строки

//с помощью процедуры extractStrings (разделителем будет ,)

extractStrings([,], [], PChar(ss), list);

KolObraz := list.Count; //количество переменных

masA := VarArrayCreate([1,KolObraz,1,2], varInteger); //создание двумерного массива

for i := 1 to KolObraz do

masA[i,1] := StrToInt(list.Strings[i-1]);

list.Free;

SORT;

ss := ;

for i := 1 to KolObraz do ss := ss + + IntToStr(masA[i,1]);

memo.Items.Add(ИСХОДНАЯ СИСТЕМА ОБРАЗУЮЩИХ В ПОРЯДКЕ ВОЗРАСТАНИЯ:);

memo.Items.Add(ss);

memo.Items.Add();

memo.Items.Add(ЛИНЕЙНО ЗАВИСИМЫЕ ЭЛЕМЕНТЫ СИСТЕМЫ ОБРАЗУЮЩИХ:);

l := 0; i := 1;

while i <= KolObraz-l do begin

p := false;

Lin(1, 0, masA[i,1], p, i-1);

//если p = true то выводим линейную комбинацию и удаяем этот элемент из массива

if p then begin

//вывод разложения элемента на линейную комбинацию

ss := IntToStr(masA[i,1]) + = ;

if i = 2 then ss := ss + IntToStr(masA[i-1,2]) + * + IntToStr(masA[i-1,1])

else begin

for j := 1 to i-2 do ss := ss + IntToStr(masA[j,2]) + * + IntToStr(masA[j,1]) + + ;

ss := ss + IntToStr(masA[i-1,2]) + * + IntToStr(masA[i-1,1]);

end;

memo.Items.Add(ss);

//смещаем элементы массива

for j := i to KolObraz-l-1 do begin masA[j,1] := masA[j+1,1]; masA[j,2] := masA[j+1,2]; end;

inc(l);

end

else inc(i);

end;

if l = 0 then memo.Items.Add(нет);

memo.Items.Add();

KolObraz := KolObraz-l;

memo.Items.Add(ЛИНЕЙНО НЕЗАВИСИМАЯ СИСТЕМА ОБРАЗУЮЩИХ:);

ss := ;

for i := 1 to KolObraz do ss := ss + + IntToStr(masA[i,1]);

memo.Items.Add(ss);

memo.Items.Add();

d := NOD(masA[1,1], masA[2,1]);

if KolObraz > 2 then for i := 3 to KolObraz do d := NOD(d, masA[i,1]);

for i := 1 to KolObraz do begin masA[i,1] := masA[i,1] div d; masA[i,2] := 0; end;

Chislo := masA[1,1];

p := false;

kol := 0;

VspomChislo := Chislo;

while kol<Chislo do begin

Lin(1, 0, VspomChislo, p, KolObraz);

if p then inc(kol)

else kol := 0;

inc(VspomChislo);

p := false;

end;

ss := ПЕРВЫЙ ЭЛЕМЕНТ В АРИФМЕТИЧЕСКОЙ ПРОГРЕССИИ + IntToStr((VspomChislo - kol) * d);

p := false; j := 0;

for i := 1 to KolObraz do masA[i,2] := 0;

Lin(1, j, (VspomChislo - kol) * d, p, KolObraz);

ss := ss + = ;

for j := 1 to KolObraz-1 do ss := ss + IntToStr(masA[j,2]) + * + IntToStr(masA[j,1]) + + ;

ss := ss + IntToStr(masA[KolObraz,2]) + * + IntToStr(masA[KolObraz,1]);

ss := ss + с разностью + IntToStr(d);

memo.Items.Add(ss);

masA := Unassigned;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in S) then Key := #0

end;

procedure TForm1.EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if Edit.Text = then Button1.Enabled := false

else Button1.Enabled := true;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Button1.Enabled := false;

Memo.Clear;

Edit.Clear;

end;

end.