Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процедуры, Одна или две? 
:(
    Опции темы
Анютка
Дата 15.1.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 22.11.2005
Где: Моск.область

Репутация: нет
Всего: нет



Оформить процедуру для нахождения максимального элемента массива.
Поменять местами максим. элементы двух матриц размером 4*5 и 4*3.
Код
program proc1_ur2;
uses crt;
const
 n=4;m=5;k=3;
type
 matr1=array [1..n,1..m] of real;
 matr2=array [1..n,1..k] of real;
var
 a:matr1;
 b:matr2;
 i,j,bjmax,ajmax,bimax,aimax:integer;
 l,amax,bmax:real;
procedure maxx1(x:matr1;var xmax:real;var imax,jmax:integer);
begin
 xmax:=x[1,1];imax:=1;jmax:=1;
  for i:=2 to n do
   begin
    for j:=2 to m do
     begin
      if x[i,j]>xmax then begin xmax:=x[i,j]; imax:=i;jmax:=j;end
     end;
   end;
end;
procedure maxx2(y:matr2;var ymax:real;var iymax,jymax:integer);
begin
 ymax:=y[1,1];iymax:=1;jymax:=1;
  for i:=2 to n do
   begin
    for j:=2 to k do
     begin
      if y[i,j]>ymax then begin ymax:=y[i,j]; iymax:=i;jymax:=j;end
     end;
   end;
end;
begin
clrscr;
 for i:=1 to n do
 for j:=1 to m do
  begin
   write('a[',i,',',j,']');
   read(a[i,j]);
  end;
 writeln;
 for i:=1 to n do
 for j:=1 to k do
  begin
   write('b[',i,',',j,']');
   read(b[i,j]);
  end;
 writeln;
maxx1(a,amax,aimax,ajmax);
maxx2(b,bmax,bimax,bjmax);
 l:=a[aimax,ajmax];
 a[aimax,ajmax]:=b[bimax,bjmax];
 b[bimax,bjmax]:=l;
  for i:=1 to n do
   begin
    for j:=1 to m do
     write(a[i,j]:6:2);writeln;
   end;
 writeln;
   for i:=1 to n do
    begin
     for j:=1 to k do
      write(b[i,j]:6:2);writeln;
     end;
readkey;
end.

Я сделала с двумя процедурами,а можно с одной?
PM MAIL   Вверх
Albinos_x
Дата 15.1.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Цитата(Анютка @ 15.1.2006, 16:55 Найти цитируемый пост)

Я сделала с двумя процедурами,а можно с одной?

можно.... только нужно добавить как входной вариант размерность массива... с массивами работать как с глобальными переменными...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Zero
Дата 17.1.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Albinos_x @ 15.1.2006, 19:25 Найти цитируемый пост)

с массивами работать как с глобальными переменными...

Это плохой стиль программирования. Лучше, тип массивов определить как абстрактный, а параметры подставлять при вызове функций.
Вот пример:
Код

program proc1_ur2;
uses crt;
const
  Nmax=5; {максимальное число элементов в матрице}
  n=4;m=5;k=3;
type
  matr=array [1..Nmax,1..Nmax] of real;
var
  a,b:matr;
  i,j,bjmax,ajmax,bimax,aimax:integer;
  l,amax,bmax:real;
procedure maxx(mat:matr; nv,mv:integer; var xmax:real;var imax,jmax:integer);
begin
  xmax:=mat[1,1];imax:=1;jmax:=1;
  for i:=2 to nv do
    for j:=2 to mv do
      if mat[i,j]>xmax then
        begin
          xmax:=mat[i,j];
          imax:=i;
          jmax:=j;
        end;
end;

Begin
 clrscr;
 for i:=1 to n do
   for j:=1 to m do
     begin
       write('a[',i,',',j,']=');
       read(a[i,j]);
     end;
 writeln;
 for i:=1 to n do
   for j:=1 to k do
     begin
       write('b[',i,',',j,']=');
       read(b[i,j]);
     end;
  writeln;
  maxx(a,n,m,amax,aimax,ajmax);
  maxx(b,n,k,bmax,bimax,bjmax);
  l:=a[aimax,ajmax];
  a[aimax,ajmax]:=b[bimax,bjmax];
  b[bimax,bjmax]:=l;
  for i:=1 to n do
    begin
      for j:=1 to m do
        write(a[i,j]:6:2);writeln;
    end;
  writeln;
   for i:=1 to n do
     begin
       for j:=1 to k do
         write(b[i,j]:6:2);writeln;
     end;
readkey;
end.

Достоинства:
  • более читабельный текст программы
  • меньше объем кода (кол-во процедур)
Недостаток:
  • выделение лишней статической памяти на массивы (чем больше одна матрица чем другая, тем больше неиспользуемой памяти, но на твоём примере, это как какпля в ведро воды)


Это сообщение отредактировал(а) Zero - 17.1.2006, 00:52
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.