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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2012, 21:44   #1
Frank63
 
Регистрация: 07.10.2012
Сообщений: 9
По умолчанию переделать код

Исходное задание: отсортировать строки двумерного массива вещественных чисел
по значению элемента первого столбца
методом быстрой сортировки.
Код:
uses crt;
const nmax=20;
type mas=array [1..nmax] of real;
     mtr=array[1..nmax] of mas;
var x:mtr;
procedure sort(l,r:integer);
var i,j,m: integer;
    x1:real;
    y1:mas;
begin
  i:=l;
  j:=r;
  m:=round ((l+r)/2);
  x1:=x[m,1];
  repeat
    while x[i,1]<x1 do inc(i);
    while x[j,1]>x1 do dec(j);
    if i<=j then 
     begin
      y1:=x[i];
      x[i]:=x[j];
      x[j]:=y1;
      inc(i);
      dec(j);
     end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;
var n,m,i,j:integer;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    x[i,j]:=10*random;
    write(x[i,j]:5:2);
   end;
  writeln;
 end;
writeln;
sort(1,n);
writeln('Матрица после сортировки: ');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(x[i,j]:5:2);
  writeln;
 end;
readln
end.
Как изменить код, чтобы он работал для произвольного номера столбца, задаваемого пользователем?

Последний раз редактировалось Frank63; 05.11.2012 в 00:56.
Frank63 вне форума Ответить с цитированием
Старый 05.11.2012, 15:45   #2
siner
Пользователь
 
Регистрация: 05.11.2012
Сообщений: 15
По умолчанию ответ

Код:
uses crt;
const nmax=20;
type mas=array [1..nmax] of real;
     mtr=array[1..nmax] of mas;
var x:mtr;
    y:byte;
procedure sort(l,r:integer);
var i,j,m: integer;
    x1:real;
    y1:mas;
begin
  i:=l;
  j:=r;
  m:=round ((l+r)/2);
  x1:=x[m][y];
  repeat
    while x[i][y]>x1 do i:=i+1;
    while x[j][y]<x1 do j:=j-1;
    if i<=j then
     begin
      y1:=x[i];
      x[i]:=x[j];
      x[j]:=y1;
      i:=i+1;
      j:=j-1;
     end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;
var n,m,i,j:integer;
begin
clrscr;
randomize;
repeat
write('Введите количество строк: ');
readln(n);
until n in [1..nmax];
repeat
write('Введите количество столбцов: ');
readln(m);
until m in [1..nmax];
repeat
write('Введите номер столбца от 1 до ',m,': ');
readln(y);
until y in [1..m];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    x[i][j]:=10*random;
    write(x[i][j]:5:1);
   end;
  writeln;
 end;
writeln;
sort(1,n);
writeln('Отсортированная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(x[i][j]:5:1);
  writeln;
  end;
end.
так работает?
siner вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу переделать код из С++ в Си FRATER1234 Общие вопросы C/C++ 11 02.11.2011 11:02
нужна переделать код СИ daimonTM Помощь студентам 0 31.05.2011 23:14
переделать с делфи код в СИ Dezolyator Фриланс 7 24.05.2010 23:19
Переделать код Hepri Работа с сетью в Delphi 3 20.08.2009 20:28
Помогите переделать код stayer Общие вопросы Delphi 3 25.10.2008 21:09