Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все лабы здесь.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
262.62 Кб
Скачать

Лабораторная работа «Массивы», задание №30.

Задание.

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

Описание алгоритма решения.

В методе Sort() мы сортируем данные в массивах т.к. есть условие x[1]<=..<=x[n]. Затем в методе Union and Multiplicity мы объединяем в массиве z наши массивы a и b. Длина массива z равен длине обоих массивов: a.Length + b.Length. Затем идёт цикл do-while в котором мы ищем индексности кратности элементов. Попутно отлавливаем ошибки в методе catch.

Листинг программы.

void Sort(int[] A)

{

for (int i = 0; i < A.Length; i++)

{

for (int j = i+1; j < A.Length; j++)

{

if (A[j] < A[i])

{

var temp = A[i];

A[i] = A[j];

A[j] = temp;

}

}

}

}

public int[] Union and Multiplicity (int[] a, int[] b)

{

int[] z = new int[a.Length+b.Length];

for(int i = 0; i < a.Length; i++)

z[i] = a[i];

for(int j = 0; j < b.Length; j++)

z[a.Length + j] = b[j];

do

{

z[a.Length + j] = Convert.ToInt32(Console.ReadLine());

if (Math.Abs(z[a.Length + j]) > n) {

Console.WriteLine("Нет индексов кратных", k);

}

else i = 0;

}

while ((i < n) || (n > nmax));

catch (Exception e) {

Console.WriteLine(e.ToString());

}

}

Лабораторная работа «Списки», задание №9.

Задание.

  1. Проверка списка на пустоту.

  2. Напечатать список в обратном порядке.

  3. Определить имеется ли в списке два подряд элемента одинаковых.

Описание алгоритма решения.

В первом задании мы создаём список при помощи класса с полями дата – текущее значение в списке и next – это ссылка на следующий элемент. Затем проверяем при помощи Assert(head <> nil) пустой ли список. Во втором задании перебираем элементы при помощи конструкции while last <> nil do и last := last.prev с последующим выводом на экран. В третьем задании перебираем элементы и сравниваем значения полей data текущего элемента и следующего:Result := head.data; If (Result = head.data.next) для поиска одинаковых значений, когда находим выходим при помощи exit .

Листинг программы.

{Сформировать линейный односвязный список, состоящий из трёх целых чисел 12, 34 и 56 в указанном порядке.}

type

N1<T> = class

data: Char;

next: N1<Char>;

//prev: N1< Char >;

constructor(data: Char; next: N1< Char >);

begin

Self.data := data;

//Self.prev := prev;

Self.next := next;

end;

end; {конец списка}

function CreateList(n: Char): N1< Char >;

begin

Assert(n > 0);

Writeln('Введите элемент');

var x := ReadChar;

var head := new N1< Char >(x, nil);

var Start := head;

for var i := 1 to n - 1 do

begin

Writeln('Введите элемент');

Read(x);

head.next := new N1< Char >(x, nil);

head := head.next;

end;

Result := Start;

end;

{ Дана ссылка на первый элемент линейного списка. Вывести его содержимое.}

procedure Print(head: N1< Char >);

begin

Writeln('Список имеет вид');

Assert(head <> nil); // проверка списка на не пустоту!!! Задание 1.

while head <> nil do

begin

Writeln(head.data);

head := head.next;

end;

end;

begin

var t := CreateList(12, 34, 56);

Print(t);

end.

{ Дана ссылка на последний элемент линейного двусвязного списка. Вывести его содержимое в обратном порядке.}

procedure PrintBack(last: N1< Char >);

begin

Writeln('Список : ');

while last <> nil do

begin

Writeln(last.data);

last := last.prev;

end;

end;

{Определяем есть ли в списке два подряд одинаковых элемента}

function Equals(head: N1< Char >): boolean;

begin

Assert(head <> nil);

while head <> nil do

begin

Result := head.data;

// сравниваем текущее значение элемента списка со следующим

If (Result = head.data.next)

begin

writeln(‘Мы нашли одинаковые элементы, они равны - ’, head.data);

exit;

end;

head := head.next;

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]