Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2011, 16:43   #1
Zo_0m
 
Регистрация: 22.10.2011
Сообщений: 4
Печаль Сортировка строк двумерного массива в паскале

Дана целочисленная прямоугольная матрица. Упорядочьте строки этой матрицы по возрастанию количества одинаковых элементов в каждой строке.(используя процедуры).

Мой способ решения подразумевает: используя массив для нахождения одинаковых элементов, подсчитать их количество и вбить в отдельный одномерный массив. Но дело в том, что сортировка не работает, как надо и в последней строке появляются неизвестные мне цифры и сортировать получается только по убыванию, а надо по возрастанию... Прошу, помогите.... исправьте мой код... ну или напишите более рациональное решение... пожалуйста...



program zashita;
uses crt;
const N=4; M=3;
type mass=array[1..N] of integer;
matr=array[1..m] of mass;
fl=array[1..N,1..N] of byte;
contr=array[1..N] of integer;
procedure vvod (var a:matr);
var i,j:byte;
begin
writeln('vvod massiva');
for i:=1 to N do
for j:=1 to m do
read(a[i,j]);
end;

procedure flag (var fl:fl; a:matr);
var i,j,k,S: byte;
begin
for i:=1 to N do
for j:=1 to m do
begin
fl[i,j]:=0;
end;
for j:=1 to m do
for i:=1 to n do
if fl[i,j]=0 then
begin
fl[i,j]:=1;
for k:=j+1 to m do
if a[i,j]=a[i,k] then
begin
fl[i,j]:=fl[i,j]+1;
fl[i,k]:=fl[i,j];
end;


end;
end;

procedure massiv (var contr:contr; fl:fl;a:matr);
var i,j,k:byte; r:integer;
begin
for i:=1 to n do
for k:=1 to m do
begin
r:=fl[i,k];
j:=fl[i,k+1];
if r<=j then
contr[i]:=j else contr[i]:=r;
end;
end;



procedure sort (var a:matr; contr:contr);
var i,j,b,k:byte; c:integer;
begin
j:=0;
for i:=2 to N do
if contr[i]<contr[i+1] then
begin
for k:=1 to m do
begin
c:=a[i,k];
a[i,k]:=a[i-1,k];
a[i-1,k]:=c;
end;
j:=j+1;
b:=contr[i];
contr[i]:=contr[i+1];
contr[i+1]:=b;
end;
end;
procedure vivod (a:matr);
var i,j:byte;
begin
writeln ('sort mass');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]);
writeln;
end;
end;
var a:matr;s:mass;fla:fl;c:contr; i,j:byte;
begin
clrscr;
vvod(a);
flag(fla,a);
writeln('massiv flaga');
for i:=1 to N do
begin
for j:=1 to m do
write(fla[i,j]);
writeln ;
end;
massiv(c, fla,a);
writeln('massiv control');
for i:=1 to n do
writeln(c[i]);
sort(a,c);
vivod(a);
writeln('contr');
for i:=1 to n do
writeln(c[i]);
end.
Zo_0m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного массива Makarov Помощь студентам 8 29.10.2011 11:55
Сортировка двумерного массива shadowfiend C++ Builder 0 21.04.2011 19:29
Сортировка двумерного массива на C/C++ HDMI Помощь студентам 1 04.12.2009 20:08
Сортировка двумерного массива(С) Александр Елис Помощь студентам 1 31.10.2009 13:25
[С++] Сортировка 2ух строк двумерного массива. ReDev1L Помощь студентам 1 19.10.2008 03:45