Автор работы: Пользователь скрыл имя, 18 Апреля 2012 в 17:55, курсовая работа
Написать программу на VBA, которая вводит данные, выполняет расчеты и выводит на экран:
Исходные данные в виде таблицы, где перечислены фамилии и инициалы студентов, оценки по всем предметам
Средний балл для каждого студента;
Средний балл по каждому предмету всей группы;
Средний балл по всем предметам всей группы;
Фамилию студента с наименьшим средним баллом.
Задание на курсовую работу 3
Описание переменных 4
Блок схемы 5
Описание алгоритма 17
Листинг программы 18
Результат работы программы 23
Список литературы 26
Имеется группа из 10 студентов, которые обучаются по 6 предметам.
Написать программу на VBA, которая вводит данные, выполняет расчеты и выводит на экран:
Переменные i, j, k – являются счетчиками цикла и имеют целочисленный тип.
ocenki(m,n) – массив данных, служит для хранения всех числовых данных – оценок по предметам. Имеет целый тип.
zad1(10), zad2(6) – одномерные массивы для хранения результатов вычисления среднего балла. Имеют дробный тип.
naz(n) – массив данных, служащий для хранения всех фамилий студентов. Имеет строковый тип.
x1, x2 – переменные служащие для вычислений среднего балла по предметам. Имеют дробный тип.
min – переменная для вычисления минимального значения среднего балла. Имеет дробный тип.
Tmp – переменная для временного хранения данных (чисел) при упорядочивании массива. Имеет дробный тип.
Tmp2 - переменная
для временного хранения данных (названий)
при упорядочивании массива. Имеет строковый
тип.
Начало программы.
Очищение листа «Результат». Ввод начальных (нулевых) значений для расчета величин (средние баллы для студентов, средние баллы по предметам, средний балл по всем предметам, минимальный средний балл студента, счетчик вывода минимального балла).
Заполнение массива оценок из листа «Начало», а так же ввод этих значений в таблицу листа «Результат».
Нахождение среднего балла для каждого студента. Для этого организуется два вложенных цикла. Во внутреннем цикле суммируются все баллы студента. После этого находится среднее значение, и оно записывается в массив. Также, осуществляется ввод этих данных в таблицу листа «Результат».
Нахождение среднего балла по предметам. Для этого организуется два вложенных цикла. Во внутреннем цикле суммируются все баллы по предмету. После этого находится среднее значение, и оно записывается в массив. Также, осуществляется ввод этих данных в таблицу листа «Результат».
Нахождение
среднего балла по всем предметом. Для
этого организуется цикл, в котором
суммируются все средние
Нахождение
минимального среднего балла у студентов.
Для этого, переменной присваивается
среднее значение первого студента.
После этого в цикле
В таблицу листа «Результат» вводятся фамилии и инициалы студентов, названия предметов, некоторые заголовки столбцов.
В
таблицу листа «Результат»
Вводятся
фамилии студента и минимальный
средний балл. Для этого организован
цикл. В цикле присутствует оператор
выбора, который необходим в том случае,
если студентов с минимальным баллом несколько.
Public ocenki(10, 6) As Double 'создание двумерного массива
Public naz(10) As String, zad1(10) As Double, zad2(6) As Double 'создание одномерного массива
Public i As Integer, j As Integer, k As Integer, z As String 'описание переменных
Public x1 As Double, x2 As Double, min
As Double, tmp As Double, tmp1 As String 'описание переменных
Sub zap_mass() 'функция записи данных в массивы
i = 1 ' присваиваем переменной начальное значение
j = 1 ' присваиваем переменной начальное значение
Do While i <= 10 'создаем цикл по переменной i
j = 1 ' присваиваем переменной значение
Do 'создаем цикл
ocenki(i, j) = CDbl(Cells(i + 2, j + 1)) ' записываем данные в массив
j = j + 1 'изменяем значение переменной
Loop While j <= 6 'завершаем цикл
naz(i) = Cells(i + 2, 1) ' записываем данные в массив
i = i + 1 'изменяем значение переменной
Loop 'завершаем цикл
End Sub
'завершение функции'
Sub zad_1() ' создаем функцию
для вычисления первого
For i = 1 To 10 'создаем цикл по переменной i
zad1(i) = 0 ' обнуляем значение переменных
For j = 1 To 6 'создаем цикл по переменной j
zad1(i) = zad1(i) + ocenki(i, j) ' присваиваем переменной значение
Next j 'завершаем цикл
Cells(i + 2, 8) = zad1(i) / 6 ' выводим значение в ячейку
Next i 'завершаем цикл
End Sub 'завершение функции'
Sub zad_2() ' создаем функцию
для вычисления второго
For i = 1 To 6 'создаем цикл по переменной i (столбцам таблицы)
zad2(i) = 0 ' обнуляем значение переменных (по строкам таблицы данных)
For j = 1 To 10 'создаем цикл по переменной j
zad2(i) = zad2(i) + ocenki(j, i) ' присваиваем переменной значение
Next j 'завершаем цикл
Cells(13, i + 1) = zad2(i) / 10 ' выводим значение в ячейку
Next i 'завершаем цикл
End Sub
'завершение функции'
Sub zad_3() ' создаем функцию
для вычисления третьего
x1 = 0 ' обнуляем значение переменных
For i = 1 To 10 'создаем цикл по переменной i по строкам
For j = 1 To 6 'создаем цикл по переменной j по столбцам
x1 = x1 + ocenki(i, j) ' присваиваем переменной значение
Next j 'завершаем цикл
Next i 'завершаем цикл
Cells(14, 2) = x1 / 60 ' выводим значение в ячейку данных
End Sub
'завершение функции'
Sub zad_4() ' создаем функцию
для вычисления четвертого
min = 2 ^ 31 ' обнуляем значение переменных
k = 1 ' присваиваем значение переменной
For i = 1 To 10 'создаем цикл по переменной i (по строкам)
x1 = 0 ' обнуляем значение переменных
For j = 1 To 6 'создаем цикл по переменной j
x1 = x1 + ocenki(i, j) 'вычисляем сумму всех оценок для студента
Next j 'завершаем цикл
If x1 < min Then 'если текущая оценка
меньше минимальной по
min = x1 ' присваиваем переменной
k = i ' присваиваем переменной
End If 'завершаем оператор if
Next i 'завершаем цикл
Cells(15, 2) = naz(k) ' выводим значение в ячейку
End Sub
'завершение функции'
Private Sub sort_Click() 'создаем
функцию выполняющуюся при
Call zap_mass 'вызываем
функцию заполнения массива
Call ochistka 'вызываем функцию очистки результатов
MsgBox ("Упорядочивание
производим по наибольшему
For i = 1 To 9 'создаем цикл по переменной i
For j = i + 1 To 10 'создаем цикл по переменной j
x1 = 0 ' обнуляем значение переменных
x2 = 0 ' обнуляем значение переменных
For k = 1 To 6 'создаем цикл по переменной k
x1 = x1 + ocenki(i, k) ' присваиваем переменной значение
x2 = x2 + ocenki(j, k) ' присваиваем переменной значение
Next k 'завершаем цикл
If x1 > x2 Then ' если выполняется условие
For k = 1 To 6 'создаем цикл по переменной k
'тут меняем местами
tmp = ocenki(i, k)
ocenki(i, k) = ocenki(j, k)
ocenki(j, k) = tmp
Next k 'завершаем цикл
tmp2 = naz(i)
naz(i) = naz(j)
naz(j) = tmp2
End If 'завершаем оператор if
Next j 'завершаем цикл по столбцам
Next i 'завершаем цикл по строкам
For i = 1 To 10 'создаем цикл по переменной i
For j = 1 To 6 'создаем цикл по переменной j
Cells(i + 2, j + 1) = ocenki(i, j) ' выводим значение в ячейку
Next j 'завершаем цикл
Cells(i + 2, 1) = naz(i) ' выводим значение в ячейку
Next i 'завершаем цикл
Call rasschet_Click ' выполнить процедуру рассчета
End Sub 'завершение функции'
Private Sub rasschet_Click() 'создаем
функцию выполняющуюся при
Call zap_mass 'вызываем функцию
Call zad_1 'вызываем функцию
Call zad_2 'вызываем функцию
Call zad_3 'вызываем функцию
Call zad_4 'вызываем функцию
End Sub 'завершение функции'
Private Sub diagramma_Click() 'создаем функцию построения диаграммы с подпесями
Charts.Add 'добавлЯем диаграмму
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData
Source:=Sheets("Данные").
PlotBy:=xlRows 'определяем выделенный диапазон ячеек
ActiveChart.Location Where:=xlLocationAsObject, Name:="Данные" 'выводим диаграмму в лист с именем "Данные"
With ActiveChart
.HasTitle = True ' делаем название диаграммы видимым