В программе должны обрабатываться сведения как минимум о 8 объектах / лицах .

Учебная практика по программированию

Занятие 8

Вариант 2

Тема : Перечисления. Структуры. Интерфейсы.

Цель занятия : актуализация знаний о методах создания и использования в программах перечислений, структур, интерфейсов; закрепление навыка применения стандартных интерфейсов.

Ход работы

1. Составьте конспект теоретического материал с ответами на контрольные вопросы.

2. Составьте блок-схему алгоритма решения задачи согласно заданию.

3. Разработайте на основании построенной блок-схемы алгоритма программу.

4. Оформите отчет о проделанной работе.

 

Задание 1 . Составьте программу на языке С#.

Опишите структуру, содержащую сведения о студентах: фамилия, год рождения, учебные предметы (минимум 3), оценки за курсовые работы по данным предметам и их названия. Найдите учащихся, сдавших курсиве работы на отметки не ниже 8. Список учебных предметов оформите в виде перечисления.

 

const int STUDENTS_QUANTITY = 2;

   const int SUBJECT_QUANTITY = 5;

 

   static void Main(string[] args)

   {

       // Создаем список всех студентов

       List<Student> studentList = GetStudents();

 

       // Выводим список всех студентов

       Console.WriteLine("Список всех студентов");

       foreach (Student student in studentList)

       {

           Console.WriteLine(student);

       }

       Console.WriteLine();

 

       // Выбираем из всех студентов хороших

       List<Student> goodStudentsList = CheckGoodMark(studentList);

 

       // Выводим их

       Console.WriteLine("Список хороших студентов");

       foreach (Student student in goodStudentsList)

       {

           Console.WriteLine(student);

       }

       Console.WriteLine();

 

       Console.WriteLine("Нажмите клавишу 'AnyKey', чтобы завершить выполнение программы ");

       Console.ReadKey();

   }

 

   static List<Student> GetStudents()

   {

       List<Student> studentList = new List<Student>();

 

       for (int studentNum = 0; studentNum < STUDENTS_QUANTITY; studentNum++)

       {

           Console.WriteLine("Введите фамилию студента:");

           string surname = Console.ReadLine();

 

           Console.WriteLine("Введите год рождения студента:");

           string initials = Console.ReadLine();

 

           Console.WriteLine("Введите группу студента:");

           int groupNumber;

           while (true)

           {

               try

               {

                   groupNumber = Int32.Parse(Console.ReadLine());

                   break;

               }

               catch

               {

                   Console.WriteLine("Вы ввели недопустимое значение попробуйте еще раз");

               }

           }

           int[] marks = new int[SUBJECT_QUANTITY];

           for (int subjectNum = 0; subjectNum < SUBJECT_QUANTITY; subjectNum++)

           {

               Console.WriteLine("Введите оценку студента по предмету № " + (subjectNum + 1));

               while (true)

               {

                   try

                   {

                       marks[subjectNum] = Int32.Parse(Console.ReadLine());

                       break;

                   }

                   catch

                   {

                       Console.WriteLine("Вы ввели недопустимое значение попробуйте еще раз");

                   }

               }

           }

           studentList.Add(new Student(surname, initials, groupNumber, marks));

       }

       return studentList;

   }

 

   static List<Student> CheckGoodMark(List<Student> studentList)

   {

       List<Student> goodStudentsList = new List<Student>();

       foreach (Student student in studentList)

       {

           int summa = 0;

 

           foreach (int mark in student.Marks)

           {

               summa += mark;

           }

 

              float aver = summa / student.Marks.Length;

 

           if (aver >= 4.0)

           {

               goodStudentsList.Add(student);

           }

       }

       return goodStudentsList;

   }

 

}

 

public struct Student

{

   public Student(string surname, string initials, int groupNumber, int[] marks)

   {

       Surname = surname;

       Initials = initials;

       GroupNumber = groupNumber;

       Marks = marks;

   }

   public string Surname;

   public string Initials;

   public int GroupNumber;

   public int[] Marks;

 

   public override string ToString()

   {

       string marksStr = "";

       foreach (int mark in Marks)

       {

           marksStr += mark + " ";

       }

 

       string studentInfo = "Студент " + Surname + " " + Initials + "\t" + "из группы № " + GroupNumber + " имеет оценки " + marksStr;

       return studentInfo;

   }

}

}

 

 

 

 

Задание 2 . Составьте программу с использованием типа данных структура. Одно из полей структуры должно принимать одно из значений созданного перечисления. Также структура должна содержать метод, позволяющий выводить требуемее сведения на экран определенном формате.

В программе должны обрабатываться сведения как минимум о 8 объектах / лицах .

Сведения о приборах в лаборатории:

- Инвентарной номер;

- Наименование товара;

- Назначение;

- Дата изготовления;

- Цена;

Выведите сведения о приборах в лаборатории, изготовленных до 1999 г, с ценой не боле 1000 у.е. в подряде возрастания инвент номеров.

 

static void Main(string[] args)

   {

       List<Lab> studentList = GetStudents();

       Console.WriteLine("Сведения о приборах в лаборатории:");

       foreach (Lab lab in studentList)

       {

           Console.WriteLine(lab);

       }

       Console.WriteLine();

       List<Lab> goodStudentsList = CheckGoodMark(labList);

       Console.WriteLine("Cведения о приборах в лаборатории, изготовленных до 1999 г, с ценой не боле 1000 у.е. в подряде возрастания инвент номеров:");

       foreach (Lab lab in goodlabList)

       {

           Console.WriteLine(student);

       }

       Console.WriteLine();

       Console.ReadKey();

   }

 

   static List<Lab> GetStudents()

   {

       List<Lab> labList = new List<Lab>();

 

       for (int labNum = 0; labNum < Lab_QUANTITY; labNum++)

       {

           Console.WriteLine("Организация:");

           string surname = Console.ReadLine();

 

           Console.WriteLine("Товар:");

           string initials = Console.ReadLine();

 

           Console.WriteLine("Количество:");

           int groupNumber;

 

 

           while (true)

           {

               try

               {

                   groupNumber = Int32.Parse(Console.ReadLine());

                   break;

               }

               catch

               {

                   Console.WriteLine("Вы ввели недопустимое значение попробуйте еще раз");

               }

           }

           int[] marks = new int[Lab_QUANTITY];

           for (int subjectNum = 1; subjectNum < Lab_QUANTITY; subjectNum++)

           {

               Console.WriteLine(" Инвентарый номер: 20");

               Console.WriteLine(" Наиенование прибора: оборудование");

               Console.WriteLine(" Назначение прибора: для работы");

               Console.WriteLine(" Дата изготовления: 30.03.1999 " );

               Console.WriteLine(" Цена прибора: 1000$");

                   

                   

               while (true)

               {

                   try

                   {

                       marks[subjectNum] = Int32.Parse(Console.ReadLine());

                       break;

                   }

                   catch

                   {

                       Console.WriteLine("Вы ввели недопустимое значение попробуйте еще раз");

                   }

               }

           }

           labList.Add(new Lab(surname, initials, groupNumber, marks));

       }

       return LabList;

   }

 

   static List<Lab> CheckGoodMark(List<Lab> studentList)

   {

       List<Lab> goodStudentsList = new List<Lab>();

       foreach (Lab student in studentList)

       {

           int summa = 0;

 

           foreach (int mark in student.Marks)

           {

               summa += mark;

           }

 

           float aver = summa / student.Marks.Length;

 

           if (aver >= 4.0)

           {

               goodStudentsList.Add(student);

           }

       }

       return goodStudentsList;

   }

 

}

 

public struct Lab

{

   public Lab(string surname, string initials, int groupNumber, int[] marks)

   {

       Surname = surname;

       Initials = initials;

       GroupNumber = groupNumber;

       Marks = marks;

   }

   public string Surname;

   public string Initials;

   public int GroupNumber;

   public int[] Marks;

 

   public override string ToString()

   {

       string marksStr = "";

       foreach (int mark in Marks)

       {

           marksStr += mark + " ";

       }

 

       string studentInfo = "Лаборатория " + Surname + " " + Initials + "\t" + "из № " + GroupNumber + " цена " + marksStr;

       return studentInfo;

   }

}

}

 

 

 

 

Задание 3 . Составьте программу на языке С#, содержащую:

1) Базовый класс в соответствии с вариантом;

2) Производной класс, дополняющий базовой и содержащий помимо констриктора минимум две функции члена;

3) Не менее 2-х объектов базового и производного класса с вызовом для них соответствующих методов;

4) Организуйте множественное наследование с использованием интерфейсов;

5) Добавьте как минимум еще один интерфейс;

6) Класс/классы должны реализовывать как минимум два интерфейса.

 

Разработайте программу с использованием класса Quadrangle (четырехугольник), в котором реализовано вычисление периметра (P = a+b+c+d) площади (равна сумме треугольников, образованных при помощи диагонали четырехугольника, площадь треугольника вычисляется по формуле Герона ) четырехугольника, а также радиус описанной окружности. Класс должен содержать конструктор по умолчанию и конструктор инициализации.

 

class Quadrangle

{

   public double a { get; set; }

   public double b { get; set; }

   public double c { get; set; }

   public double d { get; set; }

 

   public Quadrangle()

   {

   }

 

   public Quadrangle(double a, double b, double c, double d)

   {

       this.a = a;

       this.b = b;

       this.c = c;

       this.d = d;

   }

 

   public double Area()

   {

       double p = (a + b + c + d) / 2;

       return Math.Sqrt((p - a) * (p - b) * (p - c) * (p - d));

   }

 

   public double Perimetr()

   {

       return a + b + c + d;

   }

 

   public double Circle()

   {

       double p = (a + b + c + d) / 2;

       return 1.0 / 4 * Math.Sqrt((a * b + c * d) * (a * d + b * c) * (a * c + b * d) / ((p - a) * (p - b) * (p - c) * (p - d)));

   }

   class Program

   {

       static void Main(string[] args)

       {

           Quadrangle quadrangle = new Quadrangle(1, 1, 1, 1);

 

           Console.WriteLine("Площадь: " + quadrangle.Area());

           Console.WriteLine("Периметр: " + quadrangle.Perimetr());

           Console.WriteLine("Радиус окружности: " + quadrangle.Circle());

           Console.ReadKey();

       }

   }

}

}

Контрольные вопросы

1 .Данте определение понятию «структура». Укажите назначение указанного типа данных. Приведите примеры возможного использования.

Структура – подобный классу объект, но относится к типу значения, а не к ссылочному типу данных. Структуры не поддерживают наследование.

2. Опишите объявление структуры на языке С#. Поясните, как создать экземпляр структуры? Как обратиться к данным структуры?

structИМЯ : ИНТЕРФЕЙСЫ {

// объявление членов}

имя структуры <название экземпляра> = newимя структуры(значение по умолчанию)

3. Опишите объявление массива структур и работу с ним.

Futball[] pr1 = newFutball[8]; Random r1 = newRandom();

for (inti = 0; i<8; i++) {

pr1[i].strana = (Futball.Strana)r1.Next(0,4);

4. Дайте определение понятию «перечисление». Приведите примеры возможного использования. Опишите его объявление на языке С#.

Перечисления – определяемый пользователем целочисленный тип.

enumимя {список_перечисления}

5. Перечислите основные методы класса Enum и укажите их назначение.

CompareTo() – сравниваетобъекты;

Equels() –проверяет равенство;

Finalize() –очищает.

6. Опишите понятие «интерфейс», объявление интерфейсов их взаимодействие со структурами и классами, особенности их использования.

Интерфейс – именованный набор абстрактных членов.

interfaceимя { возвращаемый_тип имя_метода_1 (список_параметров);}

7. Дайте определение понятиям «базовый класс», производный класс. Опишите объявление производного класса в программе.

Базовый класс – класс который является основой программы. Производный класс – класс который наследует свойства родительского класса.

Square_equation :Interface1, Interface2

8 . Конструктор - это специальный метод, который используется для инициализации объекта. Каждый класс имеет конструктор, если мы явно не объявляем конструктор для любого класса C#, компилятор строит конструктор по умолчанию для этого класса.

Существует два типа конструкторов:

Конструктор по умолчанию (конструктор no-arg)

Параметризованный конструктор

using System;

Class Student{

 int roll; float marks;

 public Student() //constructor

{

 roll=0;

 marks=0.0;

 }

 // other members

 

Параметризованный конструктор в C#

Class Student

{

int roll;

float marks;

public Student(int a, float b)//constructor

{

 roll = a;

 marks = b;

 }

//other members

 }

 

9 . .Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. От абстрактного класса интерфейс отличается некоторыми деталями в синтаксисе и поведении.

Давайте опишем некоторый интерфейс, задающий дополнительные свойства объектов класса:

public interface IProps

void Prop1(string s);

void Prop2 (string name, int val);

}

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

class SomeClass : ISomeInterface // реализация интерфейса ISomeInterface
{
// тело класса
}

Вывод : Изучил перечисления, структуры и интерфейсы. Актуализация знаний о методах создания и использования в программах перечислений, структур, интерфейсов; закрепление навыка применения стандартных интерфейсов.


Дата добавления: 2019-07-15; просмотров: 140; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!