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

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

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

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

Помогите решить задачу на паскале

Мартулька

Ученик
Регистрация
25 Дек 2011
Сообщения
8
Реакции
0
Баллы
0
Помогите решить задачу на паскале

Условия задачи таковы:Написать подпрограмму, которая в двумерном массиве А(N,M) целых чисел, таком, что для всех I от 1 до N , J от 1 до М-1 выполняется А(I,J)>A(I,J+1) и для всех I от 1 до N-1 выполняется A(I,M)>A(I+1,M), находит все элементы A(I,J), равные J+I, или устанавливает, что таких элементов нет.
Есть часть решения задачи, но не полная=( помогите прошу очень нужно выполнить ее верно(

for k:=1 to n do begin
| b[k]:=1;
end;
eq := true;
for k := 2 to n do begin
| eq := eq and (a[1][b[1]] = a[k][b[k]]);
end;
{инвариант: оставшиеся части пересекаются, т.е. существует
такое х, что для всякого i из [1..n] найдётся j из [1..m],
не меньшее b, для которого a[j] = х; eq <=> первые
элементы оставшихся частей равны}
while not eq do begin
| s := 1; k := 1;
| {a[b] - минимальное среди a[1][b[1]]..a[k][b[k]]}
| while k <> n do begin
| | k := k + 1;
| | if a[k][b[k]] < a[b] then begin
| | | s := k;
| | end;
| end;
| {a[b] - минимальное среди a[1][b[1]]..a[n][b[n]]}
| b := b + 1;
| for k := 2 to n do begin
| | eq := eq and (a[1][b[1]] = a[k][b[k]]);
| end;
end;
writeln (a[1][b[1]]);
 
Помогите прошу(((((((((((((((((((
Как говорил незабвенный Карлсон, - "Спокойствие, только спокойствие!".
Что касается выложенного кода, то там такого понаверчено, что сам черт ногу (или хвост) сломит. А задачка-то школьная. Вот я нарисовал программку, которая ее решает - а уж в подпрограмму переделывайте сами. Если, конечно, устроит.
Код:
CONST
 M=15; {number of lines}
 N=18; {number of columns}
VAR
 A:Array[1..M,1..N] of Word;
 i,j:Byte;
 Nc:Word;

Function Mx(z1,z2:Word):Word;
begin
 If z1>z2 then Mx:=z1 else Mx:=z2;
end;

BEGIN
 Randomize;
 A[M,N]:=0;
 For j:=N-1 downto 1 do
  A[M,j]:=A[M,j+1]+1+Random(3);
 For i:=M-1 downto 1 do
  A[i,N]:=A[i+1,N]+1+Random(3);
 For i:=M-1 downto 1 do
  For j:=N-1 downto 1 do
   A[i,j]:=Mx(A[i+1,j],A[i,j+1])+1+Random(3);

 For i:=1 to M do
  begin
   For j:=1 to N do
    Write(A[i,j]:4);
   Writeln;
  end;
 Writeln;

 Nc:=0;
 For i:=1 to M do
  For j:=1 to N do
   If A[i,j]=i+j then
    begin
     Writeln('A[',i:2,',',j:2,'] = i+j = ',A[i,j]);
     Inc(Nc);
    end;
 Writeln;
 Writeln(Nc,' elements');
 Readln;
END.
 
Спасибо вам большое.Только подпрограмму я написать смогу ли=)
 
Назад
Сверху