Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.06.2010
Сообщений: 10

Модуль "матрица" и сортировка пузырьком

05.06.2010, 19:59. Показов 1172. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Ребят. Очень нужна помощь, необходимо написать программу, вот 2 из требований:
1. Данные хранятся в виде объекта класса «матрица». Внутри класса данные хранятся в виде двумерного динамического массива, организованного в виде столбца указателей на строки или строки указателей на столбцы – в зависимости от алгоритма сортировки (за основу можно взять реализацию класса с семинарского занятия № 1). Класс должен быть описан в отдельном модуле и может использовать фатальную обработку ошибок.
2. Алгоритм сортировки оформлен в виде подпрограммы, свободной от операций ввода-вывода. Эта подпрограмма может быть реализована как метод класса, как дружественная функция или независимо. Параметры подпрограммы: указатель на объект (если не метод класса), функция, сравнивающая строки (столбцы) на упорядоченность (если невозможна сортировка по ключам). Подпрограмма адекватно реагирует на неверные входные данные и возвращает код завершения, если она не метод класса, или вызывает обработчик ошибок класса в противном случае.

Я написал модуль "Матрица" ( возможно с ошибками, которые, если заметите, помогите исправить), и начал писать программу, но не могу в программе создать процедуру(или функцию) сортировка, точнее написать могу. а вот интегрировать модуль и эту функцию неочень получается, ПОМОГИТЕ ПОЖАЛУЙСТА. Заранее спасибо.

Вот код модуля:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
unit matrix;   {Realizaciya klassa matrica na osnove dvumernogo dinamicheskogo massiva}
Interface
type
    tbyte=byte;
    tint=integer;
    telem=real;
    tcol=array [1..1] of telem;
    trowl=^tcol;
    trow=array [1..1] of trowl;
    tmass=^trow;
    tmas=^Matr;
    bol=boolean;
    Matr=object
               Private                  {Closed part}
                m:tmass;
                str,stl:tint;
                procedure Error (err:TByte);
               Public                   {Opened part}
                constructor Init(pstr:tint; pstl:tint); {Create}
                destructor Kill;                        {Destroy}
                function IsTab:bol;                     {is created?}
                function GetElem(i:tint; j:tint): Telem;
                function Getrow: Tint;
                function Getcol: Tint;
                procedure Rand;
                procedure Zero(var Mx:tmas);
                procedure Put(i:Tint; j:tint; x:telem);
                end;
Implementation
uses crt;
 
constructor Matr.Init(pstr:tint; pstl:tint);
const sizemem=65536;
var p,i:tint;
    needstr,needstl:longint;
    e:bol;
begin
e:=true;
i:=0;
str:=pstr;
stl:=pstl;
if (str<1) or (stl<1) then Error(1) else
  begin
  needstr:=longint(stl)*sizeof(telem);
  needstl:=longint(str)*sizeof(trowl);
  if (needstl<maxavail) and (needstl<sizemem) then
    begin
    getmem(m,needstl);                            {videlenie pamati}
    for p:=1 to str do
      if e and (needstr<maxavail) and (needstr<sizemem)
        then
          begin
          getmem(m^[p],needstr);
          i:=i+1;
          end
        else e:=false;
    end
  else e:=false;
  end;
if not e then
  begin
  Error(2);
  if i>0 then for p:=1 to i do freemem(m^[p],needstr);
  freemem(m,needstl);
  m:=nil;
  end
else for i:=1 to str do
  for p:=1 to stl do m^[i]^[p]:=0;
end;
 
 
destructor Matr.Kill;
var p:Tint;
    needstr,needstl:longint;
    e:bol;
begin
e:=true;
if not IsTab then Error(4)
else if (str<1) or (stl<1) then Error(1) else
     begin
     needstl:=longint(str)*sizeof(trowl);
     needstr:=longint(stl)*sizeof(telem);
     for p:=1 to str do freemem(m^[p],needstr);
     freemem(m,needstl);
     end;
str:=0;
stl:=0;
m:=nil;
end;
 
function Matr.IsTab:bol;
begin
if (m=nil) then IsTab:=false else IsTab:=true;
end;
 
function Matr.GetElem(i:Tint; j:Tint):telem;
begin
if not IsTab then Error(4)
else if (i<0) or (i>str) or (j<0) or (j>stl) then Error(3)
     else GetElem:=m^[i]^[j];
end;
 
function Matr.Getrow;
begin
if not IsTab then Error(4)
else Getrow:=stl;
end;
 
function Matr.Getcol;
begin
if not IsTab then Error(4)
else Getcol:=str;
end;
 
procedure Matr.Rand;
var a,i,j: Tint;
begin
     if not IsTab then Error(4)
     else
     begin
        randomize;
        for i:=1 to str do
            for j:=1 to stl do
            begin
            a:=-35+random(135);
            m^[i]^[j]:=a;
            end;
        end;
end;
 
procedure Matr.Zero;
var i,j: integer;
begin
     if not IsTab then Error(4)
     else
     begin
          for i:=1 to str do
              for j:=1 to stl do
              m^[i]^[j]:=0;
     end;
end;
procedure Matr.Put(i:Tint; j:Tint; x:Telem);
begin
if not IsTab then Error(4)
   else if (i<0) or (i>str) or (j<0) or (j>stl) then Error(3)
   else m^[i]^[j]:=x;
end;
 
procedure Matr.Error(err:Tbyte);
begin
write('ERROR!. ');
case err of
 1: writeln('Nepravilno zadany razmery tablicy');
 2: writeln('Nedostatochno pamjati');
 3: writeln('Necorrectno zadany indeksy');
 4: writeln('Tablici net');
 end;
 readln;
end;
end.
А вот фрагмент программы и сортировки в ней:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program Sort;
uses crt, matrix;
type Tkey=array [1..1] of Tint;
 
procedure BubbleSort(Mx:tmas);
var fl:bol;
    i,j:TInt;
    a:Tmas;
    rows,cols:Longint;
begin
rows := Mx^.getrow;
cols := Mx^.getcol;
{a:=Matrix^.}
for i:=1 to cols do
    for j:=1 to rows do
While fl do
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2010, 19:59
Ответы с готовыми решениями:

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array of integer; Var i,b,n,j,a:...

Сортировка выбором, Сортировка простыми вставками, Сортировка пузырьком, Сортировка слиянием, Быстрая сортировка Хоара
Имеется список товаров, хранящихся на базе. Каждая строка этого списка содержит: инвентарный номер товара; количество видов этого товара;...

Сортировка списка перемешиванием по убыванию (шейкерная сортировка или двунаправленнная сортировка пузырьком)
Помогите написать функцию сортировки списка перемешиванием по убыванию (шейкерная сортировка или двунаправленнная сортировка пузырьком). ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2010, 19:59
Помогаю со студенческими работами здесь

Сортировка пузырьком и пирамидальная сортировка заданного массива + бинарный поиск
Заполнить случайным образом одномерный массив размера N и выполнить сортировку пузырьком и пирамидальную сортировку заданного массива. В...

Сортировка пузырьком или сортировка вставками
Реализовать функцию, принимает массив и сортирует его (нельзя использовать встроенные методы сортировки). Самые простые реализации...

Сортировка пузырьком
Помогите пожалуйста написать программу,не получается,НА ЯЗЫКЕ СИ! Задание: В матрице n*m отсортируйте нечетные строки в порядке...

Сортировка пузырьком
Нужно осортировать методом пузырька по 4 столбцу (который я как смог добавил криво косо так как в задании было что бы он вычислялся...

Сортировка пузырьком
Добрый день уважаемые форумчане! Пожалуйста, помогите с решением одной задачки. Я начинающий программист, поэтому много чего не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru