Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 586

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Дана матрица A[n,m] натуральных чисел. Необходимо упорядочить строки матрицы, по возрастанию наименьших элементов в строках.

Запутался при решении, и ничего толком не сортируется...
Заранее благодарен за помощь!

Приложение:
  1. program l7z10bp;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. const o=1; n=4; m=3;
  9.  
  10. type mas1=array[1..n,1..m] of integer;
  11. mas2=array[1..o,1..m] of integer;
  12.  
  13. var i,j:integer; a1:mas1; a2:mas2; ac1:mas1; a2c:mas2; a2s:mas2; rez:mas1;
  14. r:string; t1,t2,t3,t4:integer; c:integer;
  15.  
  16. begin
  17. Randomize;
  18.  
  19. writeln('vruchnuu ili random?');
  20. readln(r);
  21. if (r='random') then
  22. begin
  23. for i:=1 to n do
  24. for j:=1 to m do
  25. begin
  26. a1[i,j]:=Random(7)+1;
  27. ac1[i,j]:=a1[i,j];
  28. rez[i,j]:=a1[i,j];
  29. end;
  30. end
  31. else
  32. begin
  33. writeln;
  34. writeln('vvedite elementy');
  35. for i:=1 to n do
  36. for j:=1 to m do
  37. begin
  38. readln(a1[i,j]);
  39. ac1[i,j]:=a1[i,j];
  40. rez[i,j]:=a1[i,j];
  41. end;
  42. end;
  43.  
  44. writeln;
  45. writeln('perevirka');
  46. for i:=1 to n do
  47. begin
  48. for j:=1 to m do
  49. write(a1[i,j]:5);
  50. writeln;
  51. end;
  52.  
  53. for i:=1 to n do
  54. for j:=1 to m-1 do
  55. begin
  56. if (a1[i,j]<=a1[i,j+1]) and (ac1[i,j]<=ac1[i,j+1]) then
  57. begin
  58. ac1[i,j+1]:=ac1[i,j];
  59. a2[i,1]:=ac1[i,j];
  60. end
  61. else
  62. if ac1[i,j]<=ac1[i,j+1] then
  63. a2[i,1]:=ac1[i,j]
  64. else
  65. a2[i,1]:=ac1[i,j+1];
  66. a2c[i,1]:=a2[i,1];
  67. end;
  68.  
  69. writeln;
  70. writeln('naimenshie elementy v strokah');
  71. for i:=1 to n do
  72. begin
  73. write(a2[i,1]:20);
  74. writeln;
  75. end;
  76.  
  77. for c:=1 to 3 do
  78. begin
  79. for i:=1 to n-1 do
  80. begin
  81. if (a2c[i,1]>=a2c[i+1,1]) then
  82. begin
  83. t1:=a2c[i,1];
  84. t2:=a2c[i+1,1];
  85. a2c[i,1]:=t2;
  86. a2c[i+1,1]:=t1;
  87. t3:=a1[i,j];
  88. t4:=a1[i+1,j];
  89. rez[i,j]:=t4;
  90. rez[i+1,j]:=t3;
  91.  
  92.  
  93. end;
  94. end;
  95. end;
  96.  
  97. writeln;
  98. writeln('otsortirovano');
  99. for i:=1 to n do
  100. begin
  101. write(a2c[i,1]:20);
  102. writeln;
  103. end;
  104.  
  105.  
  106. writeln;
  107. writeln('otsortirovaniy massiv');
  108. for i:=1 to n do
  109. begin
  110. for j:=1 to m do
  111. write(rez[i,j]:5);
  112. writeln;
  113. end;
  114.  
  115. readln;
  116.  
  117. { TODO -oUser -cConsole Main : Insert code here }
  118. end.
  119.  


Renya060 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Renya060 (статус: Посетитель)
Вопрос отправлен: 26 декабря 2009, 16:49
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Жикльор

Здравствуйте, Renya060!

Вот и ваша программа. Она выведет сначала исходную матрицу, заполненную случайно -> затем минимальные элементы -> отсортированные минимальные элементы -> и отсортированную матрицу. Код в приложении:

Приложение:
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. var
  9. numbers,index: array [1..4] of integer;
  10. inputm: array [1..4,1..3] of integer;
  11. outputm: array [1..4,1..3] of integer;
  12. i,j,min,temp: integer;
  13. begin
  14. Randomize;
  15. for i:=1 to 4 do
  16. for j:=1 to 3 do
  17. inputm[i,j]:=Random(9);
  18. for i:=1 to 4 do
  19. begin
  20. min:=inputm[i,1];
  21. for j:=1 to 3 do
  22. if inputm[i,j] < min then min:=inputm[i,j];
  23. numbers[i]:=min;
  24. index[i]:=i;
  25. end;
  26. writeln('Ishodna matrica:');
  27. for i:=1 to 4 do
  28. begin
  29. for j:=1 to 3 do
  30. write(inputm[i,j]);
  31. writeln;
  32. end;
  33. writeln;
  34. writeln('Minimalni elementu:');
  35. for i:=1 to 4 do
  36. writeln('Chislo v stroke ',index[i],' - ',numbers[i]);
  37. for i:=1 to 4 do
  38. begin
  39. min:=numbers[i];
  40. for j:=i to 4 do
  41. begin
  42. if numbers[j] < min then
  43. begin
  44. temp:=numbers[i];
  45. numbers[i]:=numbers[j];
  46. numbers[j]:=temp;
  47. temp:=index[i];
  48. index[i]:=j;
  49. index[j]:=temp;
  50. end;
  51. end;
  52. end;
  53. writeln;
  54. writeln('Vidsortovani elementu:');
  55. for i:=1 to 4 do
  56. writeln('Chislo v stroke ',index[i],' - ',numbers[i]);
  57. for i:=1 to 4 do
  58. for j:=1 to 3 do
  59. outputm[i,j]:=inputm[index[i],j];
  60. writeln;
  61. writeln('Vidsortovana matrica:');
  62. for i:=1 to 4 do
  63. begin
  64. for j:=1 to 3 do
  65. write(outputm[i,j]);
  66. writeln;
  67. end;
  68. readln;
  69. end.
  70.  


Ответ отправил: Жикльор (статус: 5-ый класс)
Время отправки: 26 декабря 2009, 21:08
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо!)

Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 27 декабря 2009, 16:14; участников в обсуждении: 3.
min@y™

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™

min@y™ (статус: Доктор наук), 27 декабря 2009, 10:50 [#4]:

Цитата (Паровоз):

Э-э-э, тут есть человек, который все за бесплатно делает.


Набивает себе цену. Я тут тоже так начинал! :))
Надеюсь, хоть правильно делает-то? Не лажает?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Жикльор

Жикльор (статус: 5-ый класс), 27 декабря 2009, 13:12 [#5]:

Цитата (min@y™):

Надеюсь, хоть правильно делает-то? Не лажает?

Я тоже надеюсь:-))) Но вроде все нормально, не подведу:-)))
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
min@y™

min@y™ (статус: Доктор наук), 27 декабря 2009, 13:18 [#6]:

Давай-давай! Продолжай в том же духе.
Какое пиво предпочитаешь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Жикльор

Жикльор (статус: 5-ый класс), 27 декабря 2009, 14:26 [#7]:

Настоящее, а не разболтанное, как у нас на Украине делают 8-)
В основном предпочитаю Оболонь или Чернігівське, под настроение могу и Туборга взять.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
min@y™

min@y™ (статус: Доктор наук), 27 декабря 2009, 16:14 [#8]:

Мне из украинского нравится Оболонь-магнат.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.