Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8

Определить школу, средняя оценка учеников которой оказалась самой высокой

10.12.2017, 23:57. Показов 2352. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, друзья!

Уже который час сижу над решением простейшей задачи и никак не могу найти его, поэтому прошу Вашей помощи.
Полностью задача звучит следующим образом:
"Проводится олимпиада школьников по математике, в которой принимают участие школьники из К школ города. Имеются следующие данные: фамилия, номер школы, полученная оценка. Определить школу, средняя оценка учеников которой оказалась самой высокой, вывести фамилии победителей олимпиады. Выполнить сортировку списка."

Решение задачи выполнено с помощью структуры. Отсортирована с помощью шейкерной сортировки (все тоже по условию). Победителей также выводит, но последнее, как вывести школу, я не могу придумать или найти.

Заранее спасибо!

Как примерно выглядит код.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 struct student
        {
            public string name;
            public int school;
            public int mark;    //max = 100
        }
static void Main(string[] args)
        {
            student[] studArray = new student[5];
 
            studArray[0].name = "Vsevolod";
            studArray[0].school = 72;
            studArray[0].mark = 83;
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2017, 23:57
Ответы с готовыми решениями:

Матрица: вывести название самой высокой вершины мира, самой высокой вершины заданной страны
Дан массив данных, в котором хранятся данные о вершинах гор: название, высота, страна местонахождения. Вывести на экран название самой...

Определить сколько в декабре было дней с самой низкой и с самой высокой температурой
В массиве хранится информация о среднедневной температуре декабря. Определить сколько в декабре было дней с самой низкой и с самой высокой...

Вывести фамилии учеников, у которых средняя оценка выше средней по классу
Известны оценки каждого из 30 учеников по пяти предметам. Определить среднюю оценку каждого ученика и всего класса. Вывести фамилии...

17
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
11.12.2017, 02:11
Цитата Сообщение от Canican Посмотреть сообщение
Решение задачи выполнено с помощью структуры. Отсортирована с помощью шейкерной сортировки (все тоже по условию).
и, соббсно где?!
отсюда и плясать надо
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
11.12.2017, 02:44

Не по теме:

Цитата Сообщение от Canican Посмотреть сообщение
Как примерно выглядит код.
Как будто мы программный код никогда не видели...


Раз победителей уже вывели, то дело за малым.
Находим индекс массива с победителями, а затем выводим поле school у этого массива.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.12.2017, 05:47
Цитата Сообщение от Canican Посмотреть сообщение
Как примерно выглядит код.
Выглядит он, на мой взгляд, не очень.
Первое: для студентов у вас есть свой тип, а вот для школ нет. Почему?
Второе: не критично, но зачем использовать структуры? Обычный класс тут уместнее смотрелся бы.
Ну и сама суть: как сказано выше, определите тип для школы (School), а в нем - коллекцию студентов (List<Student>).
Тогда вся ваша проблема сведется к банальному запросу LINQ.
0
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8
11.12.2017, 08:58  [ТС]
Первое: почему для школ не выделил отдельный тип? Я думал, раз мы записываем школу как отдельное поле в структуре студент, то проблем с этим не должно быть.
Второе: структуры - это не моя прихоть, а преподавателя.
Третье: спасибо
Можете, пожалуйста, привести пример, как это должно выглядеть. Прочитав это, не до конца понимаю, что Вы имели в виду.
Цитата Сообщение от insite2012 Посмотреть сообщение
определите тип для школы (School), а в нем - коллекцию студентов (List<Student>).
0
Эксперт .NET
 Аватар для Usaga
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
11.12.2017, 09:02
Canican,

C#
1
2
3
4
5
class School
{
    public List<Student> Students { get; set; }
    // Можно дополнительные данные добавить: название школы, адрес, и т.д.
}
0
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8
11.12.2017, 09:12  [ТС]
Спасибо за ответ, но вопрос остается прежним. Как мне это поможет, если мне надо решить задачу с использованием структур. Или мне надо оставить структуру студент такой как есть и добавить этот класс для школы?
0
Эксперт .NET
 Аватар для Usaga
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
11.12.2017, 09:21
Canican, замените класс структурой. Для вас разницы не будет (она есть, но для вас некритична).

Вся разница - в порядке в коде. Для каждой сущности свой класс\структура. Всё ясно и наглядно.
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
11.12.2017, 09:42
Usaga, сорри за тупость, у мну непонятки. Почему нельзя найти индекс массива структуры с победителями, а потом вывести поле school у этого массива?
0
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8
11.12.2017, 09:47  [ТС]
Потому что надо найти максимальное среднее число по школе, т.е. это необязательно будут победителя. А так индекс массива структуры с победителями найден.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Для каждой сущности свой класс\структура.
Т.е. это будет как-то так выглядеть?
C#
1
2
3
4
5
6
7
8
9
10
struct student
        {
            public string name;
            public int mark;    //max = 100
        }
 
struct school
        {
            List<student> Students { get; set; }
        }
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
11.12.2017, 09:53
Canican, ну Вы ведь сказали, что победителя уже нашли...

Добавлено через 1 минуту
А, суть уловил.

Добавлено через 45 секунд
Тогда да, наверное, придётся отдельную структуру для школы пилить..
0
Эксперт .NET
 Аватар для Usaga
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
11.12.2017, 09:54
Canican, примерно так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Student
{
    public string Name { get; set; }
    private int _mark;
    public int Mark { 
        get { return _mark; }
        set { if (value > 100) throw new Exception("Mark should be no more than 100"); _mark = value; } 
    }
}
 
struct School
{
    List<student> Students { get; set; }
}
Но я настоятельно рекомендую использовать КЛАССЫ, а не структуры, так как с ними есть один нюанс - они всегда передаются по значению. Без понимания того, что это значит, вы походите по полю усеянному граблями.
1
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8
11.12.2017, 09:54  [ТС]
Правильно. Победителей нашел. Но следующая задача - найти школу, средняя оценка учеников которой оказалась самой высокой
0
Эксперт .NET
 Аватар для Usaga
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
11.12.2017, 09:57
Цитата Сообщение от Canican Посмотреть сообщение
структуры - это не моя прихоть, а преподавателя.
Я более чем уверен, что препод имел в виду выделение сущности в коде в виде структурированного объекта, а не в буквальном смысле структуру.

Добавлено через 1 минуту
Цитата Сообщение от Canican Посмотреть сообщение
Победителей нашел. Но следующая задача - найти школу, средняя оценка учеников которой оказалась самой высокой
Перебирать коллекцию школ, считать среднюю оценку для каждой, взять ту, у которой данный показатель максимален. Можно сделать вручную, можно использовать LINQ.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.12.2017, 10:30
Canican, при правильном подходе поиск нужной школы занимает всего одну строку кода.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication6 {
    class Program {
        static void Main(string[] args) {
            School[] schools = { new School("ONE"), new School("TWO"), new School("THREE") };
            schools[0].Students.AddRange(new[] { new Student(3), new Student(3), new Student(4), new Student(5) });
            schools[1].Students.AddRange(new[] { new Student(3), new Student(3), new Student(3), new Student(5) });
            schools[2].Students.AddRange(new[] { new Student(3), new Student(4), new Student(4), new Student(5) });
 
            var result = schools.OrderBy(sc => sc.Students.Sum(s => s.Mark) / sc.Students.Count).Last();
        }
    }
    public class School {
        public string Name { get; set; }
        public School(string name) {
            Name = name;
        }
        private List<Student> _students = new List<Student>();
        public List<Student> Students {
            get { return _students; }
        }
    }
    public class Student {
        public Student(int mark) {
            Mark = mark;
        }
        public string Name { get; set; }
        public int Mark { get; set; }
    }
}
0
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8
11.12.2017, 10:44  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Я более чем уверен, что препод имел в виду выделение сущности в коде в виде структурированного объекта, а не в буквальном смысле структуру.
Нет, в данном случае это буквально. Следующая задача уже на классы.

Можно еще вопрос:
Как заносить данные в эти структуры? Изначально я делал так:
C#
1
2
3
4
5
student[] studArray = new student[5];
 
studArray[0].name = "Vsevolod";
studArray[0].school = 72;
studArray[0].mark = 83;
0
Эксперт .NET
 Аватар для Usaga
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
11.12.2017, 10:47
Цитата Сообщение от Canican Посмотреть сообщение
Как заносить данные в эти структуры? Изначально я делал так:
Вот поэтому я и сказал, что использование структур подразумевает некоторое количество понимания.

Добавлено через 43 секунды
Откройте любой учебник по C# почитайте про значимые и ссылочные типы. Это важно.
0
0 / 0 / 0
Регистрация: 20.06.2016
Сообщений: 8
11.12.2017, 10:50  [ТС]
Вас понял. Пошел углубляться в литературу.

Большое всем спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2017, 10:50
Помогаю со студенческими работами здесь

Вывести фамилии учеников , у которых средняя оценка выше средней оценки по классу .
Известны оценки каждого из 20 учеников класса по 12 предметам . Определить среднюю оценку каждого ученика и всего класса . Вывести фамилии...

Определить фамилию самой высокой студентки
Информация о студенте состоит из фамилии, пола э и роста. Задана информация о 5 студентах. Определить фамилию самой высокой студентки.

Структуры. Определить имя самой высокой девочки в группе
С помощью структуры описать данные на группу из семи детей, указав их имя , пол и рост.Определить имя самой высокой девочки в группе. Вот...

Определить количество учеников, оценка которых меньше средней оценки по классу
В массиве записаны оценки по информатике 22 учеников класса. Определить количество учеников, оценка которых меньше средней оценки по...

Определить количество учеников, оценка которых меньше средней оценки по классу
в массиве записаны оценки по информатике 22 учеников класса. Определить количество учеников, оценка которых меньше средней оценки по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru