|
Вопрос # 3 586/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Дана матрица A[n,m] натуральных чисел. Необходимо упорядочить строки матрицы, по возрастанию наименьших элементов в строках.
Запутался при решении, и ничего толком не сортируется...
Заранее благодарен за помощь!
Приложение: Переключить в обычный режим- program l7z10bp;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
-
- const o=1; n=4; m=3;
-
- type mas1=array[1..n,1..m] of integer;
- mas2=array[1..o,1..m] of integer;
-
- var i,j:integer; a1:mas1; a2:mas2; ac1:mas1; a2c:mas2; a2s:mas2; rez:mas1;
- r:string; t1,t2,t3,t4:integer; c:integer;
-
- begin
- Randomize;
-
- writeln('vruchnuu ili random?');
- readln(r);
- if (r='random') then
- begin
- for i:=1 to n do
- for j:=1 to m do
- begin
- a1[i,j]:=Random(7)+1;
- ac1[i,j]:=a1[i,j];
- rez[i,j]:=a1[i,j];
- end;
- end
- else
- begin
- writeln;
- writeln('vvedite elementy');
- for i:=1 to n do
- for j:=1 to m do
- begin
- readln(a1[i,j]);
- ac1[i,j]:=a1[i,j];
- rez[i,j]:=a1[i,j];
- end;
- end;
-
- writeln;
- writeln('perevirka');
- for i:=1 to n do
- begin
- for j:=1 to m do
- write(a1[i,j]:5);
- writeln;
- end;
-
- for i:=1 to n do
- for j:=1 to m-1 do
- begin
- if (a1[i,j]<=a1[i,j+1]) and (ac1[i,j]<=ac1[i,j+1]) then
- begin
- ac1[i,j+1]:=ac1[i,j];
- a2[i,1]:=ac1[i,j];
- end
- else
- if ac1[i,j]<=ac1[i,j+1] then
- a2[i,1]:=ac1[i,j]
- else
- a2[i,1]:=ac1[i,j+1];
- a2c[i,1]:=a2[i,1];
- end;
-
- writeln;
- writeln('naimenshie elementy v strokah');
- for i:=1 to n do
- begin
- write(a2[i,1]:20);
- writeln;
- end;
-
- for c:=1 to 3 do
- begin
- for i:=1 to n-1 do
- begin
- if (a2c[i,1]>=a2c[i+1,1]) then
- begin
- t1:=a2c[i,1];
- t2:=a2c[i+1,1];
- a2c[i,1]:=t2;
- a2c[i+1,1]:=t1;
- t3:=a1[i,j];
- t4:=a1[i+1,j];
- rez[i,j]:=t4;
- rez[i+1,j]:=t3;
-
-
- end;
- end;
- end;
-
- writeln;
- writeln('otsortirovano');
- for i:=1 to n do
- begin
- write(a2c[i,1]:20);
- writeln;
- end;
-
-
- writeln;
- writeln('otsortirovaniy massiv');
- for i:=1 to n do
- begin
- for j:=1 to m do
- write(rez[i,j]:5);
- writeln;
- end;
-
- readln;
-
- { TODO -oUser -cConsole Main : Insert code here }
- end.
-
 |
Вопрос задал: Renya060 (статус: Посетитель)
Вопрос отправлен: 26 декабря 2009, 16:49
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Жикльор
Здравствуйте, Renya060!
Вот и ваша программа. Она выведет сначала исходную матрицу, заполненную случайно -> затем минимальные элементы -> отсортированные минимальные элементы -> и отсортированную матрицу. Код в приложении:
Приложение: Переключить в обычный режим- program Project2;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
-
- var
- numbers,index: array [1..4] of integer;
- inputm: array [1..4,1..3] of integer;
- outputm: array [1..4,1..3] of integer;
- i,j,min,temp: integer;
- begin
- Randomize;
- for i:=1 to 4 do
- for j:=1 to 3 do
- inputm[i,j]:=Random(9);
- for i:=1 to 4 do
- begin
- min:=inputm[i,1];
- for j:=1 to 3 do
- if inputm[i,j] < min then min:=inputm[i,j];
- numbers[i]:=min;
- index[i]:=i;
- end;
- writeln('Ishodna matrica:');
- for i:=1 to 4 do
- begin
- for j:=1 to 3 do
- write(inputm[i,j]);
- writeln;
- end;
- writeln;
- writeln('Minimalni elementu:');
- for i:=1 to 4 do
- writeln('Chislo v stroke ',index[i],' - ',numbers[i]);
- for i:=1 to 4 do
- begin
- min:=numbers[i];
- for j:=i to 4 do
- begin
- if numbers[j] < min then
- begin
- temp:=numbers[i];
- numbers[i]:=numbers[j];
- numbers[j]:=temp;
- temp:=index[i];
- index[i]:=j;
- index[j]:=temp;
- end;
- end;
- end;
- writeln;
- writeln('Vidsortovani elementu:');
- for i:=1 to 4 do
- writeln('Chislo v stroke ',index[i],' - ',numbers[i]);
- for i:=1 to 4 do
- for j:=1 to 3 do
- outputm[i,j]:=inputm[index[i],j];
- writeln;
- writeln('Vidsortovana matrica:');
- for i:=1 to 4 do
- begin
- for j:=1 to 3 do
- write(outputm[i,j]);
- writeln;
- end;
- readln;
- end.
-
 |
Ответ отправил: Жикльор (статус: 5-ый класс)
Время отправки: 26 декабря 2009, 21:08
Оценка за ответ: 5
Комментарий к оценке: Большое спасибо!)
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 27 декабря 2009, 16:14; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 26 декабря 2009, 20:58 [#1]:
Я готов. Сколько пива ставишь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Жикльор (статус: 5-ый класс), 26 декабря 2009, 22:36 [#2]:
Извините за исправление, но нашел баг в программе. Там где программа сортирует элементы:
if numbers[j] < min then
begin
temp:=numbers[i];
numbers[i]:=numbers[j];
numbers[j]:=temp;
temp:=index[i];
index[i]:=j;
index[j]:=temp;
end;
нужно заменить на это:
if numbers[j] < min then
begin
min:=numbers[j];
temp:=numbers[i];
numbers[i]:=numbers[j];
numbers[j]:=temp;
temp:=index[i];
index[i]:=index[j];
index[j]:=temp;
end;
Если быть точным, то:
temp:=index[i];
index[i]:=j; //вот и сам баг я должен быть записать не j, а элемент массива index по индексу j
index[j]:=temp;
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
Паровоз (статус: 10-ый класс), 27 декабря 2009, 10:45 [#3]:
To min@y™:
"Сколько пива ставишь"
Э-э-э, тут есть человек, который все за бесплатно делает.
|
|
min@y™ (статус: Доктор наук), 27 декабря 2009, 10:50 [#4]:
Цитата (Паровоз):
Э-э-э, тут есть человек, который все за бесплатно делает.
Набивает себе цену. Я тут тоже так начинал! )
Надеюсь, хоть правильно делает-то? Не лажает?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Жикльор (статус: 5-ый класс), 27 декабря 2009, 13:12 [#5]:
Цитата (min@y™):
Надеюсь, хоть правильно делает-то? Не лажает?
Я тоже надеюсь )) Но вроде все нормально, не подведу ))
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
min@y™ (статус: Доктор наук), 27 декабря 2009, 13:18 [#6]:
Давай-давай! Продолжай в том же духе.
Какое пиво предпочитаешь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Жикльор (статус: 5-ый класс), 27 декабря 2009, 14:26 [#7]:
Настоящее, а не разболтанное, как у нас на Украине делают 
В основном предпочитаю Оболонь или Чернігівське, под настроение могу и Туборга взять.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
min@y™ (статус: Доктор наук), 27 декабря 2009, 16:14 [#8]:
Мне из украинского нравится Оболонь-магнат.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|