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

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

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

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

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

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

NAt

Новые
Регистрация
9 Дек 2012
Сообщения
45
Реакции
0
Баллы
0
Помогите решить задачу в Паскале

Дано два двумерных массива а(n1xm1) ,b(n2xm2). Cформировать массив x((n1+ n2)x(m1+m2)), таким образом чтобы массивы a и b располагались по побочной диагонали, а остальные элементы были бы заполнены 0.
вот начало, а дальше у меня ступор:

const n1=5;m1=5; m2=5;n2=5;
var a:array[1..n1,1..m1] of real;
b:array[1..n2,1..m2] of real;
x:array[1..n1+n2,1..m1+m2] of real;
i,j,e,p1,p2,q:integer;
begin
for i:=1 to n1 do
begin
for j:=1 to m1 do
begin
writeln ('a[',i,',',j,']=',a[i,j]);
readln(a[i,j]);
end;
writeln;
end;
for i:=1 to n2 do
begin
for j:=1 to m2 do
begin
writeln ('b[',i,',',j,']=',b[i,j]);
readln(b[i,j]);
end;
writeln;
p1:=m1+n1;
p2:=m2+n2;
for e:=1 to n1 do
begin
for q:=1 to p2 do
begin
for j:=1 to m1 do
begin
x[e,q]:=0;
end; end;end;
 
А массивы обязательно должны быть real? Целочисленные нельзя? Просто на экран выводить было бы удобнее.
 
real обязательно)
 
а хотя нет, целочисленные лучше))
 
real обязательно)
Ладно. Тогда еще вопрос. Какие-нибудь ограничения на размерности массивов есть? Поясню. Вот Вы все четыре константы n1,m1,n2,m2 полагаете одинаковыми и равными 5. Это предусмотрено условием? С другой стороны, побочная (равно как и главная) диагональ может быть только у квадратной матрицы, т.е. n1+n2=m1+m2 - так? Но, кроме того, возникает вопрос: а что значит для неквадратных исходных матриц расположение "вдоль побочной диагонали"? Может быть, просто одна должна оказаться в правом верхнем углу "большой" матрицы, а вторая - в левом нижнем? Поясните, пожалуйста. Или так - достаточно ли будет сделать как у Вас, т.е. все константы положить равными? Претензий потом не будет?
 
в условии нет никаких ограничений на размерности)
то что все 4-е константы равны 5- это моё предположение, мне кажется так легче будет. Но скорей всего правильнее ваше утверждение:одна должна оказаться в правом верхнем углу "большой" матрицы, а вторая - в левом нижнем
 
в условии нет никаких ограничений на размерности)
то что все 4-е константы равны 5- это моё предположение, мне кажется так легче будет. Но скорей всего правильнее ваше утверждение:одна должна оказаться в правом верхнем углу "большой" матрицы, а вторая - в левом нижнем
Сейчас нарисую.
 
Вот, получите.
Одно замечание: не пытайтесь объединить ввод значений элементов матрицы и вывод ее на экран - ничего не выйдет. Это необходимо делать порознь и последовательно.
Код:
const
 n1=5;
 m1=4;
 n2=3;
 m2=7;
var
 a:array[1..n1,1..m1] of Integer;
 b:array[1..n2,1..m2] of Integer;
 x:array[1..n1+n2,1..m1+m2] of Integer;
 i,j:integer;

Begin
 for i:=1 to n1+n2 do
  for j:=1 to m1+m2 do
   x[i,j]:=0;

 for i:=1 to n1 do
  for j:=1 to m1 do
   begin
    write('a[',i,',',j,']= ');
    readln(a[i,j]);
    x[i,j+m2]:=a[i,j];
   end;
 writeln;

 for i:=1 to n2 do
  for j:=1 to m2 do
   begin
    write('b[',i,',',j,']= ');
    readln(b[i,j]);
    x[i+n1,j]:=b[i,j];
   end;
 writeln;

 writeln('Matrix a:');
 for i:=1 to n1 do
  begin
   for j:=1 to m1 do write(a[i,j]:4);
   writeln;
  end;
 writeln;

 writeln('Matrix b:');
 for i:=1 to n2 do
  begin
   for j:=1 to m2 do write(b[i,j]:4);
   writeln;
  end;
 writeln;

 writeln('Matrix x:');
 for i:=1 to n1+n2 do
  begin
   for j:=1 to m1+m2 do write(x[i,j]:4);
   writeln;
  end;

 readln;
End.
 
спасибо огромное, очень помогли)
 
Назад
Сверху