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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 23:20   #1
webber9989
dimgunkin
Форумчанин
 
Аватар для webber9989
 
Регистрация: 06.05.2010
Сообщений: 112
По умолчанию Задача по массивам Pascal

Даны два массива x[1] <= ... <= x[k] и y[1] <= ... <= y[l]. Найти их "пересечение", т.е. массив z[1] <= ... <= z[m], содержащий их общие элементы, причем кратность каждого элемента в массиве z равняется минимуму из его кратностей в массивах x и y. Число действий порядка k+l.

Помогите с решением задачи, завтра зачет, вот 1 задача осталась на паскаль, я не изучал в школе этот язык, а в институте особо многому не научили за семестр...
mail: dimgunkin@gmail.com
skype: dimgunkin
icq: 684-795-212
webber9989 вне форума Ответить с цитированием
Старый 23.12.2011, 09:50   #2
webber9989
dimgunkin
Форумчанин
 
Аватар для webber9989
 
Регистрация: 06.05.2010
Сообщений: 112
По умолчанию

Помогите пожалуйста.
mail: dimgunkin@gmail.com
skype: dimgunkin
icq: 684-795-212
webber9989 вне форума Ответить с цитированием
Старый 23.12.2011, 10:02   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

обьясни что такое кратность - сделаю за аватарку
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 25.12.2011, 16:08   #4
webber9989
dimgunkin
Форумчанин
 
Аватар для webber9989
 
Регистрация: 06.05.2010
Сообщений: 112
По умолчанию

В задаче надо создать новый массив, переписать в него первый, потом просмотреь какие часла из второго массива совпадают с ним.
mail: dimgunkin@gmail.com
skype: dimgunkin
icq: 684-795-212
webber9989 вне форума Ответить с цитированием
Старый 25.12.2011, 17:03   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
{Даны два массива x[1] <= ... <= x[k], y[1] <= ... <= y[l].
 Найти их "пересечение", т.е. массив z[1] <= ... <= z[m],
 содержащий их общие элементы, причем, кратность каждого элемента
 в массиве z равняется минимуму из его кратностей в массивах x и y.
 Число действий должно быть порядка k+l.
}
Program InterSect;
Const
  cMaxIndex = 100; { максимальное число элементов для определения массива }
Type
  TIndex = 1..cMaxIndex;                 { тип для описания индекса }
  TArray = array [0..cMaxIndex] of Word; { описание массива. Элемент с индексом 0 - верхняя граница массива }
Var
  x : TArray; { массив x }
  y : TArray; { массив y }
  z : TArray; { массив z }

{ Процедура печати массива }
Procedure Print (a : TArray; title : string);
var
  i : TIndex;
begin
  write (title, ':');
  for i := 1 to a [0] do
    write (' ', a [i]);
  writeln;
end;

{ Процедура ввода массива }
Procedure Input (var a : TArray; title : string);
var
  i : TIndex;
begin
  writeln ('Введите элементы массива ', title, ' (не более ', cMaxIndex, ' элементов). Введите 0 для окончания ввода');
  a [0] := 0;
  for i := 1 to cMaxIndex do
  begin
    readln (a [i]);
    if a [i] = 0 then break
    else Inc (a [0]);
  end;
end;
{ Процедура для вормирования "пересечения" массивов }
Procedure InterSection (a : TArray; b : TArray; var c : TArray);
var
  i : TIndex; { переменная для перебора элементов первого массива }
  j : TIndex; { переменная для перебора элементов второго массива }
  n : TIndex; { количество элементов первого массива }
  m : TIndex; { количество элементов второго массива }
begin
  n := a [0];
  m := b [0];

  c [0] := 0;
  j := 1;
  i := 1;

  { пока есть элементы в первом массиве }
  while i <= n do
  begin
    { находим первый элемент во втором массиве, который не меньше текущего из первого }
    while (j <= m) and (b [j] < a [i]) do Inc (j);
    if j > m then break;
    { добавляем одинаковые элементы в третий массив (меньшая кратность получается автоматически) }
    while a [i] = b [j] do
    begin
      { Заносим элемент в массив c }
      Inc (c [0]);
      c [c [0]] := a [i];

      { переходим к следующим элементам исходных массивов }
      Inc (i);
      Inc (j);
      { проверяем границы массивов }
      if (i > n) or (j > m) then break;
    end;
    { пропускаем элементы первого массива до тех пор, пока очередной элемент не станет больше или равен текущего элемента второго массива }
    while (i <= n) and (a [i] < b [j]) do Inc (i);
  end;
end;

Begin
  Input (x, 'x');
  Input (y, 'y');
  Print (x, 'x');
  Print (y, 'y');
  InterSection (x, y, z);
  Print (z, 'z');
End.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторка по массивам. Pascal Tagimasad Помощь студентам 8 26.10.2011 22:17
Задача по массивам С++ Valera24 Помощь студентам 8 22.12.2010 21:23
задача по массивам мар5094 Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2010 16:04
задача по массивам с++ nurai Общие вопросы C/C++ 6 28.10.2009 13:22