Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2008, 22:38   #1
katbka
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 17
Сообщение Помогите пожалуйста решить задачу с массивами.

Даны матрица А(n*m) и вектор В(n). Получить два новых вектора С(n) и D(n). В вектор С поместить индекс первого вхождения элемента вектора В в соответствующую строку исходной матрицы. В вектор D поместить индекс последнего вхождения элемента вектора В в соответствующую строку исходной матрицы. Если в строке матрицы элемент из вектора В отсутствует, то в соответствующие элементы векторов С и D записать нули.

Объясните пожалуйста, что собственно требуется сделать? Текс запутан. мне понять сложно. Заранее всем спасибо.
katbka вне форума Ответить с цитированием
Старый 07.09.2008, 01:27   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
const
  n = 5;
  m = 10;
var
  mas: array[1..n, 1..m] of integer;
  B, C, D: array[1..n] of integer;
  i, j: byte;
begin
  randomize;
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      mas[i, j] := random(9) + 1; //заполнение
      write(mas[i, j]:3) //и вывод на экран матрицы A
    end;
    writeln
  end;
  writeln; write('B = ');
  for i := 1 to n do begin
    B[i] := random(9) + 1; //заполнение
    write(B[i]:3) //и вывод на экран вектора B
  end;

  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      if mas[i, m - j + 1] = B[i] then C[i] := m - j + 1;
      if mas[i, j] = B[i] then D[i] := j
    end;
  end;

  writeln; write('C = ');
  for i := 1 to n do write(C[i]:3);//вывод на экран вектора C
  writeln; write('D = ');
  for i := 1 to n do write(D[i]:3);//вывод на экран вектора D
  readln
end.
if mas[i, m - j + 1] = B[i] then C[i] := m - j + 1; Идея такая - идём с конца строки и если нашли совпадение, то запоминаем его позицию. В итоге последнее запомненное будет первым.
if mas[i, j] = B[i] then D[i] := j Идея такая - идём с начала строки и если нашли совпадение, то запоминаем его позицию. В итоге последнее запомненное будет последним.
Это не самый быстрый способ, но код компактнее получается.
eoln вне форума Ответить с цитированием
Старый 07.09.2008, 11:18   #3
katbka
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 17
По умолчанию

большое вам спасибо!
katbka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу пожалуйста Никитка89 Паскаль, Turbo Pascal, PascalABC.NET 3 29.05.2008 08:35
Помогите, пожалуйста решить задачу по ООП M_Yuri Помощь студентам 2 10.02.2008 20:12
Помогите решить задачу с динамическими массивами и строками символов Andres Помощь студентам 2 31.01.2008 11:09
Пожалуйста помогите решить задачу на паскале jst.denis Помощь студентам 1 09.11.2007 10:56