GAECHKA
Твоя помощница в решении задач

Соедините две матрицы A и B в новую матрицу C, поставив строки A на нечетные места, а строки матрицы B на четные

Здравствуйте!
Задача такая : "Соедините две матрицы A и B в новую матрицу C, поставив строки A на нечетные места, а строки матрицы B на четные"
Прошу помочь, ибо скоро сдавать а я так и не поняла как ее реализовать во Free (я больше по ABC). Обязательно использовать динамику
0
вопрос задан

Источник


4 ответа
program Project1;
 
Type
  TArr = array of array of integer;
 
procedure InArr(var arr: TArr; nn: integer);
var
  i,j: integer;
  n: integer;
  vib: integer;
begin
  SetLength(arr,nn);
  for i := 0 to nn-1 do
     SetLength(arr[i],nn);
  Writeln('Введите 1, если ввод чисел будет осуществляться в ручном режиме');
  Writeln('Введите 2, если числа будут заданы генератором случайных чисел');
  Readln(vib);
  case vib of
  1: for i:= 0 to nn-1 do
      for j:= 0 to nn-1 do
       begin
        writeln('Введите элемент ',i+1,' строки ',j+1,' столбца.');
        Readln(arr[i,j]);
       end;
  2: for i:= 0 to nn-1 do
      for j:= 0 to nn-1 do
        arr[i,j]:= random(101) - 50;
 end;
end;
 
procedure InfOutMatrix (arr: TArr);
var
   i,j: integer;
begin
  for i:= 0 to high(arr) do
    begin
    for j:= 0 to high(arr[i]) do
      Write(arr[i,j]:4);
    writeln;
    end;
end;
 
var
  a,b,c: TArr;  // Переменные для хранения динамических двумерных массивов.
  i,j,k1,k2: integer; // Вспомогательные переменные для организации циклов.
  n: integer;   // Переменная для хранения значения размерности матрицы.
begin
 
  Randomize;
  Writeln('Введите значение размерности матрицы:');
  Readln(n);
  InArr(a,n);
  Writeln('Исходная матрица A:');
  InfOutMatrix (a);
  InArr(b,n);
  Writeln('Исходная матрица B:');
  InfOutMatrix (b);
  SetLength(c,2*n);
  for i := 0 to 2*n-1 do
     SetLength(c[i],n);
  k1:= 0;
  k2:= 0;
  for i:= 0 to 2*n-1 do
      if odd(i+1) then
        begin
        for j:= 0 to n-1 do
          c[i,j]:= a[k1,j];
        inc(k1);
        end
      else
        begin
        for j:= 0 to n-1 do
          c[i,j]:= b[k2,j];
        inc(k2);
        end;
  Writeln('Итоговая матрица C:');
  InfOutMatrix (c);
  ReadLn;
end.
А через getmem и freemem это можно переделать? Преподаватель не принимает...
Да, а можно динамику реализовать через freemem/getmem?
Я попыталась сдать, но вопрос был поставлен "Где в этой программе динамика?" и ответ что здесь динамические массивы был неудовлетворительным.
Видимо требуется как раз освобождение/заполнение динамической памяти через вышеупомянутые процедуры