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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 16:48   #1
nanoDesu
 
Регистрация: 25.11.2011
Сообщений: 3
Восклицание Сортировка массива по убыванию

Есть программка. Помогите, пожалуйста, ее переделать, чтобы программа была написана с использованием подпрограмм и включала бы как минимум две подпрограммы: формирование массива и его вывод на экран. Сама пыталась разбить, но вылазит куча ошибок( Помогите, пожалуйста, буду очень признательна:
Код HTML:
uses crt;
const nmax=20;
var a:array[1..nmax,1..nmax] of real;
    n,m,i,j,l:byte;
    mn,b:real;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax-1,' m=');
readln(m);
until m in [1..nmax-1];
for i:=1 to n do
for j:=1 to m do
a[i,j]:=10*random;
{вычисление минимальных в строках и запись их в дополнительный столбец}
for i:=1 to n do
 begin
  mn:=a[i,1];
  for j:=1 to m do
  if a[i,j]<mn then mn:=a[i,j];
  a[i,m+1]:=mn;
 end;
writeln('Исходный массив:');
writeln('Миним.':(m*5+10));
for i:=1 to n do
 begin
  for j:=1 to m+1 do
  if j=m+1 then write(a[i,j]:8:1)
  else write(a[i,j]:5:1);
  writeln;
 end;
{перестановка строк по неубыванию минимальных(по последнему столбцу)}
{сортировка прямым обменом}
for i:=1 to n-1 do
for l:=i+1 to n do
if a[i,m+1]>a[l,m+1] then
for j:=1 to m+1 do
 begin
  b:=a[i,j];
  a[i,j]:=a[l,j];
  a[l,j]:=b;
 end;
writeln('Строки по неубыванию минимальных:');
writeln('Миним.':(m*5+10));
for i:=1 to n do
 begin
  for j:=1 to m+1 do
  if j=m+1 then write(a[i,j]:8:1)
  else write(a[i,j]:5:1);
  writeln;
 end;
readln
end.
nanoDesu вне форума Ответить с цитированием
Старый 18.12.2011, 17:28   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Например:
Формирование массива:
Код:
Type Tmatr = array[1..nmax,1..nmax] of real;

procedure SetMatr(var a : Tmatr);
var i, j : integer;
begin
   for i:=1 to n do
      for j:=1 to m do
         a[i,j]:=10*random;

   end;
end;
Вывод массива:
Код:
procedure OutMatr(a : Tmatr);
var i, j : integer;
begin
  for i:=1 to n do begin
     for j:=1 to m do
        write(a[i,j]:6:2);
     writeln;
  end;
end;
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.12.2011, 13:00   #3
nanoDesu
 
Регистрация: 25.11.2011
Сообщений: 3
По умолчанию Проба

Вот попробовала сделать, ничего не получается, опять куча ошибок, не пойму, что не так. Подскажите, пожалуйста, в чем ошибка.
Код:
uses crt;
const nmax=20;
type Tmatr=array [1..nmax,1..nmax] of integer;
var a:array[1..nmax,1..nmax] of real;
    n,m,i,j,l:byte;
    mn,b:real;

procedure Input (var a: Tmatr);
begin
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax-1,' m=');
readln(m);
until m in [1..nmax-1];
for i:=1 to n do
for j:=1 to m do
a[i,j]:=10*random;
end;

procedure Output (var a:Tmatr);
begin
writeln('Миним.':(m*5+10));
for i:=1 to n do
 begin
  for j:=1 to m+1 do
  if j=m+1 then write(a[i,j]:8:1)
  else write(a[i,j]:5:1);
  writeln;
 end;
end;

begin
clrscr;
randomize;
procedure Input (a);
{вычисление минимальных в строках и запись их в дополнительный столбец}
for i:=1 to n do
 begin
  mn:=a[i,1];
  for j:=1 to m do
  if a[i,j]<mn then mn:=a[i,j];
  a[i,m+1]:=mn;
 end;
writeln('Исходный массив:');
procedure Output (a);
{перестановка строк по неубыванию минимальных (по последнему столбцу)}
{Сортировка прямым обменом}
for i:=1 to n-1 do
for l:=i+1 to n do
if a[i,m+1]>a[l,m+1] then
for j:=1 to m+1 do
 begin
  b:=a[i,j];
  a[i,j]:=a[l,j];
  a[l,j]:=b;
 end;
writeln('Строки по неубыванию минимальных:');
procedure Output (a);
readln
end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.12.2011 в 14:35.
nanoDesu вне форума Ответить с цитированием
Старый 19.12.2011, 14:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вызов функций и процедур производится исключетельно ПО ИМЕНИ (выкиньте слово Procedure там, где Вы вызываете эти процедуры:
Код:
begin
  clrscr;
  randomize;
  Input(a);

  {вычисление минимальных в строках и запись их в дополнительный столбец}
  for i:=1 to n do
      ...
  writeln('Исходный массив:');
  Output(a);
  ...

и т.д.

p.s. кстати, на будущее. я бы рекомендовал не использовать ключевые слова в качестве имён.
Ну неужели вместо Input хуже выглядит InputArray или DoInput и т.д.
а вместо Output - PrintArray или DoOutputArrayToScreen и т.д. и т.п.
Хотя, будет работать и с теми именами, что Вы описали...

Последний раз редактировалось Serge_Bliznykov; 19.12.2011 в 14:40.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2011, 15:46   #5
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Поубирал все ошибки, у меня работает, программа заполняет и выводит массив(только без сортировки):
Код:
program Project2;
{$APPTYPE CONSOLE}
const nmax=20;
type Tmatr=array [1..nmax,1..nmax] of real;


procedure Input (var a:Tmatr; var n,m:integer);
var i,j:integer;
begin
randomize;
repeat
write('Kolichestvo strok do ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Kolichestvo stolbcov do ',nmax-1,' m=');
readln(m);
until m in [1..nmax-1];
for i:=1 to n do
for j:=1 to m do
a[i,j]:=10*random;
end;

procedure Output (var a:Tmatr; var n,m:integer);
var i,j:integer;
begin
for i:=1 to n do
 begin
  for j:=1 to m do
  write(a[i,j]:5:1);
  writeln;
 end;
end;

var a:Tmatr;
    n,m:integer;
begin
Input(a,n,m);
writeln('mas[',n,'*',m,']:');
Output(a,n,m);
readln;
end.

Последний раз редактировалось kuy; 19.12.2011 в 15:56.
kuy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива по убыванию netiv Паскаль, Turbo Pascal, PascalABC.NET 2 05.11.2011 09:10
[Fortran] Сортировка столбцов массива по убыванию abit-2010 Помощь студентам 2 13.03.2011 21:46
Сортировка элементов массива по убыванию nadminka Общие вопросы .NET 1 18.05.2010 23:08
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16