![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 15.12.2010
Сообщений: 3
|
![]()
Даны два массива x[1] <= ... <= x[k], y[1] <= ... <= y[l].
Найти их "пересечение", т.е. массив z[1] <= ... <= z[m], содержащий их общие элементы, причем, кратность каждого элемента в массиве z равняется минимуму из его кратностей в массивах x и y. Число действий должно быть порядка k+l. Ниже Код, выполненый на ПасКАЛЕ, помогите в C# перевести... С синтаксисом никак не могу разобраться 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. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Даны два массива x[1] <= ... <= x[k], y[1] <= ... <= y[l]. | eduDo | Общие вопросы C/C++ | 0 | 15.12.2010 16:25 |
Даны два числа | Joker<777> | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 02.09.2010 15:57 |
Даны два конечных множества А и В | dexter2145 | Помощь студентам | 1 | 16.06.2010 15:01 |
Даны два одномерных массива, содержащие вещественные числа. Упорядочить по убыванию значен | [Meeen] | Общие вопросы C/C++ | 1 | 08.06.2010 00:49 |
Даны два числа | Vylkan | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 01.02.2010 04:13 |