'

Программирование типовых алгоритмов обробки данных.

Понравилась презентация – покажи это...





Слайд 0

Программирование типовых алгоритмов обробки данных.


Слайд 1

План 1. Программирование линейных вычислительных процессов. 2. Программирование разветвляющихся вычислительных процессов. 3. Программирование циклических вычислительных процессов. 4. Программирование типовых задач обработки массивов.


Слайд 2

1. Программирование линейных вычислительных процессов. Пример1- Линейный вычислительный процесс


Слайд 3

Sub Prim_lin() Dim a, b, c, t, y As Double ‘В тригонометрических функциях должен быть ‘этот тип переменных- с плавающей точкой двойной точности 'Инициализируем переменные a = InputBox("Введите a", "Пример - линейный вычислительный процесс") b = InputBox("Введите b", "Пример - линейный вычислительный процесс") c = InputBox("Введите c", "Пример - линейный вычислительный процесс") t = (Sqr(a + b ^ 3 + c * (Cos(b)) ^ 2 + b * Sin(Sqr(c)))) / (Log(a * b) / Log(10#)) y = Atn(t / 2.8) + 2 * Atn(1)’Функция arcctg MsgBox (" Результат: t = " & t) 'вывод результата в окне сообщений MsgBox (" Результат: y =" & y) 'вывод результата в окне сообщений End Sub


Слайд 4

Cписок функций, которые могут быть получены с помощью встроенных математических функций: Функция Комбинация встроенных функций Секанс Sec(X) = 1 / Cos(X) Косеканс Cosec(X) = 1 / Sin(X) Котангенс Cotan(X) = 1 / Tan(X) Арксинус Arcsin(X) = Atn(X / Sqr(-X * X + 1)) Арккосинус Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1) Арккосеканс Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1)) Арккосеканс Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1)) Арккотангенс Arccotan(X) = Atn(X) + 2 * Atn(1) Логарифм по основанию N LogN(X) = Log(X) / Log(N) Гиперболический синус HSin(X) = (Exp(X) - Exp(-X)) / 2 Гиперболический косинус HCos(X) = (Exp(X) + Exp(-X)) / 2 Гиперболический тангенс HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X)) Гиперболический секанс HSec(X) = 2 / (Exp(X) + Exp(-X)) Гиперболический косеканс HCosec(X) = 2 / (Exp(X) - Exp(-X)) Гиперболический котангенс HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X)) Гиперболический арксинус HArcsin(X) = Log(X + Sqr(X * X + 1)) Гиперболический арккосинус HArccos(X) = Log(X + Sqr(X * X - 1)) Гиперболический арктангенс HArctan(X) = Log((1 + X) / (1 - X)) / 2 Гиперболический арксеканс HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X) Гиперболический арккосеканс HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X) Гиперболический арккотангенс HArccotan(X) = Log((X + 1) / (X - 1)) / 2


Слайд 5

2. Управляющие структуры языка VBA Для управления процессом обработки данных язык VBA позволяет использовать условные инструкции и инструкци цикла, которые принято называть управляющими структурами. Условные инструкции позволяют написать программу на языке Visual Basic, которая будет проверять условие и принимать решение какие действия по обработке данных должны выполняться. Условные инструкции проверяют имеет условие значение True или False и в зависимости от результата, указывают одну или несколько дальнейших инструкций. Обычно условие является выражением, которое использует оператор сравнения для сравнения одного значения переменной с другим. Инструкци цикла позволяют написать программу на языке Visual Basic, которая будет повторять выполнение определенного набора инструкций. Некоторые циклы повторяют инструкции пока условие имеет значение False; другие - пока значение условия равно True. Имеются также циклы, которые повторяют набор инструкций определенное число раз или же выполняют его для каждого объекта семейства. Существует еще одна полезная управляющая структура - инструкция With, которая позволяет выполнить последовательность инструкций, не повторяя задание имени объекта.


Слайд 6

Типы условных инструкций If...Then...Else - ветвление программы в зависимости от значения условия True или False. Допускаются многократное вложенние инструкции If...Then...Else, имеющие столько уровней вложения, сколько потребуется. Однако для облегчения чтения программы вместо многократно вложенных инструкций If...Then...Else иногда предпочтительнее использовать инструкцию Select Case. Select Case - выбор ветви из набора условий. Является альтернативой инструкции If...Then...Else и используется при оценке одного выражения, которое имеет несколько возможных значений. В то время как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры.


Слайд 7

Инструкция If...Then...Else Задает выполнение определенных групп инструкций в зависимости от значения выражения. Возможны две формы синтаксиса: блочная If условие Then [инструкции] [ElseIf условие-n Then [инструкции_elseif] ... [Else [инструкции_else]] End If однострочная If условие Then [инструкции] [Else инструкции_else]


Слайд 8

Синтаксис инструкции If...Then...Else содержит следующие элементы:


Слайд 9

Пример 1 - Разветвляющийся вычислительный процесс с инструкцией IF…END IF при х < 3 при 3 <= x <4 при х >= 4


Слайд 10

Sub PrimerIf() Dim a, b, c, x As Double Dim y As Double a = InputBox("Введите a", "Пример - разветвляющийся вычислительный процесс") b = InputBox("Введите b", " Пример - разветвляющийся вычислительный процесс ") c = InputBox("Введите c", " Пример - разветвляющийся вычислительный процесс ") x = InputBox("Введите x", " Пример - разветвляющийся вычислительный процесс ") If x < 3 Then y = x ^ 3 - a * x ^ 2 + 8 * x - 4 End If If x >= 3 And x < 4 Then y = Sqr((x - a) * (x - b)) End If If x >= 4 Then y = Log(b ^ 2) - Sin(c * x) End If MsgBox (" Результат: y = " & y) End Sub


Слайд 11

Пример 2 -Разветвляющийся вычислительный процесс c использованием конструкции ElseIf при х < 3 при 3 <= x <4 при х >= 4


Слайд 12

Sub PrimerElseIf() Dim a, b, c, x As Double Dim y As Double a = InputBox("Введите a", "Пример 2") b = InputBox("Введите b", "Пример 2") c = InputBox("Введите c", "Пример 2") x = InputBox("Введите X", "Пример 2") If x < 3 Then y = x ^ 3 - a * x ^ 2 + 8 * x - 4 ElseIf x >= 3 And x < 4 Then y = Sqr((x - a) * (x - b)) Else y = Log(b ^ 2) - Sin(c * x) End If MsgBox (“Результат: y = " & y) End Sub


Слайд 13

Инструкция Select Case Выполняет одну из нескольких групп инструкций в зависимости от значения выражения. Синтаксис: Select Case выражение [Case списокВыражений-n [инструкции-n]] ... [Case Else [инструкции_else]] End Select


Слайд 14

Синтаксис инструкции Select Case содержит следующие элементы:


Слайд 15

Пример 3 -Разветвляющийся вычислительный процесс - инструкция Select Case при х = 2 при x=4 при х = 10


Слайд 16

Sub PrimerCase1() Dim a, b, c, x, y As Double a = InputBox("Введите a", "Пример - Case1") b = InputBox("Введите b", "Пример - Case1") c = InputBox("Введите c", "Пример - Case1") x = InputBox("Введите x", "Пример - Case1") Select Case x Case 2 y = x ^ 3 - a * x ^ 2 + 8 * x - 4 MsgBox ("Результат: y = " & y) Case 4 y = (x - a) * (x - b) MsgBox ( "Результат: y = " & y) Case 6 y = Log(b ^ 2) - Sin(c * x) MsgBox ("y = " & y) Case Else ' Другие значения MsgBox (" Результат: Вне интервала") End Select End Sub


Слайд 17

Пример 4 -Разветвляющийся вычислительный процесс - инструкция Select Case при х < 3 при x=3, c<20 при 3< х<=10


Слайд 18

Sub PrimerCase() Dim a, b, c, x, y As Double a = InputBox("Введите a", "Пример - Case") b = InputBox("Введите b", "Пример - Case ") c = InputBox("Введите c", "Пример - Case ") x = InputBox("Введите x", "Пример - Case ") Select Case x Case Is < 3 y = x ^ 3 - a * x ^ 2 + 8 * x - 4 MsgBox ("Результат: y = " & y) Case Is = 3 And c < 20 y = (x - a) * (x - b) MsgBox ( "Результат: y = " & y) Case 4 To 10 y = Log(b ^ 2) - Sin(c * x) MsgBox ("y = " & y) Case Else ' Другие значения MsgBox (" Результат: Вне интервала") End Select End Sub


Слайд 19

Оператор Is Используется для сравнения двух переменных, содержащих ссылки на объекты. Синтаксис: результат = объект1 Is объект2 Оператор Is использует следующие операнды: Элемент Описание результат Обязательный; любая числовая переменная. объект1 Обязательный; любое имя объекта. объект2 Обязательный; любое имя объекта. Если переменные объект1 и объект2 содержат ссылки на один объект, результат имеет значение True; в противном случае результат имеет значение False. Ссылки на один объект в двух переменных задаются различными способами. В следующей инструкции в переменной A задается ссылка на тот же объект, что и в переменной B: Set A = B Следующая инструкция задает в переменных A и B ссылку на тот же объект, что и в переменной C: Set A = C Set B = C


Слайд 20

3. Программирование циклических вычислительных процессов Циклы используются для многократного выполнения некоторого фрагмента кода программы. В VBA реализованы следующие типы циклов: For...Next: цикл по счетчику - повторяет набор инструкций указанное число раз. Do...Loop: повторяет набор инструкций, пока условие имеет значение True или пока оно не примет значение True. For Each...Next: повторяет набор инструкций для каждого элемента массива


Слайд 21

Цикл по счетчику - инструкция For... Next Инструкция For...Next используется для выполнения наборов инструкций указанное число раз. Циклы For используют в качестве счетчика переменную, значение которой увеличивается или уменьшается при каждом выполнении цикла. Синтаксис For счетчик = начало To конец [Step шаг] [инструкции] [Exit For] [инструкции] Next [счетчик]


Слайд 22

Синтаксис инструкции For…Next содержит следующие элементы:


Слайд 23

Инструкция Exit For Альтернативный способ выхода из цикла предоставляет инструкция Exit For. В любых местах цикла может размещаться любое число таких инструкций. Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If...Then). Эта инструкция передает управление инструкции, непосредственно следующей за инструкцией Next. Допускается организация вложенных циклов For...Next (один цикл For...Next располагается внутри другого). Счетчик каждого цикла должен иметь уникальное имя. Допускаются следующие конструкции: For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 ... Next K Next J Next I


Слайд 24

Примеры использования инструкции For …Next Пример1 - Определение суммы элементов Sub PrimerZikl1() Dim x, i, s As Single s = 0 ‘инициализация переменной для накопления суммы For x = 0.5 To 2.5 Step 0.1 s = s + x ^ 2 + 5 * x - 4 Next MsgBox (" Результат: s = " & s) End Sub


Слайд 25

Пример 2 - Определение произведения элементов Sub PrimerZikl3() Dim x, p As String p = 1’инициализация переменной для расчета произведения For x = 0.5 To 2.5 Step 0.1 p = p*( x ^ 2 + 5 * x - 4) Next MsgBox (” Результат: p = " & p) End Sub


Слайд 26

Инструкция Do...Loop Инструкция Do...Loop используется для выполнения наборов инструкций неопределенное число раз. Возможны следующие варианты использования инструкции Do...Loop: 1. Повторяет выполнение набора инструкций с помощью ключевого слова While - пока условие имеет значение True : условие проверяется до входа в цикл Синтаксис Do [While условие] [инструкции ] [Exit Do] [инструкции] Loop условие проверяется после хотя бы однократного выполнения цикла Синтаксис Do [инструкции] [Exit Do] [инструкции] Loop [While условие]


Слайд 27

2. Повторяет выполнение набора инструкций с помощью ключевого слова Until - пока условие не примет значение True: условие проверяется до входа в цикл Синтаксис Do [Until условие] [инструкции ] [Exit Do] [инструкции] Loop условие проверяется после хотя бы однократного выполнения цикла. Синтаксис Do [инструкции] [Exit Do] [инструкции] Loop [Until условие]


Слайд 28

Синтаксис инструкции Do Loop содержит следующие элементы: В любом месте управляющей структуры Do…Loop может быть размещено любое число инструкций Exit Do, обеспечивающих альтернативные возможности выхода из цикла Do…Loop. Инструкция Exit Do передает управление инструкции, непосредственно следующей за инструкцией Loop. Во вложенных циклах Do…Loop инструкция Exit Do передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается. Часто используется вместе с определением некоторого условия (например, If…Then).


Слайд 29

Пример 1. Повторение инструкций с помощью ключевого слова While, пока условие имеет значение True - условие проверяется до входа в цикл Sub ChkFirstWhile() Dim counter, myNum As Double counter = 0 myNum = 20 Do While myNum > 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "Выполнено " & counter & " итераций цикла." End Sub В этой процедуре условие проверяется до входа в цикл. Если myNum задать равным 9 вместо 20, инструкции внутри цикла выполняться не будут.


Слайд 30

Пример 2. Повторение инструкций с помощью ключевого слова While, пока условие имеет значение True - условие проверяется после хотя бы однократного выполнения цикла. Sub ChkLastWhile() Dim counter, myNum As Double counter = 0 myNum = 9 Do myNum = myNum - 1 counter = counter + 1 Loop While myNum > 10 MsgBox "В цикле выполнено " & counter & " итераций." End Sub В процедуре ChkLastWhile инструкции внутри цикла выполняются только один раз до того как условие примет значение False.


Слайд 31

Пример 3. Повторение инструкций с помощью ключевого слова Until, пока условие не примет значение True - условие проверяется до входа в цикл Sub ChkFirstUntil() Dim counter, myNum As Double counter = 0 myNum = 20 Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "В цикле выполнено " & counter & " итераций." End Sub


Слайд 32

Пример 4. Повторение инструкций с помощью ключевого слова Until, пока условие не примет значение True - условие проверяется после хотя бы однократного выполнения цикла Sub ChkLastUntil() Dim counter, myNum As Double counter = 0 myNum = 1 Do myNum = myNum + 1 counter = counter + 1 Loop Until myNum = 10 MsgBox "В цикле выполнено " & counter & " итераций." End Sub Итерации продолжаются, пока условие имеет значение False.


Слайд 33

Примен 5. Выход из цикла Do...Loop Sub ExitExample() Dim counter, myNum As Double counter = 0 myNum = 9 Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 If myNum < 10 Then Exit Do Loop MsgBox "В цикле выполнено " & counter & " итераций." End Sub В этом примере переменной myNum присваивается значение, приводящее к бесконечному циклу. Инструкция If...Then проверяет условие на myNum, а затем завершает инструкцию Do...Loop, предотвращая таким образом бесконечный цикл. Примечание. Для прекращения бесконечного цикла используются клавиши CTRL+BREAK.


Слайд 34

Инструкция For Each...Next Повторяет выполнение группы инструкций для каждого элемента массива. Синтаксис For Each элемент In группа [инструкции] [Exit For] [инструкции] Next [элемент]


Слайд 35

Синтаксис инструкции For...Each...Next содержит следующие элементы:


Слайд 36

Вход в блок For...Each выполняется только в том случае, если группа содержит хотя бы один элемент. После входа в цикл все инструкции цикла выполняются для первого элемента группы. Затем, если группа содержит другие элементы, инструкции цикла выполняются для каждого элемента. После обработки всех элементов цикл завершается, а выполнение продолжается с инструкции, следующей за инструкцией Next. В любых местах цикла может размещаться любое число инструкций Exit For, позволяющих выйти из цикла. Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If…Then). Она передает управление инструкции, непосредственно следующей за инструкцией Next. Допускается организация вложенных циклов For...Each...Next (один цикл For...Each...Next располагается внутри другого). Однако каждый элемент цикла должен быть уникальным. Примечание. Если опустить элемент в инструкции Next, выполнение продолжается так же, как если бы элемент был указан. При обнаружении инструкции Next до соответствующей инструкции For возникает ошибка. Не допускается использование инструкции For...Each...Next с массивами, определяемых пользователями типов, поскольку значение типа Variant не может содержать тип, определяемый пользователем.


Слайд 37

В следующих строках программы выполняется цикл для всех элементов массива, и их значения присваиваются индексной переменной I. Dim TestArray(10) As Integer, I As Variant For Each I In TestArray TestArray(I) = I Next I


Слайд 38

4. Программирование типовых задач обработки массивов.


Слайд 39

Пример 1 - Найти сумму элементов одномерного массива B[N] Sub PrimerMassivOdn() Dim b(), i, n, s As Integer n = InputBox("Введите n для определения размера массива", "Пример 1") ReDim b(n) s = 0 For i = 1 To n b(i) = InputBox("Введите значение элемента массива", "Пример 3") s = s + b(i) Next MsgBox (" Результат: s = " & s) End Sub


Слайд 40

Пример 2 - Найти сумму элементов двумерного массива A[M,N] Sub PrimerMassivDvu() Dim b(), i, j, m, n, s As Integer m = InputBox("Введите m для определения числа строк матрицы", "Пример 2") n = InputBox("Введите n для определения числа столбцов матрицы ", "Пример 2") ReDim b(1 To m, 1 To n) s = 0 For i = 1 To m For j = 1 To n b(i, j) = InputBox("Введите значение элемента массива", "Пример 4") s = s + b(i, j) Next Next MsgBox (" Результат: s = " & s) End Sub


Слайд 41

Пример 5 - Найти сумму четных элементов матрицы A[3,3] и произведение нечетных элементов этой матрицы. Sub Primer_5() Dim a(1 To 3, 1 To 3), i, j, pr, sum As Integer sum = 0 pr = 1 For i = 1 To 3 For j = 1 To 3 a(i, j) = InputBox("Введите значение элемента массива", "Пример 5") If a(i, j) Mod 2 = 0 Then ‘Проверка на четность sum = sum + a(i, j) Else pr = pr * a(i, j) End If Next Next MsgBox (" Результат: s = " & sum) MsgBox (" Результат: p = " & pr) End Sub


Слайд 42

Пример 6 - По ряду натуральных чисел [0; 41] вычислить произведение чисел кратных трем, но нечетных Sub Prod() Dim Chet As Integer, Pr As Long Pr = 1 For Chet = 0 To 41 Step 3 If Chet Mod 2 <> 0 Then Pr = Pr* Chet MsgBox " Элемент ряда - " & Chet End If Next ' Увеличивает счетчик MsgBox ("Результат - " & Pr) End Sub


Слайд 43

Пример 7- Найти произведение суммы элементов матрицы В[M,N] по строкам Sub PrimerMassivDvu_7() Dim b(), i, j, m, n, s, p As Integer m = InputBox("Введите m для определения числа строк матрицы", "Пример 7") n = InputBox("Введите n для определения числа столбцов матрицы ", "Пример 7") ReDim b(1 To m, 1 To n) p = 1 For i = 1 To m s = 0 For j = 1 To n b(i, j) = InputBox("Введите значение элемента массива", "Пример 7") s = s + b(i, j) Next MsgBox ( Результат: s = " & s & " i = " & i) p = p * s Next MsgBox (" Результат: p = " & p) End Sub


Слайд 44

Пример 8- Найти сумму произведений элементов матрицы A[M,N] по столбцам Sub PrimerMassivDvu_7() Dim b(), i, j, m, n, s, p As Integer m = InputBox("Введите m для определения числа строк матрицы", "Пример 7") n = InputBox("Введите n для определения числа столбцов матрицы ", "Пример 7") ReDim b(1 To m, 1 To n) s = 1 For j = 1 To m s = 0 For i = 1 To n b(i, j) = InputBox("Введите значение элемента массива", "Пример 7") p = p * b(i, j) Next MsgBox (" Результат: p = " & p & " j = " & j) s = s + p Next MsgBox ( " Результат: s = " & s) End Sub


Слайд 45

Пример 9- Найти сумму элементов матрицы, расположенных над главной диагональю, над ней и под ней . Sub PrimerMassivDvu_9() Dim a(), i, j, m, n, s1, s2, s3 As Integer m = InputBox("Введите m для определения числа строк матрицы", "Пример 9") n = InputBox("Введите n для определения числа столбцов матрицы ", "Пример 9") ReDim a(1 To m, 1 To n) 'Матрица должна быть квадратная n=m For i = 1 To m For j = 1 To n a(i, j) = InputBox("Введите значение элемента массива", "Пример 9") Next Next s1 = 0 s2 = 0 s3 = 0


Слайд 46

For i = 1 To m For j = 1 To n If i = j Then s1 = s1 + a(i, j) 'Накопление суммы элементов на главной диагонали End If If i < j Then s2 = s2 + a(i, j) 'Накопление суммы элементов выше главной диагонали End If If i > j Then s3 = s3 + a(i, j) 'Накопление суммы элементов ниже главной диагонали End If Next Next MsgBox (" Результат: s1 = " & s1) MsgBox (" Результат: s2 = " & s2) MsgBox (" Результат: s3 = " & s3) End Sub


Слайд 47

Пример 10 - Поменять местами первую и четвертую строку матрицы А[3,4] Sub PrimerMassivDvu_10() Dim a(), i, j, m, n, c As Integer m = InputBox("Введите m для определения числа строк матрицы", "Пример 10") n = InputBox("Введите n для определения числа столбцов матрицы ", "Пример 10") ReDim a(1 To m, 1 To n) For i = 1 To m For j = 1 To n a(i, j) = InputBox("Введите значение элемента массива", "Пример 10") Next Next


Слайд 48

For i = 1 To m For j = 1 To n If i = 1 Then c = a(1, j) a(1, j) = a(4, j) a(4, j) = c End If Next Next For i = 1 To m For j = 1 To n Debug.Print a(i, j) 'Вывод результата в окне отладки Next Next End Sub


Слайд 49

Пример 10 - Найти минимальный и максимальный элемент массива чисел В произвольной размерности и их координаты. Sub PrimerMassivOdn_MinMax() Dim b(), i, j, n, minb, maxb, k As Integer n = InputBox("Введите n для определения размера массива", "Пример - одномерный массив") ReDim b(n) For i = 1 To n b(i) = InputBox("Введите значение элемента массива", "Пример 10") Next


Слайд 50

minb = b(1) 'Установка начального значения переменной 'для определения минимального элемента For i = 1 To n If minb > b(i) Then minb = b(i) k = i 'Определение позиции минимального элемента в массиве End If Next MsgBox Prompt:="minb = " & minb & " k = " & k maxb = b(1) 'Установка начального значения переменной 'для определения максимального элемента For j = 1 To n If maxb < b(j) Then maxb = b(j) k = j 'Определение позиции максимального элемента в массиве End If Next MsgBox (" Результат: maxb = " & maxb & " k = " & k) End Sub


Слайд 51

Пример 9. Сформировать одномерный массив С, состоящий только из нечетных положительных элементов матрицы A[5,7]


×

HTML:





Ссылка: