• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Динамические массивы

  • Автор темы Автор темы opskaka
  • Дата начала Дата начала

opskaka

Новые
Регистрация
5 Дек 2010
Сообщения
25
Реакции
0
Баллы
0
Динамические массивы

Разработать программу выявления седловой точки в матрице размерности n*n. Матрица размещается в оперативной памяти в форме двухмерного массива динамически (значение n вводится по запросу с клавиатуры). Седловой точкой в матрице называют элемент, одновременно наибольший в своей строке и наименьший в своем столбце.Не получаются эти динамические массивы вообще.
 
вот что получилось у меня.
но здесь не правильно.
результатов никаких не дает.
program cedlo;
uses crt;
Type
Mas = array [1..100] of integer;
MasUk = array[1..100] of ^Mas;
Var
a:^MasUk;
N,I,J,R,p,min,max,maxj,minj:integer;
z1,z2:boolean;
Begin
clrscr;
{$R-}
writeln('Vvedite razmernost kvadratnoy matricy:');
read(N);
writeln('Vvedite matricy:');
GetMem(a,SizeOf(Mas)*N);
For I:=1 to N do
begin
GetMem(a^,2*N);
for J:=1 to N do
read(a^^[J]);
end;

for i:=1 to n do
begin
min:=a^^[1];
max:=a^^[1];
maxj:=1;
minj:=1;
for j:=2 to n do
begin
if a^^[j] < min then
begin
min:=a^^[j];
minj:=j;
end;
if a^^[j] >max then
begin
max:=a^^[j];
maxj:=j;
end;
end;
z1:=true;
z2:=true;

for p:=1 to n do
begin
if min<a^[p]^[minj] then
z1:=false;
if max>a^[p]^[maxj] then
z2:=false;
end;
if z1 then
writeln('tochka', a^^[minj],'i=',i,'j',minj);
if z2 then
writeln('tochka', a^^[maxj],'i=',i,'j',maxj);
end;
freemem(a,sizeof(mas)*n);
readln;
{$r+}


end.
 
Ну вроде сочинил. И даже работает. Кошмар!
Код:
{$r-}
TYPE
 T=ARRAY[1..1] of Integer;

VAR
 A,Min_Col,Max_Line:^T;
 Max,Min:^Integer;
 i,j,N:Integer;
 b:Boolean;

BEGIN
 Write('N= ');
 ReadLn(N);
 GetMem(A, SizeOf(Integer)*N*N);
 GetMem(Min_Col, SizeOf(Integer)*N);
 GetMem(Max_Line, SizeOf(Integer)*N);

 WriteLn('Matrix A:');
 For i:=1 to N do
  begin
   For j:=1 to N do
    begin
     Write('A[',i:2,',',j:2,']= ');
     ReadLn(A^[N*(i-1)+j]);
    end;
   WriteLn;
  end;
 WriteLn;
 For i:=1 to N do
  begin
   For j:=1 to N do
    Write(A^[N*(i-1)+j]:4);
   WriteLn;
  end;
 WriteLn;

 For i:=1 to N do
  begin
   New(Max);
   Max^:=A^[N*(i-1)+1];
   Max_Line^[i]:=1;
   For j:=2 to N do
    If A^[N*(i-1)+j]>Max^ then
     begin
      Max_Line^[i]:=j;
      Max^:=A^[N*(i-1)+j];
     end;
   Dispose(Max);
  end;

 For j:=1 to N do
  begin
   New(Min);
   Min^:=A^[j];
   Min_Col^[j]:=1;
   For i:=2 to N do
    If A^[N*(i-1)+j]<Min^ then
     begin
      Min_Col^[j]:=i;
      Min^:=A^[N*(i-1)+j];
     end;
   Dispose(Min);
  end;

 b:=true;
 For i:=1 to N do
  If Min_Col^[Max_Line^[i]]=i then
   begin
    WriteLn('Saddle point: line N ',i,'; column N ',Max_Line^[i]);
    b:=false;
   end;
 If b then WriteLn('Matrix has no saddle point');

 FreeMem(A, SizeOf(Integer)*N*N);
 FreeMem(Min_Col, SizeOf(Integer)*N);
 FreeMem(Max_Line, SizeOf(Integer)*N);

 ReadLn;
END.
 
Назад
Сверху