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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 13:53   #1
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Восклицание Задача с УКАЗАТЕЛЯМИ, ПОМОГИТЕ РЕШИТЬ!

Доброго времени суток!
Есть вот такая, уже решенная мной задача (условие в комментариях):
Код:
{Программа ищет особый элемент в матрице
Особым считается элемент, который МЕНЬШЕ всех последующих в ДАННОМ столбце}

Program Osobaya;

uses crt;

{Вывод матрицы}

procedure printMatr(A : array [1..100,1..100] of integer; m,n : integer);
 var i,j : integer;
 begin
  for i:=1 to M do
   begin
    for j:=1 to N do
     write(A[i,j]:4);
     writeln;
   end;
  writeln;
 end;

 {Поиск особого эл-та}

 procedure SearchElem (a: array [1..100,1..100] of integer; m,n:integer;
  var arr:array [1..100] of integer; var g:integer);
 var
  i,j,f,x,k:integer;
 begin
  g:=1;
  for j:=1 to n do
   begin
    for i:=1 to m-1 do
     begin
      f:=0;
      for k:=i+1 to m do
       begin
        if a[k,j] > a[i,j] then
         f:=f+1;
       end;
      if f=m-i then
       begin
        x:=a[i,j];
        arr[g]:=x;
        g:=g+1;
       end;
     end;
  end;
 end;

 {Вывод массива особых эл-ов}

procedure PrintMass(arr : array [1..100] of integer; L : integer);
 var
  i : integer;
 begin
  writeln('Массив особых эл-ов: ');
  for i:=1 to L-1 do
   write(arr[i]:4);
 end;


var
 a: array [1..100,1..100] of integer;
 arr: array [1..100] of integer;
 i,j:integer;
 k:integer;
 f,g:integer;
 x,j1:integer;
 n,m:integer;
 
begin
 clrscr;
 writeln('Введите размер матрицы: ');
 read(m,n);
 writeln ('Вводите матрицу: ');
 
 for i:=1 to m do
  for j:=1 to n do
   read(a[i,j]);

  writeln;
  writeln('Матрица: ');

  PrintMatr(a,m,n);
  SearchElem(a,m,n,arr,g);
  PrintMass(arr,g);
  
 end.
Так вот, преподаватель по информатике сказал, чтобы я представил другой вариант решения - применяя указатели. Каким образом - неизвестно.. Да и вообще с указателями я на "вы".. Кто сможет помочь сделать на основе этого текста новую программу, но уже с указателями, тому буду очень благодарен!
RomT24 вне форума Ответить с цитированием
Старый 06.06.2009, 15:15   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Пример с указателями:
Код:
Program Osobaya;

uses crt;

{ параметризуем размеры массивов. это упростит модификацию, если она понадобится }
const 
  MAX_ROW_COUNT = 100;
  MAX_COL_COUNT = 100;

type
 { введем новый тип - тип элемента массива (в общем тоже для удобства модификации)}
  TElemType = Integer;
 { тип - указатель на матрицу }
  PMatrix = ^TMatrix;
 { тип - матрица }
  TMatrix = array[1..MAX_ROW_COUNT, 1..MAX_COL_COUNT] of TElemType;
 { тип - указатель на маcсив }
  PArray = ^TArray;
 { тип - массив }
  TArray = array[1..MAX_COL_COUNT] of TElemType;

{ в процедуры передаем указатель на массив/матрицу}
{ переменную-указатель можно передавать без модификатора var, т.к.
в процедуре будет изменяться значение не самого указателя, а данных, на которые данный указатель указывает }


procedure printMatr(A: PMatrix; m,n : integer);
 var i,j : integer;
 begin
  for i:=1 to M do
   begin
    for j:=1 to N do
     write(A^[i,j]:4);
     writeln;
   end;
  writeln;
 end;

 {Поиск особого эл-та}

 procedure SearchElem (a: PMatrix; m,n:integer;
  arr: PArray; var g:integer);
 var
  i,j,f,x,k:integer;
 begin
  g:=1;
  for j:=1 to n do
   begin
    for i:=1 to m-1 do
     begin
      f:=0;
      for k:=i+1 to m do
       begin
        if a^[k,j] > a^[i,j] then
         f:=f+1;
       end;
      if f=m-i then
       begin
        x:=a^[i,j];
        arr^[g]:=x;
        g:=g+1;
       end;
     end;
  end;
 end;

 {Вывод массива особых эл-ов}

procedure PrintMass(arr : PArray; L : integer);
 var
  i : integer;
 begin
  writeln('Массив особых эл-ов: ');
  for i:=1 to L-1 do
   write(arr^[i]:4);
 end;


var
 a: PMatrix;  { переменная-указатель на матрицу }
 arr: PArray;  { переменная-указатель на массив }
 i,j:integer;
 k:integer;
 f,g:integer;
 x,j1:integer;
 n,m:integer;

begin
 { создаем матрицу и массив. Т.е. выделяем для них память. }
 New(a); 
 New(arr);

 clrscr;
 writeln('Введите размер матрицы: ');
 read(m,n);
 writeln ('Вводите матрицу: ');
 
 for i:=1 to m do
  for j:=1 to n do
   read(a^[i,j]);

  writeln;
  writeln('Матрица: ');

  PrintMatr(a,m,n);
  SearchElem(a,m,n,arr,g);
  PrintMass(arr,g);
  
  { освобождаем выделенную ранее память }
  Dispose(a);
  Dispose(arr);

 end.
Удачи.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на файлы,помогите решить Prophet23 Паскаль, Turbo Pascal, PascalABC.NET 0 08.04.2009 23:15
Задача на двухмерные массивы! Помогите решить! dimmkka Общие вопросы .NET 1 18.02.2009 21:16
Товарищи, помогите разобраться с указателями scibern Общие вопросы C/C++ 7 11.01.2009 12:28
Очень сложная задача, помогите решить... jaw Помощь студентам 17 25.10.2008 22:02
Помогите пожалуйста с динамической памятью и указателями Riddick2013 Помощь студентам 1 19.12.2007 14:41