Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Самоучка
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 4
#1

Нахождение среднего балла студентов, выбранных из списка

08.11.2013, 13:29. Просмотров 772. Ответов 7
Метки нет (Все метки)

Помогите пжл с задачкой: "Разработать программу нахождения среднего балла студентов, выбранных из списка в диалоговом окне «Средний балл». Список содержит фамилию студента и его средний балл (двумерный массив)."

Вот мой код:

Visual Basic
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
Dim i As Integer
Dim n As Integer
Dim s(2, 1) As String
Dim j As Double
Dim sr As Double
Dim r As Double
 
Private Sub CommandButton1_Click()
sr = 0
n = 0
With ListBox2
 .TextColumn = 2
    For j = 0 To .ListCount - 1
      If .Selected(j) = True Then
        n = n + 1
        sr = sr + j
      End If
   Next j
End With
r = sr / n
TextBox1.Text = CStr(Format(r, "Fixed"))
End Sub
 
Private Sub CommandButton3_Click()
UserForm1.Hide
 
End Sub
 
Private Sub UserForm_Initialize()
   With ListBox2
    .ColumnCount = 2
     s(0, 0) = "Иванов"
     s(0, 1) = 3
     s(1, 0) = "Петров"
     s(1, 1) = 3
     s(2, 0) = "Сидоров"
     s(2, 1) = 5
     .List = s
     .MultiSelect = fmMultiSelectMulti
 End With
 
 
TextBox1.Enabled = False
   With CommandButton1
     .Default = True
     .ControlTipText = "Нахождение результата"
  End With
CommandButton3.Cancel = True
UserForm1.Show
Но среднюю в итоге считает не правильно... подскажите в чем ошибка?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2013, 13:29
Ответы с готовыми решениями:

Массив: для всех с оценкой ниже среднего балла заново ввести оценки и потом пересчитать средний балл
Дан массив 5-ти фамилий и массив 5-ти оценок. Надо для всех с оценкой ниже...

Нахождение среднего значения по условию через AverageIf
Здравствуйте. Задача: найти среднее значение массива чисел, которые больше...

Выбор из списка тех студентов, у которых совпадают фамилии
Написать макрос выбора из списка тех студентов, у которых совпадают фамилии и...

Из списка логично выделить фамилии студентов получивише 5 по 2 предметам
Помогите построить в VB макрос для Excel. Я по программированю не бу бу. Буду...

Разработать пользовательскую форму для организации списка успеваемости студентов
Вариант №23: Разработать пользовательскую форму для организации следующего...

7
Kubuntovod
933 / 111 / 24
Регистрация: 14.01.2013
Сообщений: 524
08.11.2013, 15:51 #2
Цитата Сообщение от Самоучка Посмотреть сообщение
sr = sr + j
Вы чего тут складываете?
0
Самоучка
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 4
08.11.2013, 16:03  [ТС] #3
Этим я хотел чтобы, значение первого цикла прибавлялась к значению следующего цикла....

Если я как то "криво" выражаюсь, прошу понять и простить.....
0
Kubuntovod
933 / 111 / 24
Регистрация: 14.01.2013
Сообщений: 524
08.11.2013, 17:48 #4
sr = sr + j => это фактически значит 1+2+3+... и так вплоть до величины [.ListCount - 1]
А должны складываться элементы списка. Так ведь?
0
Самоучка
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 4
11.11.2013, 10:54  [ТС] #5
да.

Добавлено через 9 минут
тогда как, складывать выделенные элементы списка???
я понимал так n = n + 1 ,будет считать количество выделенных элементов
sr = sr + j, будет считать сумму выделенных элементов
r = sr/n - вычислять среднюю выделенных элементов.

Не пойму как присвоить sr значение второго столбца двухмерного массива?
0
Kubuntovod
933 / 111 / 24
Регистрация: 14.01.2013
Сообщений: 524
11.11.2013, 14:45 #6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Как-то так:

Visual Basic
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
Private Sub CommandButton1_Click()
sr = 0
n = 0
With ListBox2
  For j = 0 To .ListCount - 1
     If .Selected(j) = True Then
       n = n + 1
       sr = sr + CInt(.List(j, 1))
     End If
  Next j
End With
If n <> 0 Then r = sr / n
TextBox1.Text = CStr(Format(r, "Fixed"))
End Sub
 
Private Sub UserForm_Initialize()
Dim s(0 To 2, 0 To 1) As String
  With ListBox2
    .ColumnCount = 2
     s(0, 0) = "Иванов"
     s(0, 1) = 3
     s(1, 0) = "Петров"
     s(1, 1) = 3
     s(2, 0) = "Сидоров"
     s(2, 1) = 5
     .List = s
     .MultiSelect = fmMultiSelectMulti
  End With
End Sub
1
Самоучка
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 4
11.11.2013, 15:51  [ТС] #7
Последний вопрос CInt(.List(j, 1 - это что? )) почему нельзя написать CInt(.List(j))???
0
Kubuntovod
933 / 111 / 24
Регистрация: 14.01.2013
Сообщений: 524
11.11.2013, 17:04 #8
Столбец в ListBox2. Нулевой столбец - это фамилия, первый - оценка.
1
11.11.2013, 17:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 17:04

Как выбрать из списка студентов с одинаковыми фамилиями и подсчитать их средний балл
В общем задание такое. не сильно надеюсь но все же Написать макрос выбора из...

Создать список студентов с оценками по нескольким дисциплинам. Отсортировать список по убыванию среднего балла. Имеющих двойки удалить из списка.
Помогите сделать лабу задание:Создать список студентов с оценками по...

Составить программу для вычисления среднего балла студентов, если количество студентов и оценки вводятся с клавиатуры.
Привет всем )) Нужна помощь 3. Задача (язык С + +). Составить программу для...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru