лабы / отчет прога лаба 1
.docx
ФЕДЕРАЛЬНОЕ
АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
(РОСАВИАЦИЯ)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №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);
}
}
Результат работы программы:
