Производная алгоритмическая структура Формирование 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Производная алгоритмическая структура Формирование



Производная алгоритмическая структура Формирование

 

Используется для заполнения вычислительной среды конкретными значениями в соответствии с заданными математическими зависимостями.

 

Особенности алгоритма.

1. В вычислительную среду вводится только размерность массива, а значения элементов массива формируются в соответствии с заданным правилом заполнения.

2. В зависимости от размерности массива организуется простой циклический процесс (одномерный массив) или цикл в цикле (двухмерный массив). Телом цикла служит правило заполнения, в соответствии с которым формируются значения элементов массива.

3. Значения элементов массива хранятся в вычислительной среде. Для визуального анализа значений элементов массива их требуется вывести на экран монитора или печатающее устройство.

Рассмотрим несколько примеров, иллюстрирующих использование производной алгоритмической структуры Формирование.

 

Пример 1.

Разработать информационную технологию, позволяющую заполнить в вычислительной среде единичную матрицу произвольной размерности m´ m.

Входные данные: m – целое число.

Выходные данные: матрица Е = [eij], , – массив целых чисел.

Математическая модель:

,

 

Схема алгоритма заполнения матрицы Е:

 
 

Код приложения:

Option Base 1

Private Sub Command1_Click()

Dim m As Integer, i As Integer, j As Integer, e() As Byte

m=InputBox(“Введите размерность массива m”)

ReDim e(m,m)

For i=1 To m

For j=1 To m

If i=j Then

e(i,j)=1

Else

e(i,j)=0

End If

Next

Next

‘Вывод значений элементов матрицы на форму

Print “Значения элементов матрицы Е:”

For i=1 To m

Print

For j=1 To m

Print e(i,j);

Next

Next

End Sub

 

Пример 2.

Разработать информационную технологию, позволяющую зaполнить матрицу Y=[yij], первый столбец которой хранит значения аргумента х (при изменении х от начального значения х0 до конечного значения хk с шагом Dх), а второй – значения функции y = sin(x).

Входные данные: х0 – вещественное число;

xk – вещественное число;

dx – шаг, вещественное число.

Выходные данные:

Y = [yij], , – массив вещественных чисел.

Размерность массива вычисляется по формуле:

m = ;

Математическая модель:

для x = x0..xk, i = 1..m, yi,1 = x, yi,2 = sin(x)

Схема алгоритма:

 

 

 


Код приложения:

Private Sub Command1_Click()

Dim x0 As Single, xk As Single, dx As Single

Dim i As Integer, y() As Single, m As Integer

x0=InputBox(“Введите начальное значение параметра цикла”)

xk=InputBox(“Введите конечное значение параметра цикла”)

dx=InputBox(“Введите шаг изменения параметра цикла”)

m=(xk-x0)/dx+1

ReDim y(1 To m,1 To 2)

x=x0

For i=1 To m

y(i,1) = x

y(i,2) = sin(x)

x=x+dx

Next

For i=1 To m

Print “y(“ & i & “,1)=” & y(i,1) & ” y(“ & i & ”,2)=” & y(i,2)

Next

End Sub

 

П р и м е ч а н и е. Значения y(i,1) и y(i,2) лучше выводить с использованием функции Format: Format (y(i,1), “0.00”), Format (y(i,2), “0.00”).

 

Частным случаем алгоритма структуры Формирование служит алгоритм ввода значений элементов массива. В этом случае в вычислительную среду вводятся не только размерность массива, но и значения элементов.

Алгоритм ввода значений элементов одномерного массива А произвольной размерности m и вывода введённых значений на форму представлен на схеме:

 

 

Алгоритм ввода значений элементов массива будет обозначаться одним блоком:

 
 

 

 

 


Алгоритм вывода значений элементов массива также будет обозначаться одним блоком:

 
 

 

 

 


Код приложения на языке Visual Basic, реализующий представленный выше алгоритм:

 

Option Base 1

Private Sub Command1_Click()

Dim m As Integer, i As Integer, a() As Integer

m=InputBox(“Введите размерность массива”)

ReDim a(m)

For i=1 To m

a(i)=InputBox(“Введите а(“ & i & ”)”)

Next

Print “Значения элементов введённого массива:”

Print

For i=1 To m

Print “a(“ & i & ”)=” & a(i)

Next

End Sub

 

Пример 4.

Разработать информационную технологию, позволяющую определить индексы элементов квадратной матрицы А произвольной размерности m´ т, расположенных на главной диагонали, значения которых равны ключу поиска (k), задаваемому вводом.

 

Входные данные: m – целое число;

A=[aij], , – массив целых чисел;

k – целое число.

Выходные данные: значения найденных индексов или сообщение об их отсутствии.

Математическая модель:

flag = Ложь;

для i = 1..m, если aii = k, то flag = Истина и вывод i;

eсли flag = Ложь, то вывод сообщения.

 
 

Схема алгоритма:

 

 

Код приложения:

Private Sub Form_Activate()

Dim m As Integer, i As Integer, j As Integer, k As Integer

Dim flag As Boolean, a() As Integer

m = InputBox("Введите количество строк матрицы")

ReDim a(1 To m, 1 To m)

For i = 1 To m

For j = 1 To m

a(i,j) = InputBox("a(" & i & "," & j & ")")

Next

Next

k = InputBox("Введите значение ключа поиска")

flag = False

For i = 1 To m

If a(i,i) = k Then

flag = True

Print "Индекс элемента =" & i

End If

Next

If flag = False Then

MsgBox "Элементов со значением " & k & " нет"

End If

Print “Значения элементов матрицы A:”

For i=1 To m

Print

For j=1 To m

Print a(i,j);

Next

Next

End Sub

Пример 5.

Разработать информационную технологию, позволяющую определить значение и местоположение элемента одномерного массива А произвольной размерности m, равного максимальному значению.

Входные данные: m – целое число;

A=[ai], – массив вещественных чисел.

Выходные данные:

k – значение максимального элемента массива, вещественное число;

q – значение индекса, определяющего местоположение максимального элемента, целое число.

Математическая модель:

k = a1 , q =1;

для i = 2..m, eсли ai > k, то k = ai, q = i

 

 

Схема алгоритма:

 
 

 


Код приложения:

Option Bаse 1

Private Sub Form_Activate()

Dim i As Integer, m As Integer, q As Integer, k As Double, a() As Double

m=InputBox(“ Введите размерность массива”)

ReDim a(m)

For i=1 To m

a(i)=InputBox(“a(“ & i & ”)”)

Next

k=a(1): q=1

For i=1 To m

If a(i)>k then

k=a(i): q=i

End If

Next

Print “Максимальное значение =” & k & Сhr(10) & _

”Индекс элемента массива = “ & q

Print Chr(10);“Исходный массив”

For i=1 To m

Print “a(“ & i & ”) =“ & Format(a(i),”0.000”)

Next

End Sub

Аналогичный алгоритм может быть использован и для нахождения экстремума функции и значения аргументов, при которых он достигнут.

 

Пример 6.

Разработать информационную технологию, позволяющую определить максимальное значение функции y=sin2(x)+cos(z/2)2 при изменении х от начального значения х0 до конечного значения хк с шагом Dх и z от начального значения z0 до конечного значения zk с шагом Dz.

Входные данные: х0, z0, хk, zk – вещественные числа;

dх – шаг изменения переменной х, вещественное число;

dz – шаг изменения переменной z, вещественное число.

Выходные данные:

fmax – максимальное значение функции, вещественное число;

xmax – аргумент х, соответствующий максимальному значению функции, вещественное число;

zmax – аргумент z, соответствующий максимальному значению функции, вещественное число.

 

Математическая модель:

fmax = –10000,0, xmax = х0, zmax = z0;

для x = x0..xk, z = z0..zk,

,

если y > fmax, то fmax = y, xmax = x, zmax = z

 

 

Схема алгоритма:

 
 

 


Код приложения:

Private Sub Command1_Click()

Dim x0 As Single, xk As Single, dx As Single, z0 As Single, zk As Single

Dim dz As Single, x As Single, z As Single, y As Single

Dim fmax As Single, xmax As Single, zmax As Single

х0 = Text1: xk = Text2: dx = Text3: z0 = Text4: zk = Text5: dz = Text6

fmax = -10000.0

xmax = х0: zmax = z0

For x = x0 To xk Step dx

For z = z0 To zk Step dz

y = Sin(x) ^ 2 + Cos((z / 2) ^ 2)

If y > fmax Then

fmax = y

xmax = x: zmax = z

End If

Next z

Next x

Print "Максимальное значение функции равно " & Format(fmax, _ "0.00") & Chr(10) & "Значение аргумента х=" & Format(xmax, _ "0.000") & Chr(10) & "Значение аргумента z=" & Format(zmax, "0.00")

End Sub

 

Результат выполнения кода приложения представлен на форме:

 
 

 

Пример 7.

Разработать информационную технологию, позволяющую определить местоположение элемента матрицы А произвольной размерности m´n, имеющего минимальное значение. При наличии нескольких одинаковых минимальных элементов выбрать элемент, имеющий наибольшие индексы.

Входные данные: m – целое число;

n – целое число;

A=[aij], , – массив целых чисел.

Выходные данные: min – минимальное значение элемента массива, целое число;

k и q значения индексов, определяющих его местоположение, целые числа.

Математическая модель:

min = a11, k = 1, q = 1;

для i = 1.. m, j = 1.. n,

если aij ≤ min, то min = aij, k = i, q = j

 

 

Схема алгоритма:

 
 

 


Код приложения:

Private Sub Command1_Click()

Dim m As Integer, i As Integer, j As Integer, k As Integer, q As Integer

Dim a() As Integer, min As Integer

m=InputBox(“Количество строк матрицы=”)

n =InputBox(“Количество столбцов матрицы=”)

Redim a(1 To m,1 To n)

For i=1 To m

For j=1 To n

a(i,j)=InputBox(“a(“ & i & ”,” & j & ”)”)

Next

Next

Print “Исходный массив”

For i=1 To m

Print

For j=1 To n

Print a(i,j);

Next

Next

min = a(1,1)

k=1: q=1

For i=1 To m

For j=1 To n

If a(i,j)<=min then

min = a(i,j)

k=i: q=j

End If

Next

Next

MsgBox “ Минимум = ” & min & Сhr(10) & ”Индекс i=” & i & _

“Индекс j=” & j

End Sub

3. ВЫЧИСЛИТЕЛЬНЫЙ ПРОЦЕСС НАКОПЛЕНИЕ

 

Служит для накопления сумм и произведений значений элементов массива, а также подсчета количества элементов в массиве, значения которых удовлетворяют заданному условию.

Различают следующие производные алгоритмические структуры:

- накопление суммы (Cумма);

- накопление произведения (Произведение);

- подсчет количества (Счётчик).

Пример 8.

Разработать информационную технологию, позволяющую вычислить сумму значений элементов первой и последней строк матрицы А произвольной размерности m × n.

 

Входные данные: m – целое число;

n – целое число;

A=[aij], , – массив вещественных чисел.

Выходные данные:

s – искомая сумма, вещественное число.

Математическая модель:

 

Схема алгоритма:

 


Код приложения:

Option Base 1

Private Sub Command1_Click()

Dim m As Integer, n As Integer

Dim s As Single, a() As Single, i As Integer, j As Integer

m=InputBox(“Введите количество строк матрицы”)

n=InputBox(“Введите количество столбцов матрицы”)

Redim a(m,n)

For i=1 To m

For j=1 To n

a(i,j)=InputBox(“a(“ & i & ”,” & j & ”)”)

Next j

Next i

s=0

For j=1 To n

s=s+a(1,j)+a(m,j)

Next j

Print “Исходная матрица”

For i=1 To m

Print

For j=1 To n

Print Format(a(i,j),”0.00”);

Next

Next

Msgbox “Сумма первой и последней строк матрицы равна ” & s

End Sub

Аналогичный алгоритм может быть использован для накопления суммы степенного ряда. В этом случае дополнительной переменной присваивается значение, равное первому члену степенного ряда.

 

Пример 9.

Разработать информационную технологию, позволяющую вычислить сумму степенного ряда: 0,5+ х + х 2/2+ х 3/3+… Количество членов степенного ряда, для которых необходимо вычислить сумму, задаётся вводом.

Входные данные: k – количество членов ряда, целое число;

х – вещественное число.

Выходные данные: s – значение искомой суммы, вещественное число.

Математическая модель:

Схема алгоритма:

       
   
 
 

 

 


Код приложения:

Private Sub Command1_Click()

Dim x As Single, k As Byte, s As Double, i As Integer

k=InputBox(“Введите количество членов степенного ряда”)

x=InputBox(“Введите значение х”)

s=0.5

For i=1 To k

s=s+x^ i/i

Next i

MsgBox “Сумма членов степенного ряда =” & s

End Sub

 

Пример 10.

 

Разработать информационную технологию, позволяющую вычислить произведение элементов матрицы А размерности m×n, имеющих чётные значения индексов строк.

Входные данные: m – целое число; n – целое число;

A=[aij], , – массив вещественных чисел.

Выходные данные: р – произведение элементов матрицы, имеющих чётные значения индексов строк, вещественное число.

 

Математическая модель:

Схема алгоритма:

 
 

 


Код приложения:

Option Base 1

Private Sub Command1_Click()

Dim i As Integer, j As Integer, m As Integer, n As Integer,

Dim p As Single, a() As Single

m=InputBox(“Введите количество строк матрицы”)

n=InputBox(“Введите количество столбцов матрицы”)

Redim a(m,n)

For i=1 To m

For j=1 To n

a(i,j)=InputBox(“a(“ & i & ”,” & j & ”)”)

Next

Next

p=1

For i=2 To m Step 2

For j=1 To n

р=р*a(i,j)

Next

Next

Print “ Произведение элементов матрицы с четными индексами _ строк =” & р

Print “Для матрицы”

For i=1 To m

Print

For j=1 To n

Print Format (a(i,j), “0.00”);

Next

Next

End Sub

Аналогичный алгоритм можно использовать для нахождения произведения членов степенного ряда. В этом случае дополнительной переменной присваивается значение, равное первому члену степенного ряда.

Пример 11.

 

Разработать информационную технологию, позволяющую вычислить произведение членов степенного ряда: 0,75×1/2×1/4×1/8×1/16×..… до члена ряда меньшего ε.

 

Входные данные: ε – точность (обозначим eps), вещественное число.

Выходные данные: р – произведение членов степенного ряда, вещественное число.

Математическая модель:

 

 

Схема алгоритма:

 
 


Пример 12.

 

Разработать информационную технологию вычисления значения факториала числа.

Входные данные: n – число, для которого считается факториал, целое число.

Выходные данные: fact – переменная, хранящая значение n!, целое число.

Математическая модель:

Схема алгоритма:

 
 

 

 

 


Код приложения:

Private Sub Command1_Click()

Dim n As Integer, fact As Long, k As Integer

n=InputBox(“Введите значение n”)

If n>0 Then

faсt=1

For k=2 To n

fact=fact * k

Next

MsgBox “Значение ” & n & ”! ” & ” равно ” & fact

Else

MsgBox “Недопустимое значение n=” & n

End If

End Sub

Пример 13.

 

Разработать информационную технологию, позволяющую определить количество отрицательных элементов в одномерном массиве А произвольной размерности m.

 

Входные данные: m – целое число;

A=[ai], – массив целых чисел.

Выходные данные: t - количество элементов массива, имеющих отрицательные значения, целое число.

Математическая модель:

t = 0;

для i = 1.. m, если ai < 0, то t = t + 1;

если t = 0, вывод сообщения

 

Схема алгоритма:

 

 

Код приложения:

Option Base 1

Private Sub Command1_Click()

Dim m As Integer, i As Integer, t As Integer, a() As Integer

m=InputBox(“Введите размерность”)

ReDim a(m)

t=0

For i=1 To m

a(i)=InputBox(“a(“ & i & ”)”)

Print a(i);

If a(i)<0 then t=t+1

Next

If t=0 then

MsgBox “Отрицательных элементов в массиве нет!”

Else

MsgBox “ В массиве ” & t & ”отрицательных элементов”

End If

End Sub

СИНТЕЗ СЛОЖНЫХ АЛГОРИТМОВ

Пример 14.

Разработать информационную технологию, позволяющую заполнить в вычислительной среде одномерный массив В значениями элементов массива А произвольной размерности m×n, имеющих чётные значения элементов.

Входные данные:

m – целое число;

n – целое число;

A=[aij], , – массив целых чисел.

Выходные данные:

B = [bi], – массив целых чисел.

Математическая модель:

k = 0;

для i = 1.. m, j = 1.. n,

если aij – четное, то k = k + 1 и bk = aij

 
 
Схема алгоритма:

 
 

 

 


да

 


нет
да

 

 


да

нет

 


да

 

 


Код приложения:

Option Base 1

Private Sub Command1_Click()

Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer

Dim a() As Integer, b() As Integer

m=InputBox(“Введите количество строк матрицы”)

n=InputBox(“Введите количество столбцов матрицы”)

ReDim a(m,n), b(m*n)

For i=1 to m

For j=1 to n

a(i,j)=InputBox(“a(“ & i & ”,” & j & ”)”)

Next

Next

k=0

For i=1 to m

For j=1 to n

If a(i,j) mod 2 =0 Then k=k+1:

b(k)=a(i,j)

Next j

Next i

Print “Исходный массив A”

For i=1 to m

Print

For j=1 to n

Print a(i,j);

Next

Next

If k <>0 Then

Print Chr(10);“Заполнен массив В ”

For i=1 to k

Print b(i);

Next

Else

Print “Четных значений элементов в массиве А нет”

End If

End Sub

Пример 15.

Разработать информационную технологию, позволяющую поменять местами элементы k-го столбца и q-й строки квадратной матрицы А произвольной размерности m×m.

Входные данные: m, k, q – целые числа;

A=[aij], , – массив целых чисел.

Выходные данные: A=[aij], , – массив целых чисел.

Математическая модель:

для i = 1.. m, j = m.. 1;

d = aik, aik = aqj, aqj = d

Схема алгоритма:

 
 
 
 
 


Код приложения:

Private Sub Command1_Click()

Dim i As Integer, j As Integer, k As Integer, q As Integer, m As Integer

Dim d As Integer, a() As Integer

m = Text1

k = Text2

q = Text3

ReDim a(1 To m, 1 To m)

For i = 1 To m

For j = 1 To m

a(i, j) = InputBox("a(" & i & "," & j & ")")

Next

Next

Print Chr(10); " Исходный массив А "

For i = 1 To m

Print

For j = 1 To m

Print a(i, j);

Next

Next

For i = 1 To m

For j = m To 1 Step -1

d = a(i, k)

a(i, k) = a(q, j)

a(q, j) = d

Next

Next

Print Chr(10); "Полученный массив А "

For i = 1 To m

Print

For j = 1 To m

Print a(i, j);

Next

Next

End Sub

 

Результат выполнения кода приложения представлен на форме:

 

 

 

Пример информационной технологии,

Пример 16.

Разработать информационную технологию, позволяющую упорядочить вектор А произвольной размерности m по возрастанию значений его элементов.

Входные данные: m – целое число;

A=[ai], – массив целых чисел.

Выходные данные: A=[ai], – упорядоченный массив целых чисел.

Математическая модель:

для n = m...1

y = –1000; для i = 1.. n;

если ai < y, то y = ai, k = i, ak = an, an = y

Схема алгоритма:

 

 
 

Код приложения:

Private Sub Form_Click()

Dim m As Integer, n As Integer, A() As Integer

Dim i As Integer, k As Integer, y As Integer

m = InputBox("Введите размерность вектора")

ReDim A(1 To m)

Print "Исходный массив"

For i = 1 To m

а(i) = InputBox("a(" & i & ")=")

Print а(i);

Next

For n = m To 1 Step -1

y = -10000

For i = 1 To n

If а(i) > y Then y = а(i): k = i

Next i

а(k) = а(n): а(n) = y

Next n

Print Chr(10); "Упорядоченный массив"

For i = 1 To m

Print а(i);

Next

End Sub


 

 

Производная алгоритмическая структура Формирование

 

Используется для заполнения вычислительной среды конкретными значениями в соответствии с заданными математическими зависимостями.

 

Особенности алгоритма.

1. В вычислительную среду вводится только размерность массива, а значения элементов массива формируются в соответствии с заданным правилом заполнения.

2. В зависимости от размерности массива организуется простой циклический процесс (одномерный массив) или цикл в цикле (двухмерный массив). Телом цикла служит правило заполнения, в соответствии с которым формируются значения элементов массива.

3. Значения элементов массива хранятся в вычислительной среде. Для визуального анализа значений элементов массива их требуется вывести на экран монитора или печатающее устройство.

Рассмотрим несколько примеров, иллюстрирующих использование производной алгоритмической структуры Формирование.

 

Пример 1.

Разработать информационную технологию, позволяющую заполнить в вычислительной среде единичную матрицу произвольной размерности m´ m.

Входные данные: m – целое число.

Выходные данные: матрица Е = [eij], , – массив целых чисел.

Математическая модель:

,

 

Схема алгоритма заполнения матрицы Е:

 
 

Код приложения:

Option Base 1

Private Sub Command1_Click()

Dim m As Integer, i As Integer, j As Integer, e() As Byte

m=InputBox(“Введите размерность массива m”)

ReDim e(m,m)

For i=1 To m

For j=1 To m

If i=j Then

e(i,j)=1

Else

e(i,j)=0

End If

Next

Next

‘Вывод значений элементов матрицы на форму

Print “Значения элементов матрицы Е:”

For i=1 To m

Print

For j=1 To m

Print e(i,j);

Next

Next

End Sub

 

Пример 2.

Разработать информационную технологию, позволяющую зaполнить матрицу Y=[yij], первый столбец которой хранит значения аргумента х (при изменении х от начального значения х0 до конечного значения хk с шагом Dх), а второй – значения функции y = sin(x).

Входные данные: х0 – вещественное число;

xk – вещественное число;

dx – шаг, вещественное число.

Выходные данные:

Y = [yij], , – массив вещественных чисел.

Размерность массива вычисляется по формуле:

m = ;

Математическая модель:

для x = x0..xk, i = 1..m, yi,1 = x, yi,2 = sin(x)

Схема алгоритма:

 

 

 


Код приложения:

Private Sub Command1_Click()

Dim x0 As Single, xk As Single, dx As Single

Dim i As Integer, y() As Single, m As Integer

x0=InputBox(“Введите начальное значение параметра цикла”)

xk=InputBox(“Введите конечное значение параметра цикла”)

dx=InputBox(“Введите шаг изменения параметра цикла”)

m=(xk-x0)/dx+1

ReDim y(1 To m,1 To 2)

x=x0

For i=1 To m

y(i,1) = x

y(i,2) = sin(x)

x=x+dx

Next

For i=1 To m

Print “y(“ & i & “,1)=” & y(i,1) & ” y(“ & i & ”,2)=” & y(i,2)

Next

End Sub

 

П р и м е ч а н и е. Значения y(i,1) и y(i,2) лучше выводить с использованием функции Format: Format (y(i,1), “0.00”), Format (y(i,2), “0.00”).

 

Частным случаем алгоритма структуры Формирование служит алгоритм ввода значений элементов массива. В этом случае в вычислительную среду вводятся не только размерность массива, но и значения элементов.

Алгоритм ввода значений элементов одномерного массива А произвольной размерности m и вывода введённых значений на форму представлен на схеме:

 

 

Алгоритм ввода значений элементов массива будет обозначаться одним блоком:

 
 

 

 

 


Алгоритм вывода значений элементов массива также будет обозначаться одним блоком:

 
 

 

 

 


Код приложения на языке Visual Basic, реализующий представленный выше алгоритм:

 

Option Base 1

Private Sub Command1_Click()

Dim m As Integer, i As Integer, a() As Integer

m=InputBox(“Введите размерность массива”)

ReDim a(m)

For i=1 To m

a(i)=InputBox(“Введите а(“ & i & ”)”)

Next

Print “Значения элементов введённого массива:”

Print

For i=1 To m

Print “a(“ & i & ”)=” & a(i)

Next

End Sub

 



Поделиться:


Последнее изменение этой страницы: 2016-12-10; просмотров: 896; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.254.35 (0.523 с.)