В программе должны обрабатываться сведения как минимум о 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!