Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / отчет прога лаба 1

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
91.96 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №1

по дисциплине «Современные технологии программирования».

Вариант 16

Тема: «Разработка программ на C# с использованием интерфейсов для снижения сложности программ.»

Выполнила студентка группы ИС2-1

Магальник Екатерина Борисовна

Руководитель: Гаранин Сергей Александрович

МОСКВА – 2023

1.1 Цель лабораторной работы

Целью лабораторной работы является получение навыков проектирования и реализации программного обеспечения с использованием интерфейсов, позволяющих повышать гибкость и эффективность программы.

1.3 Задание на выполнение лабораторной работы

Лабораторная работа выполняются в среде Microsoft Visual Studio на языке C# как консольные приложения.

1) Разработать интерфейс, определяющий функциональность стека с элементами типа object. Интерфейс может содержать только прототипы функций и свойства, которые в данной задаче только возвращают значения с помощью метода get().

2) Реализовать стек на базе двух разных классов, хранящих элементы. Например, в первом классе - для хранения элементов использовать стандартный класс ArrayList, принадлежащий пространству имен System.Collection. Во втором из классов, реализующих интерфейс стека, применить для хранения элементов стека массив с элементами типа object.

3) объявить статический метод для вывода на экран сведения об элементах стека.

4) В основной программе создав объекты классов, реализующих интерфейс стека, продемонстрировать их особенности и возможности статического метода для вывода элементов стека.

5) Варианты реализации интерфейсов:

- интерфейс стека - реализация посредством двусторонней очереди и списка;

- интерфейс очереди - реализация через двустороннюю очередь и список;

- интерфейс очереди с приоритетом – реализация посредством вектора и списка.

1.4 Порядок выполнения лабораторной работы

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

using System;

using System.Collections; //библиотека коллекций для ArrayList

using System.Runtime.ExceptionServices;

public interface IStack

{

int count { get; } //свойство, которое дает доступ к данным класса;

//фактически метод класса, дающий доступ к данным, можнт иметь разный уровень доступа

object Pop(); //специальный тип данных, который может записать в себя все (грубо говоря аналог шаблона в С++)

object Peek();

bool Push(object item);

string [] ToStringArray();

}

//реализация методов листа

class StackList : IStack //класс использует методы IStack

{

ArrayList list; //контейнер, который принимает в себя любые типы данных;

//туда можно записать сколько угодно данных, она расширяется

public StackList() //конструктор начинается со слова public

{

list = new ArrayList(); //выделение памяти для нового листа

}

int Count = 0;

public int count

{

get { return Count; }

}

public object Pop() //метод класса для удаления последнего элемента

{

object t = list[count-1];

list.RemoveAt(count-1);

Count--;

return t;

}

public bool Push(object item) //добавление элементов в лист

{

list.Add(item);

Count++;

return true;

}

public object Peek() //возвращает последний элемент

{

return list[Count-1];

}

public string [] ToStringArray() //преобразовывает все входные данные в массив строк

{

string[] ar = new string[Count];

for (int i = 0; i < Count; i++)

{

ar[i] = list[i].ToString();

}

return ar;

}

}

//реализация методов стека

class StackArray : IStack

{

object[] arr;

int top;

public StackArray(int capacity)

{ //capacity размер массива

arr = new object[capacity];

top = 0;

}

public int count

{

get { return top; }

}

public object Pop()

{

object t = arr[top-1];

object[] ret = new object[arr.Length - 1];

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

{

ret[i] = arr[i];

}

arr = ret;

top--;

return t;

}

public bool Push(object o)

{

try

{

arr[top] = o;

top++;

return true;

}

catch when(top == arr.Length) {

Console.WriteLine(" ");

Console.WriteLine("Can't add the element");

Console.WriteLine(" ");

return false;

}

}

public object Peek()

{

return arr[top-1];

}

public string[] ToStringArray()

{

string[] ar = new string[top];

for (int i = 0; i < top; i++)

{

ar[i] = arr[i].ToString();

}

return ar;

}

}

class program{

static void printStack(IStack ist){

Console.WriteLine("Printing of stack");

//Console.WriteLine(" ");

foreach (object o in ist.ToStringArray())

{

Console.WriteLine(o);

}

}

static void Main()

{

StackList A = new StackList();

int k = 0;

Console.WriteLine("Type number of elements");

k = Convert.ToInt32(Console.ReadLine());

for (int i = 0; i < k; i++)

{

object a = Console.ReadLine();

A.Push(a);

}

A.Pop();

printStack(A);

StackArray B = new StackArray(4);

int g = 0;

Console.WriteLine("Type number of elements");

g = Convert.ToInt32(Console.ReadLine());

for (int i = 0; i < g; i++)

{

object b = Console.ReadLine();

B.Push(b);

}

B.Pop();

printStack(B);

}

}

Результат работы программы: