Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
minor changes
  • Loading branch information
flovnes authored Apr 30, 2024
2 parents 43be58c + f053a94 commit 3a691f9
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 79 deletions.
46 changes: 23 additions & 23 deletions data_new.txt
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
Атаманенко Бодя Степанович Ж 02.01.1996 5 3 5 4319
Атаманенко Саша Степанович F 23.06.1996 2 1 - 1285
Атаманенко Софія Степанович Ж 26.11.2004 4 5 4 1630
Конопленко Бодя Степанович Ж 04.01.1998 2 1 1 3078
Атамась Софія Сергійович Ж 02.08.2000 3 2 2 2506
Katleho Ömür Jensen F 07.05.2004 2 3 3 2103
Narcisse Céleste Albani F 24.08.1999 4 5 3 4139
Атаманенко Софія Степанович Ж 06.03.2001 4 1 - 1918
Єрмоленко Софія Степанович Ж 21.03.1997 4 5 3 1365
Єрмоленко Ніка Сергійович F 02.01.2004 - 1 3 3514
Атамась Саша Сергійович F 01.11.1996 2 5 3 3451
Конопленко Саша Георгійович F 11.08.2003 1 1 5 2374
Конопленко Бодя Романович Ч 12.06.1998 4 4 5 3538
Атамась Бодя Сергійович M 21.07.2001 2 1 3 2401
Єрмоленко Софія Степанівна F 09.12.1998 2 4 - 2311
Конопленко Софія Сергіївна F 08.07.2002 5 3 - 1653
Єрмоленко Ніка Георгіївна F 19.09.2000 4 5 2 2422
Єрмоленко Бодя Романович M 17.01.1996 - 5 3 3266
Конопленко Софія Георгіївна F 24.12.2002 5 2 5 4241
Єрмоленко Софія Сергіївна F 16.03.2005 1 3 5 1386
Атаманенко Софія Романівна F 06.03.2001 5 2 2 1305
Конопленко Ніка Георгіївна F 09.10.1997 3 - 5 2870
Атаманенко Саша Сергійович M 01.06.1998 1 4 5 1332
Конопленко Бодя Степанович M 10.09.1999 3 5 3 3218
Єрмоленко Софія Романівна F 17.05.2004 2 2 2 2624
Конопленко Саша Романович M 05.05.1996 1 1 5 3311
Атаманенко Ніка Сергіївна F 13.05.2001 2 1 5 4142
Конопленко Бодя Сергійович M 15.10.1995 - 1 4 2382
Атамась Софія Романівна F 10.09.1996 2 5 - 1659
Атамась Софія Георгіївна F 09.02.2005 - 3 - 3252
Атаманенко Бодя Романович M 13.01.2001 - 2 1 3984
Атамась Ніка Георгіївна F 23.05.2000 5 3 5 3963
Атамась Бодя Степанович M 21.11.1998 - 3 5 1443
Конопленко Саша Георгійович M 23.05.2004 2 4 1 4011
Aytaç Nzinga Nevin F 12.11.1999 4 5 4 3392
Атаманенко Ніка Сергійович F 04.02.2004 4 1 3 3593
Єрмоленко Софія Степанович F 14.07.1996 4 5 4 2592
Атаманенко Софія Сергійович Ч 01.02.1996 2 4 1 4157
Claude Ange-Giusi Leoni F 02.03.2004 - 1 _ 1514
Єрмоленко Ніка Георгійович F 19.01.1999 3 5 2 2346
Атаманенко Софія Степанович M 28.01.2003 - 4 1 1473
Атамась Саша Георгійович Ч 20.08.1998 - 5 1 2504
Єрмоленко Саша Георгійович Ч 19.09.1995 1 4 2 1599
Єрмоленко Ніка Степанович Ч 26.11.2001 1 - 4 2074
Katleho Ömür Jensen M 07.05.2004 2 3 3 2103
Narcisse Céleste Albani F 24.08.1999 4 5 3 4139
Claude Ange-Giusi Leoni M 02.03.2004 - 1 - 1514
16 changes: 11 additions & 5 deletions gen.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
import random

surnames = ['Атаманенко', 'Конопленко', 'Атамась', 'Єрмоленко']
firstnames = ['Бодя', 'Саша', 'Софія', 'Ніка']
patronymics = ['Сергійович', 'Романович', 'Степанович', 'Георгійович']
sexes = ['M', 'F', 'Ж', 'Ч']
female_firstnames = ['Софія', 'Ніка']
male_firstnames = ['Бодя', 'Саша']
male_patronymics = ['Сергійович', 'Романович', 'Степанович', 'Георгійович']
female_patronymics = ['Сергіївна', 'Романівна', 'Степанівна', 'Георгіївна']
sexes = ['F', 'M']
marks = [1, 2, 3, 4, 5, '-']
scholarships = list(range(1234, 4322))

lines = []
for _ in range(20):
surname = random.choice(surnames)
firstname = random.choice(firstnames)
patronymic = random.choice(patronymics)
sex = random.choice(sexes)
if sex == 'F':
firstname = random.choice(female_firstnames)
patronymic = random.choice(female_patronymics)
else:
firstname = random.choice(male_firstnames)
patronymic = random.choice(male_patronymics)
date_of_birth = f"{random.randint(1, 28):02d}.{random.randint(1, 12):02d}.{random.randint(1995, 2005)}"
mark1 = random.choice(marks)
mark2 = random.choice(marks)
Expand Down
46 changes: 23 additions & 23 deletions input.txt
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
Атаманенко Бодя Степанович Ж 02.01.1996 5 3 5 4319
Атаманенко Саша Степанович F 23.06.1996 2 1 - 1285
Атаманенко Софія Степанович Ж 26.11.2004 4 5 4 1630
Конопленко Бодя Степанович Ж 04.01.1998 2 1 1 3078
Атамась Софія Сергійович Ж 02.08.2000 3 2 2 2506
Katleho Ömür Jensen F 07.05.2004 2 3 3 2103
Narcisse Céleste Albani F 24.08.1999 4 5 3 4139
Атаманенко Софія Степанович Ж 06.03.2001 4 1 - 1918
Єрмоленко Софія Степанович Ж 21.03.1997 4 5 3 1365
Єрмоленко Ніка Сергійович F 02.01.2004 - 1 3 3514
Атамась Саша Сергійович F 01.11.1996 2 5 3 3451
Конопленко Саша Георгійович F 11.08.2003 1 1 5 2374
Конопленко Бодя Романович Ч 12.06.1998 4 4 5 3538
Атамась Бодя Сергійович M 21.07.2001 2 1 3 2401
Єрмоленко Софія Степанівна F 09.12.1998 2 4 - 2311
Конопленко Софія Сергіївна F 08.07.2002 5 3 - 1653
Єрмоленко Ніка Георгіївна F 19.09.2000 4 5 2 2422
Єрмоленко Бодя Романович M 17.01.1996 - 5 3 3266
Конопленко Софія Георгіївна F 24.12.2002 5 2 5 4241
Єрмоленко Софія Сергіївна F 16.03.2005 1 3 5 1386
Атаманенко Софія Романівна F 06.03.2001 5 2 2 1305
Конопленко Ніка Георгіївна F 09.10.1997 3 - 5 2870
Атаманенко Саша Сергійович M 01.06.1998 1 4 5 1332
Конопленко Бодя Степанович M 10.09.1999 3 5 3 3218
Єрмоленко Софія Романівна F 17.05.2004 2 2 2 2624
Конопленко Саша Романович M 05.05.1996 1 1 5 3311
Атаманенко Ніка Сергіївна F 13.05.2001 2 1 5 4142
Конопленко Бодя Сергійович M 15.10.1995 - 1 4 2382
Атамась Софія Романівна F 10.09.1996 2 5 - 1659
Атамась Софія Георгіївна F 06.02.2001 - 3 - 3252
Атаманенко Бодя Романович M 13.01.2001 - 2 1 3984
Атамась Ніка Георгіївна F 23.05.2000 5 3 5 3963
Атамась Бодя Степанович M 21.11.1998 - 3 5 1443
Конопленко Саша Георгійович M 23.05.2004 2 4 1 4011
Aytaç Nzinga Nevin F 12.11.1999 4 5 4 3392
Атаманенко Ніка Сергійович F 04.02.2004 4 1 3 3593
Єрмоленко Софія Степанович F 14.07.1996 4 5 4 2592
Атаманенко Софія Сергійович Ч 01.02.1996 2 4 1 4157
Claude Ange-Giusi Leoni F 02.03.2004 - 1 _ 1514
Єрмоленко Ніка Георгійович F 19.01.1999 3 5 2 2346
Атаманенко Софія Степанович M 28.01.2003 - 4 1 1473
Атамась Саша Георгійович Ч 20.08.1998 - 5 1 2504
Єрмоленко Саша Георгійович Ч 19.09.1995 1 4 2 1599
Єрмоленко Ніка Степанович Ч 26.11.2001 1 - 4 2074
Katleho Ömür Jensen M 07.05.2004 2 3 3 2103
Narcisse Céleste Albani F 24.08.1999 4 5 3 4139
Claude Ange-Giusi Leoni M 02.03.2004 - 1 - 1514
8 changes: 7 additions & 1 deletion src/main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ static void RunMenu(List<Student> students)
int match;
do
{
Console.Write("\n<- Вихід [0]\nВиконати варіант 9 студента Попов Антон [1]\nВиконати варіант 10 студента Дмитро Киба [2]\nВиконати варіант 24 студента Волощук Влад [3]\nНомер > ");
Console.Write("\n<- Вихід [0]\nВиконати варіант 9 студента Попов Антон [1]\nВиконати варіант 10 студента Дмитро Киба [2]\nВиконати варіант 24 студента Волощук Влад [3]\nВиконати варіант 26 [4]\nВиконати варіант 27 [5]\nНомер > ");
string? s = Console.ReadLine();
if (int.TryParse(s, out match))
{
Expand All @@ -37,6 +37,12 @@ static void RunMenu(List<Student> students)
case 3:
Var24(students);
break;
case 4:
Var26(students);
break;
case 5:
Var27(students);
break;
case 0:
break;
default:
Expand Down
124 changes: 110 additions & 14 deletions src/methods.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using System.Security.Cryptography.X509Certificates;

namespace struct_lab_student
{
public partial class Program
Expand All @@ -11,31 +13,120 @@ public static void Var9(List<Student> students)
public static void Var10(List<Student> students)
{
Console.WriteLine("\nСписок студентів з відмінними оцінками з фізики:");
foreach (var student in Filter(students, IsTalentedPhysician))
Console.WriteLine($"{student.surName} {student.firstName} {student.patronymic} {EvalAverage(student):0.0} {student.scholarship}");
foreach (var student in students.Where(IsTalentedPhysician))
Console.WriteLine($"{student.surName} {student.firstName} {student.patronymic} {Average(student):0.0} {student.scholarship}");
}


public static void Var24(List<Student> students)
{
Console.WriteLine("\nСписок студентів, які народились влітку:");
var summer_kids = Filter(students, IsBornInSummer);
foreach (var dude in summer_kids)
var summer_kids = students.Where(IsBornInSummer);
foreach (var student in summer_kids)
Console.WriteLine($"\r{student.surName} {student.firstName} {Average(student):0.0}");
}

public static void Var26(List<Student> students)
{
var maleStudents = students.Where(s => IsMale(s));

if (!maleStudents.Any())
{
Console.WriteLine("Немає студентів чоловічої статі.");
return;
}

double maleSum = 0.0;

foreach (var student in maleStudents)
maleSum += Average(student);

double maleAverage = maleSum / maleStudents.Count();

var result = students.Where(s => Average(s) > maleAverage && IsFemale(s));

if (!result.Any())
{
Console.WriteLine("Немає студенток, які задовольняють умову.");
return;
}

foreach (var student in result)
Console.WriteLine($"\r{student.surName} {student.firstName} {student.patronymic}");
}

public static void Var27(List<Student> students)
{
var studentsByDayAndYear = GroupStudentsByDayAndYear(students);
var studentsByDayOnly = GroupStudentsByDayOnly(students);

Console.WriteLine("\nСтуденти, народжені в один день та рік:");
foreach (var group in studentsByDayAndYear)
{
if (group.Students.Count > 1)
{
Console.WriteLine($"Дата: {group.Date}");
foreach (var student in group.Students)
{
Console.WriteLine($"\t{student.surName} {student.firstName} {student.patronymic}");
}
}
}

Console.WriteLine($"\r{dude.surName} {dude.firstName} {EvalAverage(dude):0.0}");
Console.WriteLine("\nСтуденти, народжені в один день (різні роки):");
foreach (var group in studentsByDayOnly)
{
if (group.Students.Count > 1)
{
Console.WriteLine($"Дата: {group.Day}");
foreach (var student in group.Students)
{
Console.WriteLine($"\t{student.surName} {student.firstName} {student.patronymic} ({student.dateOfBirth[6..]})");
}
}
}
}

private static List<(string Date, List<Student> Students)> GroupStudentsByDayAndYear(List<Student> students)
{
var groups = new List<(string Date, List<Student> Students)>();

var groupedStudents = students.GroupBy(s => s.dateOfBirth[..2] + " " + s.dateOfBirth[6..]); // Concatenate day and year

foreach (var group in groupedStudents)
{
groups.Add((group.Key, group.ToList()));
}

return groups;
}


private static List<(string Day, List<Student> Students)> GroupStudentsByDayOnly(List<Student> students)
{
var groups = new List<(string Day, List<Student> Students)>();

var groupedStudents = students.GroupBy(s => s.dateOfBirth[..2]); // Extract day

foreach (var group in groupedStudents)
{
groups.Add((group.Key, group.ToList()));
}

return groups;
}

private static List<Student> ProcessData(List<Student> students)
{
List<Student> processedStudents = [];
foreach (var student in students)
{
var newStudent = student;
processedStudents.Add(newStudent);
newStudent.sex = (student.sex == 'M' || student.sex == 'Ч') ? 'Ч' : (student.sex == 'F' || student.sex == 'Ж') ? 'Ж' : '?';
newStudent.sex = IsMale(student) ? 'Ч' : IsFemale(student) ? 'Ж' : '?';
}

return processedStudents;
}

Expand All @@ -52,11 +143,6 @@ private static void WriteData(List<Student> students, string filename)
}
}
}

public static IEnumerable<Student> Filter(List<Student> students, Func<Student, bool> Condition)
{
return students.Where(Condition);
}

public static bool IsBornInSummer(Student student)
{
Expand All @@ -69,11 +155,21 @@ public static bool IsTalentedPhysician(Student student)
return student.Marks[1] == '5';
}

public static double EvalAverage(Student student)
public static double Average(Student student)
{
double sum = 0;
foreach (var c in student.Marks) sum += (c == '-') ? 2 : double.Parse(c.ToString());
return Math.Round(sum / 3, 1);
}

private static bool IsFemale(Student student)
{
return student.sex == 'F' || student.sex == 'Ж';
}

private static bool IsMale(Student student)
{
return student.sex == 'M' || student.sex == 'Ч';
}
}
}
19 changes: 7 additions & 12 deletions src/student.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,7 @@ public struct Student
public string dateOfBirth;
public char[] Marks;
public int scholarship;

// debug
public override readonly string ToString()
{
return surName + " " + firstName + " " + patronymic + " " + dateOfBirth;
}

public Student(string line)
{
string[] fields = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
Expand All @@ -24,12 +19,12 @@ public Student(string line)
sex = char.Parse(fields[3]);
dateOfBirth = fields[4];
Marks = [
//math
char.Parse(fields[5]),
//physics
char.Parse(fields[6]),
// computer science
char.Parse(fields[7])
//math
char.Parse(fields[5]),
//physics
char.Parse(fields[6]),
// computer science
char.Parse(fields[7])
];
scholarship = int.Parse(fields[8]);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public static void Student_EvalAverage_ReturnDouble()
double[] expectedAverages = [3.7, 2.3, 3.0];
foreach (var (student, average) in students.Zip(expectedAverages))
{
Assert.Equal(average, Program.EvalAverage(student));
Assert.Equal(average, Program.Average(student));
counter++;
}
}
Expand Down

0 comments on commit 3a691f9

Please sign in to comment.