Даны два массива 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 );
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 );
if a = 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 ) do Inc (j);
if j > m then break;
{ добавляем одинаковые элементы в третий массив (меньшая кратность получается автоматически) }
while a = b [j] do
begin
{ Заносим элемент в массив c }
Inc (c [0]);
c [c [0]] := a ;
{ переходим к следующим элементам исходных массивов }
Inc (i);
Inc (j);
{ проверяем границы массивов }
if (i > n) or (j > m) then break;
end;
{ пропускаем элементы первого массива до тех пор, пока очередной элемент не станет больше или равен текущего элемента второго массива }
while (i <= n) and (a < 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].
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] x, y, z;
x = Input("X");
y = Input("Y");
Print(x, "X");
Print(y,"Y");
z = InterSection(x, y);
Print(z, "Z");
Console.Write("Программа завершена. Нажмите \"Enter\" для выхода");
Console.ReadLine();
}
public static int[] Input(string title)
{
int[] a = new int[100];
Console.Write("Введите элементы массива ", title, " (не более ", 100, " элементов). Введите 0 для окончания ввода");
a[0] = 0;
for (int i = 1; i<100; i++)
{
a = Convert.ToInt32(Console.ReadLine());
if (a == 0)
break;
else
a[0]++;
}
return a;
}
static void Print(int[] a, string title)
{
Console.WriteLine(title, ":");
for (int i = 1; i <= a[0]; i++)
Console.WriteLine(a);
}
public static int[] InterSection(int[] a, int[] b)
{
int[] c = new int[100];
int n = a [0];
int m = b [0];
c [0] = 0;
int j = 1;
int i = 1;
//{ пока есть элементы в первом массиве }
while (i <= n)
{
//{ находим первый элемент во втором массиве, который не меньше текущего из первого }
while ((j <= m) && (b[j] < a))
j++;
if (j > m)
break;
//{ добавляем одинаковые элементы в третий массив (меньшая кратность получается автоматически) }
while (a == b[j])
{
//{ Заносим элемент в массив c }
c[0]++;
c[c[0]] = a;
//{ переходим к следующим элементам исходных массивов }
i++;
j++;
//{ проверяем границы массивов }
if ((i > n) || (j > m))
break;
}
//{ пропускаем элементы первого массива до тех пор, пока очередной элемент не станет больше или равен текущего элемента второго массива }
while ((i <= n) && (a < b [j]))
i++;
}
return c;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] x, y, z;
x = Input("X");
y = Input("Y");
Print(x, "X");
Print(y,"Y");
z = InterSection(x, y);
Print(z, "Z");
Console.Write("Программа завершена. Нажмите \"Enter\" для выхода");
Console.ReadLine();
}
public static int[] Input(string title)
{
int[] a = new int[100];
Console.Write("Введите элементы массива ", title, " (не более ", 100, " элементов). Введите 0 для окончания ввода");
a[0] = 0;
for (int i = 1; i<100; i++)
{
a = Convert.ToInt32(Console.ReadLine());
if (a == 0)
break;
else
a[0]++;
}
return a;
}
static void Print(int[] a, string title)
{
Console.WriteLine(title, ":");
for (int i = 1; i <= a[0]; i++)
Console.WriteLine(a);
}
public static int[] InterSection(int[] a, int[] b)
{
int[] c = new int[100];
int n = a [0];
int m = b [0];
c [0] = 0;
int j = 1;
int i = 1;
//{ пока есть элементы в первом массиве }
while (i <= n)
{
//{ находим первый элемент во втором массиве, который не меньше текущего из первого }
while ((j <= m) && (b[j] < a))
j++;
if (j > m)
break;
//{ добавляем одинаковые элементы в третий массив (меньшая кратность получается автоматически) }
while (a == b[j])
{
//{ Заносим элемент в массив c }
c[0]++;
c[c[0]] = a;
//{ переходим к следующим элементам исходных массивов }
i++;
j++;
//{ проверяем границы массивов }
if ((i > n) || (j > m))
break;
}
//{ пропускаем элементы первого массива до тех пор, пока очередной элемент не станет больше или равен текущего элемента второго массива }
while ((i <= n) && (a < b [j]))
i++;
}
return c;
}
}
}
Angel666 большое спасибо! ща попробую!+1
EduDo, пожалуйста, рада была помочь.