Консультация № 175281
15.12.2009, 09:11
35.00 руб.
0 4 1
Здравствуйте,срочно нужно подробное и простое решение 2х след.задач

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


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Дано натуральное число N. Определить длину периода 1/n. Период дроби равен периоду в последовательности остатков. Построить график зависимости периода от N.

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

Обсуждение

Неизвестный
16.12.2009, 15:56
общий
up
Неизвестный
16.12.2009, 22:35
общий
это ответ
Здравствуйте, Benqq.
Вообще-то, нужно задавать по одной задаче в вопросе, поэтому решу только первую.
Тип данных, полагаю, непринципиален, буду использовать word. Поскольку массивы заданы уже отсортированные, то мы можем упростить нахождение одинакового элемента. Покажу на примере:
X: 1 2 3 3 4 6
Y: 1 1 3 4 5
В результате должен получиться массив Z: 1 2 3 4. Выбираем в качестве основного массив с меньшей размерностью, то есть в данном случае Y, идём по нему в цикле. Рассматриваем первый элемент (1), запускаем цикл по X (пока с 1-го элемента, потому что мы зашли в него впервые), на первой же итерации видим совпадение значений, а значит сразу пишем 1 в Z и переводим текущую позицию в массиве X на следующий элемент, чтобы не учесть ещё раз тот же самый. Возвращаемся во внешний цикл, выбираем следующий элемент X - 2. Ищем его в Y, начиная со второго элемента. 1 - не подходит, а 3 - уже больше, чем заданное число, а значит, можно прерывать поиск: учитывая отсортированность массивов, найти нужное число дальше мы уже не сможем. При этом текущую позиция в Y мы не меняем, потому что как бы не знаем, что там хранится. И так далее.
Весь этот процесс для удобства выделим в процедуру.
Код с комментариями - в приложении, если что-то непонятно, спрашивайте.
Удачи!

Приложение:
Type mas = array [1..50] of word; {Тип массива}

Var x, y, z: mas; {Массивы}
i, k, l, m, j: word; {Счётчики, размерности}

procedure CreateZ (var x, y, z: mas; k, l: word; var m: word); {Процедура формирования резулитьрующего массива}
{исходные массивы, результат, размерности исходных массивов, размерность результата}
Var i, j, cur: word; {Счётчики для циклов}
begin
m:= 1; {Размерность массива Z}
cur:= 1;
for i:=1 to k do {Цикл по массиву Х}
begin
for j:=cur to l do {Цикл по массиву У}
if (x[i]=y[j]) then
{Если значение из Х попадается в У}
begin
z[m]:= x[i]; {Копируем его в результат}
inc (m); {Наращиваем размерность}
cur:= j+1; {Переходим на позицию дальше}
break; {Выходим из внутреннего цикла}
end;
if (x[i]>y[j]) then break; {Прерываем цикл, если вышли за значение}
end;
dec (m); {Уменьшаем размерность результата - последний элемент не заполнен}
end;

begin
writeln ('Input k: '); {Ввод данных}
repeat
readln (k);
if (k>50) then writeln ('k is too big!'); {Проверка ввода (массив задан на 50 элементов максимально)}
until k<=50;
writeln ('Input vector X: ');
for i:=1 to k do
readln (x[i]);
writeln ('Input l: '); {Всё аналогично для второго}
repeat
readln (l);
if (l>50) then writeln ('l is too big!');
until l<=50;
writeln ('Input vector Y: ');
for i:=1 to l do
readln (y[i]);
{Вызываем процедуру генерации массива так, чтобы в качестве Х был передан массив с максимальной размерностью}
if (k<l) then CreateZ (x, y, z, k, l, m)
else CreateZ (y, x, z, l, k, m);
writeln ('Result: '); {Выводим результат}
for i:=1 to m do
write (z[i], ' ');
end.
Неизвестный
17.12.2009, 11:26
общий
все ясно спс а можно нарисавать блок схему с описанием?
Неизвестный
17.12.2009, 17:24
общий
Benqq:
Примерно так.
Форма ответа