Задача 6.7.
Для квадратной матрицы вычислить сумму элементов, расположенных на главной диагонали, среди строк, начинающихся с отрицательного элемента.
Таблица переменных
Переменная |
Тип |
Имя |
Назначение |
Матрица |
Действ. |
Х |
ИД |
Кол-во строк и столбцов матрицы |
Целый |
n |
ИД |
Сумма |
Действ |
s |
Результат. |
Счетчик |
Целый |
k |
Вспомогат. |
Номер строки |
Целый |
i |
Промежут. |
Номер столбца |
Целый. |
j |
Промежут |
Блок-схема алгоритма
Проверка 1
|
Блок 1 |
Блок 2 |
Блок 3 |
Блок 4 |
Блок 5 |
Блок 6 |
Блок 7 |
Блок 8 |
Блок 9 |
Блок 10 |
Блок 11 |
Блок 12 |
Блок 13 |
1 |
начало |
4 |
-1;2;3;4 2;3;4;5 -3;4;5;6 4;5;6;7 |
S=0 I=1 K=4 |
-1<0 да |
S=-1 |
|
I=2 |
2<=4 да |
|
|
|
|
2 |
|
|
|
|
2<0 нет |
|
k=3 |
I=3 |
3<=4 да |
|
|
|
|
3 |
|
|
|
|
-3<0 да |
S=4 |
|
I=4 |
4<=4 да |
|
|
|
|
4 |
|
|
|
|
4<0 нет |
|
k=2 |
I=5 |
5<=4 нет |
2<>0 да |
Вывод 4 |
|
конец |
Проверка 2
|
Блок 1 |
Блок 2 |
Блок 3 |
Блок 4 |
Блок 5 |
Блок 6 |
Блок 7 |
Блок 8 |
Блок 9 |
Блок 10 |
Блок 11 |
Блок 12 |
Блок 13 |
1 |
начало |
4 |
1;2;3;4 2;3;4;5 3;4;5;6 4;5;6;7 |
S=0 I=1 K=4 |
1<0 нет |
|
k=3 |
I=2 |
2<=4 да |
|
|
|
|
2 |
|
|
|
|
2<0 нет |
|
k=2 |
I=3 |
3<=4 да |
|
|
|
|
3 |
|
|
|
|
3<0 нет |
|
k=1 |
I=4 |
4<=4 да |
|
|
|
|
4 |
|
|
|
|
4<0 нет |
|
k=0 |
I=5 |
5<=4 нет |
0<>0 нет |
|
Вывод “Нет строк с 1-м отрицательным элементом” |
конец |
Структура даних
При розв’язанні задачі вихідними даними є кількість рядків та стовпців матриці N та їх значення X(i,j), для введення цих значень використовується функція Inputbox. Результат виводиться за допомогою оператора Print, він друкується на форму. Результат залежить від вихідних даних, і користувач не може його довільно змінити.
Структура даних задачі подана в наступній таблиці.
-
Реквізит
Ім’я
Призначення
Кількість рядків та стовпців
N
Вихідні дані
Матриця
X
Вихідні дані
Сума
S
Результат
Інтерфейс з користувачем
Розв’язання задачі здійснюється за допомогою форми, наведеної нижче. У заголовку форми вказана назва додатка Задача 6.7. Введення значень виконується при натисненні кнопки Ввод значений.Обчислення виконуються при натисненні кнопки Расчет. Результат розрахунку друкується на форму.
Програма
Option Explicit
Option Base 1
Dim x(10, 10) As Single, s As Single, i, j, n, k As Integer
Private Sub vvod_Click()
n = CInt(InputBox("Введите количество строк и столбцов матрицы Х"))
Print "Матрица Х"
For i = 1 To n
For j = 1 To n
x(i, j) = CSng(InputBox("x(" & i & "," & j & ")="))
Print x(i, j);
Next j
Next i
End Sub
Private Sub rascet_Click()
s = 0: k = n
For i = 1 To n
If x(i, 1) < 0 Then
s = s + x(i, i)
Else
k = k - 1
End If
Next i
If k <> 0 Then
Print "Сумма равна "; s
Else
Print "Нет строк с первым отрицательным элементом"
End If
End Sub
Реалізація проекту
-
Запустити на виконання VB для створення нового проекту.
-
Ввести заголовок форми Задача 6.7.
-
Створити кнопку Ввод значений.
-
Увести код процедури, яка обробляє подію клацання на кнопку Ввод значений.
-
Створити кнопку Расчет.
-
Увести код процедури, яка обробляє подію клацання на кнопку Расчет.
-
Зберегти форму і проект у підкаталозі папки студента на диску.
-
Запустити програму на виконання і зробити обчислення з комплектом вихідних даних.
Аналіз проекту
Для виконання обчислень у правій частині оператора привласнення використовуються функції CSng() та CInt(), які перетворюють рядкові значення на тип Single і Integer відповідно.
У коді виконується явний опис змінних через наявність оператора Option Explicit. Оператор Option Base 1 вказує на те, що нумерація елементів матриці Х починається з 1.
Для реалізації циклічного обчислення використовується оператор For…Next.
Для реалізації розгалуження застосовується розширена форма умовного оператора.
Результат розрахунку друкується на форму за допомогою оператора Print.
Виконання програми й аналіз отриманих результатів
Результат розв’язання задачі залежить від початкових даних. Для перевірки працездатності використовувалися дані перевірки правильності алгоритму (тестування). Приклад такої перевірки наведено на малюнку вище. Отримані результати співпадають з результатами перевірки алгоритму.