- •Оглавление
- •Введение
- •1 Разработка и реализация алгоритмов на языке с#
- •1.1 Лабораторная работа №1. Циклические программы
- •Код имеет линейную сложность o(n), так как количество итераций циклаК пропорционально введенному числу n.
- •1.2 Лабораторная работа №2. Массивы
- •1.3 Лабораторная работа №3. Функции
- •1.4 Лабораторная работа №4. Обработка текста
- •1.5 Лабораторная работа №5. Структуры
- •1.6 Лабораторная работа №6. Коллекции
- •1.7 Лабораторная работа №7. Основы ооп
- •Заключение
1.5 Лабораторная работа №5. Структуры
Задание 5: дан список учащихся из 10 записей. Каждая запись имеет поля: фамилия, имя, номер класса, оценки по трем предметам: вывести отдельно «хорошистов» (оценки 4 и 5) для указанного извне класса.
Ниже представлен исходный код данной программы на языке программирования C#.
using System;
struct Student
{
public string LastName;
public string FirstName;
public int ClassNumber;
public int[] Grades;
public override string ToString()
{
return $"{LastName} {FirstName}, Класс: {ClassNumber}, Оценки: {string.Join(", ", Grades)}";
}
}
class Program
{
static void Main()
{
Console.WriteLine("Выберите способ заполнения списка учащихся:");
Console.WriteLine("1 - Автоматическая генерация");
Console.WriteLine("2 - Ручной ввод");
int choice = 0;
while (true)
{
Console.Write("Ваш выбор: ");
if (int.TryParse(Console.ReadLine(), out choice) && (choice == 1 || choice == 2))
{
break;
}
else
{
Console.WriteLine("Ошибка: введите 1 или 2.");
}
}
Student[] students;
if (choice == 1)
{
students = GenerateStudents(10);
}
else
{
students = ManualInputStudents();
}
Console.WriteLine("\nСписок всех учащихся:");
foreach (var student in students)
{
Console.WriteLine(student);
}
int targetClass = 0;
while (true)
{
Console.Write("\nВведите номер класса для поиска хорошистов (1-11): ");
if (int.TryParse(Console.ReadLine(), out targetClass) && targetClass >= 1 && targetClass <= 11)
{
break;
}
Console.WriteLine("Ошибка: введите число от 1 до 11.");
}
Student[] goodStudents = GetGoodStudents(students, targetClass);
Console.WriteLine($"\nХорошисты класса {targetClass}:");
if (goodStudents.Length == 0)
{
Console.WriteLine("Нет хорошистов.");
}
else
{
foreach (var student in goodStudents)
{
Console.WriteLine(student);
}
}
}
static Student[] GenerateStudents(int count)
{
Student[] students = new Student[count];
Random rand = new Random();
string[] lastNames = { "Иванов", "Петрова", "Сидоров", "Козлов", "Смирнова", "Федоров", "Никитина", "Васильев", "Алексеева", "Морозов" };
string[] firstNames = { "Алексей", "Мария", "Иван", "Дмитрий", "Ольга", "Сергей", "Анна", "Павел", "Екатерина", "Андрей" };
for (int i = 0; i < count; i++)
{
students[i] = new Student
{
LastName = lastNames[rand.Next(lastNames.Length)],
FirstName = firstNames[rand.Next(firstNames.Length)],
ClassNumber = rand.Next(9, 12),
Grades = new[] { rand.Next(3, 6), rand.Next(3, 6), rand.Next(3, 6) }
};
}
return students;
}
static Student[] ManualInputStudents()
{
int count = 0;
while (true)
{
Console.Write("Введите количество учащихся: ");
if (int.TryParse(Console.ReadLine(), out count) && count > 0)
{
break;
}
Console.WriteLine("Ошибка: введите положительное число.");
}
Student[] students = new Student[count];
for (int i = 0; i < count; i++)
{
Console.WriteLine($"\nУчащийся {i + 1}:");
Console.Write("Фамилия: ");
string lastName = Console.ReadLine();
Console.Write("Имя: ");
string firstName = Console.ReadLine();
int classNumber = 0;
while (true)
{
Console.Write("Номер класса (9-11): ");
if (int.TryParse(Console.ReadLine(), out classNumber) && classNumber >= 9 && classNumber <= 11)
{
break;
}
Console.WriteLine("Ошибка: введите число от 9 до 11.");
}
int[] grades = new int[3];
for (int j = 0; j < 3; j++)
{
while (true)
{
Console.Write($"Оценка по предмету {j + 1} (1-5): ");
if (int.TryParse(Console.ReadLine(), out grades[j]) && grades[j] >= 1 && grades[j] <= 5)
{
break;
}
Console.WriteLine("Ошибка: введите число от 1 до 5.");
}
}
students[i] = new Student
{
LastName = lastName,
FirstName = firstName,
ClassNumber = classNumber,
Grades = grades
};
}
return students;
}
static Student[] GetGoodStudents(Student[] students, int targetClass)
{
int goodCount = 0;
foreach (var student in students)
{
if (student.ClassNumber == targetClass)
{
bool isGood = true;
foreach (var grade in student.Grades)
{
if (grade < 4)
{
isGood = false;
break;
}
}
if (isGood) goodCount++;
}
}
Student[] goodStudents = new Student[goodCount];
int index = 0;
foreach (var student in students)
{
if (student.ClassNumber == targetClass)
{
bool isGood = true;
foreach (var grade in student.Grades)
{
if (grade < 4)
{
isGood = false;
break;
}
}
if (isGood)
{
goodStudents[index] = student;
index++;
}
}
}
return goodStudents;
}
}
Результат работы программы представлен на рисунке 1.33.
Р
исунок
1.33 —
Результат работы программы задания 5
Результат работы программы при неправильном значении представлено на рисунке 1.34.
Рисунок 1.34 — Результат работы программы задания 5
Код
имеет общую
временную
сложность программы — O(n),
где n —
количество студентов.
