Помогите, пожалуйста написать программу ** Паскале(или хотя бы алгоритм ** том же...

0 голосов
92 просмотров

Помогите, пожалуйста написать программу на Паскале(или хотя бы алгоритм на том же языке).в матрице А[5,5] найти все строки, совпадающие со строками матрицы В[5,5]. Переформировать матрицу А так, чтобы найденные строки располагались в её начале, а остальные в конце.


Информатика (399 баллов) | 92 просмотров
0

Т.е. даже не писать, а ставить флажок. Например, true - переставляем, false - нет.

0

Ох, ну это сложновато будет

0

Ну это как если на бумажке мы бы птичками пометили часть строк

0

Далее берем первую строку в матрице А и ищем в В такую же.

0

Есть - пишем в первый элемент нашего вектора true, а иначе пишем false. Повторяем процесс для остальных строк в A. Это мы "проставили птички"

0

Достаточно теперь просмотреть наш вектор и определить, какие строки пойдут вверх. Или вниз, неважно.

0

Суть - обменивать обменивать местами пару строк - с пометкой и без пометки

0

Вот и все.

0

Это если на месте менять строки. А если создать вспомогательную матрицу 5х5, это вообще "легкотня", тогда и вектор не нужен.

0

Есть совпадение - гоним строку во вспомогательную матрицу наверх, нет - вниз. И заполняем навстречу друг-другу строки. Потом А убиваем, а вспомогательная будет вместо нее.

Дан 1 ответ
0 голосов
Правильный ответ

PascalABC.NET 3.4.2, сборка 1864 от 11.11.2018

Внимание! Если программа не работает, обновите версию!

begin

 var a := new integer[5, 5](

     (2, 4, 5, 1, 3),

     (7, 2, 9, 0, 2),

     (6, 4, 1, 0, 1),

     (8, 4, 7, 2, 0),

     (6, 0, 0, 2, 1));

 Println('Массив A');    

 a.Println(2);

 Println('Массив B');

 var b := new integer[5, 5](

     (2, 4, 5, 0, 3),

     (6, 0, 3, 2, 1),

     (2, 4, 5, 1, 3),

     (8, 4, 7, 2, 0),

     (6, 2, 0, 2, 1));

 b.Println(2);

 Println('Массив A');

 var c := new integer[5, 5];

 var (upper, lower) := (0, a.RowCount - 1);

 for var i := 0 to a.RowCount - 1 do

 begin

   var found := False;

   for var j := 0 to b.RowCount - 1 do

     if a.Row(i).SequenceEqual(b.Row(j)) then

     begin

       c.SetRow(upper, a.Row(i));

       upper += 1;

       Found := True;

       break

     end;

   if not found then  

   begin

     c.SetRow(lower, a.Row(i));

     lower -= 1;

   end

 end;

 a := Copy(c);

 c := nil; // удаляем с

 a.Println(2)

end.


image
(654k баллов)
0

Если загрузить программу и в исходнике подводить мышку к непонятным словам, будут всплывать подсказки на русском языке и все станет совсем понятно.