Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для frostromix
3 / 3 / 1
Регистрация: 13.12.2011
Сообщений: 70

Определить лучшую по средней оценке группу

03.01.2012, 23:54. Показов 3958. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Три группы студентов, в каждой из которых 20 человек, в сессию сдавали по 3 экзамена. Сведения об оценках каждой группы хранятся в двумерных массивах. Определить лучшую по средней оценке группу.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2012, 23:54
Ответы с готовыми решениями:

Задача о средней оценке
Здравствуйте. Помогите пожалуйста решить задачу: В соревнованиях по фигурному катанию N судей независимо выставляют оценки спортсмену....

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

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

9
24 / 24 / 4
Регистрация: 07.02.2011
Сообщений: 163
04.01.2012, 13:22
Для первой группы:
Считаешь средний балл по каждому студенту (на основе оценок за экзамены - сумма всех оценок для каждого из студентов/3), потом на основе средних баллов по каждому студенту считаешь средний балл по группе (сумма всех средних баллов студентов за экзамены/20).

Для второй и третьей то же самое. Далее сравниваешь три получившиеся оценки между собой.
Вроде так
0
 Аватар для frostromix
3 / 3 / 1
Регистрация: 13.12.2011
Сообщений: 70
04.01.2012, 15:40  [ТС]
спасибо, конечно, большое, но было бы не плохо если бы ещё и программу написали. С одномерными массивами всё понятно, а тут ерунда какая то
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
04.01.2012, 16:40
Вот код
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//Три группы студентов, в каждой из которых 20 человек, в сессию сдавали по 3 экзамена. 
//Сведения об оценках каждой группы хранятся в двумерных массивах. Определить лучшую по 
//средней оценке группу. 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] students1 = new int[20, 3];
            int[,] students2 = new int[20, 3];
            int[,] students3 = new int[20, 3];
            long sred=0;
            Random rnd = new Random(DateTime.UtcNow.Millisecond);
            // Заполняем 1 массив
            for (int i = 0; i < students1.GetLength(0); i++)
            {
                for (int j = 0; j < students1.GetLength(1); j++)
                {
                    students1[i, j] = rnd.Next(3, 6);
                }
            }
            // Заполняем 2 массив
            for (int i = 0; i < students2.GetLength(0); i++)
            {
                for (int j = 0; j < students2.GetLength(1); j++)
                {
                    students2[i, j] = rnd.Next(3, 6);
                }
            }
            // Заполняем 3 массив
            for (int i = 0; i < students3.GetLength(0); i++)
            {
                for (int j = 0; j < students3.GetLength(1); j++)
                {
                    students3[i, j] = rnd.Next(3, 6);
                }
            }
 
            double [] GroupSred = new double[3]; // массив оценок каждой группы
            // Считаем оценки по первой группе
            for (int i = 0; i < students1.GetLength(0); i++)
            {
                sred = 0;
                for (int j = 0; j < students1.GetLength(1); j++)
                {
                    sred += students1[i, j];// Суммируем оценки за экзамены
                }
                GroupSred[0] += sred / 3.0; // Средняя ученика по экзаменам
            }
            GroupSred[0] = GroupSred[0] / 20.0;// Средняя всей группы
 
            // Считаем оценки по второй группе
            for (int i = 0; i < students2.GetLength(0); i++)
            {
                sred = 0;
                for (int j = 0; j < students2.GetLength(1); j++)
                {
                    sred += students2[i, j];// Суммируем оценки за экзамены
                }
                GroupSred[1] += sred / 3.0;// Средняя ученика по экзаменам
            }
            GroupSred[1] = GroupSred[1] / 20.0;// Средняя всей группы
 
            // Считаем оценки по третьей группе
            for (int i = 0; i < students3.GetLength(0); i++)
            {
                sred = 0;
                for (int j = 0; j < students3.GetLength(1); j++)
                {
                    sred += students3[i, j]; // Суммируем оценки за экзамены
                }
                GroupSred[2] += sred / 3.0;// Средняя ученика по экзаменам
            }
            GroupSred[2] = GroupSred[2] / 20.0;// Средняя всей группы
 
            //выводим на экран без сортировки
            for (int i = 0; i < GroupSred.Length; i++)
            {
                if (GroupSred.Max() == GroupSred[i])
                Console.WriteLine("ЛУЧШАЯ ГРУППА {0} \t{1}\n", i+1, GroupSred[i]);
            }
 
            for (int i = 0; i < GroupSred.Length; i++)
            {
                    Console.WriteLine("Группа {0} \t{1}", i+1, GroupSred[i]);
            }
        }
    }
}


Можно реализовать метод, который бы вычислял среднюю по каждому массиву и там зарыть большую часть этого кода. И еще метод для заполнения массивов. Только нужно небольшой класс накидать и там спрятать все это. Будет опрятно.
1
 Аватар для karpov.
30 / 30 / 4
Регистрация: 04.01.2012
Сообщений: 135
04.01.2012, 16:45
Как-то так может?
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
35
 static void Main(string[] args)
        {
            //сделал по 6 студентов. каждая строчка оценка студента за каждый экзамен.
            int[,] group1 = { { 3, 4, 3 }, { 4, 4, 4 }, { 5, 3, 3 }, { 3, 4, 2 }, { 4, 3, 4 }, { 4, 4, 5 } }; 
            int[,] group2 = { { 5, 5, 5 }, { 4, 4, 4 }, { 3, 3, 3 }, { 3, 4, 2 }, { 4, 5, 4 }, { 2, 4, 5 } };
            int[,] group3 = { { 3, 2, 3 }, { 4, 2, 4 }, { 4, 3, 3 }, { 3, 4, 4 }, { 4, 4, 4 }, { 3, 4, 3 } };
            double sr1 = 0;
            double sr2 = 0;
            double sr3 = 0;
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    sr1 = sr1 + group1[i, j];
                }
            }
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    sr2 = sr2 + group2[i, j];
                }
            }
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    sr3 = sr3 + group3[i, j];
                }
            }
 
            Console.WriteLine(sr1 / 18); //18 = количество студентов умножить на количество экзаменов
            Console.WriteLine(sr2 / 18);
            Console.WriteLine(sr3 / 18);
        }
0
 Аватар для frostromix
3 / 3 / 1
Регистрация: 13.12.2011
Сообщений: 70
04.01.2012, 17:44  [ТС]
Спасибо) Возьму для примера 1 код, что нибудь сделаю... Мне просто ещё в общем виде нужно, ну это я уже и сам справлюсь)))
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
04.01.2012, 19:01
Цитата Сообщение от ibmpc Посмотреть сообщение
Можно реализовать метод, который бы вычислял среднюю по каждому массиву и там зарыть большую часть этого кода. И еще метод для заполнения массивов. Только нужно небольшой класс накидать и там спрятать все это. Будет опрятно.
Кстати когда писал сей коммент была идея реализовать расширения для двухмерных массивов. Оказывается вполне прокатывает.
1
 Аватар для frostromix
3 / 3 / 1
Регистрация: 13.12.2011
Сообщений: 70
05.01.2012, 02:22  [ТС]
Цитата Сообщение от ibmpc Посмотреть сообщение
Кстати когда писал сей коммент была идея реализовать расширения для двухмерных массивов. Оказывается вполне прокатывает.
не, я такого вообще незнаю

Добавлено через 5 часов 45 минут
Вот, переделал первый код, громоздко, но работает прекрасно)) спасибо

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Console.WriteLine("Заполните данные для ПЕРВОЙ группы:");
                    Console.Write("Студент {0}-ый, оценка за {1} экзамен: ", i + 1, j + 1);
                    students1[i, j] = int.Parse(Console.ReadLine());
                    Console.Clear();
                }
            for (int i = 0; i < n; i++)
                for (int j = 0; j < N; j++)
                {
                    Console.WriteLine("Заполните данные для ВТОРОЙ группы:");
                    Console.Write("Студент {0}-ый, оценка за {1} экзамен: ", i + 1, j + 1);
                    students2[i, j] = int.Parse(Console.ReadLine());
                    Console.Clear();
                }
            for (int i = 0; i < n; i++)
                for (int j = 0; j < N; j++)
                {
                    Console.WriteLine("Заполните данные для ТРЕТЬЕЙ группы:");
                    Console.Write("Студент {0}-ый, оценка за {1} экзамен: ", i + 1, j + 1);
                    students3[i, j] = int.Parse(Console.ReadLine());
                    Console.Clear();
                }
            double[] GroupSred = new double[n*N];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    sred1 += students1[i, j];
                }
            }
            GroupSred[0] = sred1 / (n*N);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    sred2 += students2[i, j];
                }
            }
            GroupSred[1] = sred2 / (n * N);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    sred3 += students3[i, j];
                }
            }
            GroupSred[2] = sred3 / (n * N);
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine("Группа {0} - средняя оценка: {1:.####}", i + 1, GroupSred[i]);
            }
            for (int i = 0; i < 3; i++)
            {
                if (GroupSred.Max() == GroupSred[i])
                    Console.WriteLine("Лучшая группа {0} - средняя оценка: {1:.####}\n", i + 1, GroupSred[i]);
            }
            Console.ReadLine();
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
05.01.2012, 19:51
Компактный вариант с использованием библиотечки, можно просто еще один cs фаил в проект добавить.
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
35
36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Extension.IntArray;
//Три группы студентов, в каждой из которых 20 человек, в сессию сдавали по 3 экзамена. 
//Сведения об оценках каждой группы хранятся в двумерных массивах. Определить лучшую по 
//средней оценке группу. 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] students1 = new int[20, 3];
            int[,] students2 = new int[20, 3];
            int[,] students3 = new int[25, 2];// Кол-во студентов и оценок может быть любым.
 
            // Заполняем 1 массив
            students1.FillRnd(3, 6);
            // Заполняем 2 массив
            students2.FillRnd(3, 6);
            // Заполняем 3 массив
            students3.FillRnd(3, 6);
            //Вывод на консоль
            Console.WriteLine("Группа 1: \t{0} балла.", Math.Round(students1.SredArif(),2) );
            Console.WriteLine("Группа 2: \t{0} балла.", Math.Round(students2.SredArif(),2));
            Console.WriteLine("Группа 3: \t{0} балла.", Math.Round(students3.SredArif(),2));
 
            Console.WriteLine("\nЛучшая оценка: \t{0} балла.",
                (new double[] { Math.Round(students1.SredArif(),2), Math.Round(students2.SredArif(),2)
                    , Math.Round(students3.SredArif(),2) }).Max<double>()                
                );
        }
    }
}




Код библиотечки (реализация расширений)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//Библиотека  расширений созданная для приминения с двухмерными массивами int[,]
//Содержит расширения для заполнения всего массива случ. числами на основе Random.Next
//и заполнения одним числом.
// Расширение для вычисления сред. ариф. чисел в массиве создано 
// для вычисления лучшего студента.(Первая размерность их кол-во, вторая - оценки) 
namespace Extension.IntArray
{
    public static class ExeptionForArray
    {
        static Random rnd = new Random(DateTime.UtcNow.Millisecond);
        /// <summary>Заполняет массив случайными числами на основе Random.Next.</summary>
        public static void FillRnd(this int[,] value)
        {
            if (value == null) return;
            for (int i = 0; i < value.GetLength(0); i++)
            {
                for (int j = 0; j < value.GetLength(1); j++)
                {
                    value[i, j] = rnd.Next();
                }
            }
        }
        /// <summary>Заполняет массив случайными числами на основе Random.Next.</summary>
        /// <param name="UpBound">Верхний не включенный придел</param>
        public static void FillRnd(this int[,] value,int UpBound)
        {
            if (value == null) return;
            for (int i = 0; i < value.GetLength(0); i++)
            {
                for (int j = 0; j < value.GetLength(1); j++)
                {
                    value[i, j] = rnd.Next(UpBound);
                } 
            }
        }
        /// <summary>Заполняет массив случайными числами на основе Random.Next.</summary>
        /// <param name="DownBound">Нижний включенный придел.</param>
        /// <param name="UpBound">Верхний не включенный придел.</param>
        public static void FillRnd(this int[,] value, int DownBound,int UpBound)
        {
            if (value == null) return;
            for (int i = 0; i < value.GetLength(0); i++)
            {
                for (int j = 0; j < value.GetLength(1); j++)
                {
                    value[i, j] = rnd.Next(DownBound, UpBound);
                }
            }
        }
        /// <summary>Заполняет весь массив одним значением</summary>
        /// <param name="digit">Целое число, которым заполняется массив.</param>
        public static void FillDigit(this int[,] value, int digit)
        {
            if (value == null) return;
            for (int i = 0; i < value.GetLength(0); i++)
            {
                for (int j = 0; j < value.GetLength(1); j++)
                {
                    value[i, j] = digit;
                }
            }
        }
        /// <summary>Вычисляет сред. ариф по определенной формуле.</summary>
        /// <returns>Возвращает среднее арифмитическое вычисленное по след формуле: 
        /// сумма сред. ариф. вторых размерностей деленное на кол-во первых размерностей.</returns>
        public static double SredArif(this int[,] value)
        {
            if (value == null) return 0;
            int sred;
            double sum=0;
            for (int i = 0; i < value.GetLength(0); i++)
            {
                sred = 0;
                for (int j = 0; j < value.GetLength(1); j++)
                {
                    sred += value[i, j];// Суммируем оценки за экзамены
                }
                sum += (double)sred / (double)value.GetLength(1); // Средняя ученика по экзаменам
            }
            return sum / (double)value.GetLength(0);// Средняя всей группы
        }
    }
}
Вложения
Тип файла: zip students.zip (35.3 Кб, 13 просмотров)
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
05.01.2012, 19:52
Это был вариант для моего кода. Можно изменить код автора темы - засунуть расширения в еще один фаил cs в проекте. И код станет компактнее и легче для восприятия.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2012, 19:52
Помогаю со студенческими работами здесь

Двумерные массивы: определить лучшую по средней оценке группу
Три группы студентов, в каждой из которых 20 человек, в сессию сдавали по 3 экзамена. Сведения об оценках каждой группы хранятся в...

Три группы студентов. Определить лучшую по средней оценке группу.
Задача на Компонент StringGrid: Три группы студентов, в каждой из которых 20 человек, в сессию сдавали по 3 экзамена. Сведения об...

Определить лучшую по среднему баллу группу
Три группы студентов, в каждой из которых по 20 человек, в сессию сдавали по три экзамена. Определить лучшую по среднему баллу группу.

Определить, содержит ли заданный массив группы элементов, расположенные в порядке убывания их значений. Если да, то определить группу наименьшей длины
Помогите с прграммой .Нужно написать программу на С++ с использован им масива Определить, содержит ли заданный массив группы...

Определить длину средней линии трапеции
Определить длину средней линии трапеции АВСД, если известны точки А(3, -1, 2), В(1,2,3), С(-3,4,6), Д(3,-5,3) Находим длину АВ=\sqrt{14} ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru