- •«Северный (Арктический) федеральный университет имени м.В. Ломоносова»
- •Расчетно-графическая работа
- •1 Работа с массивом
- •2 Программирование разветвленных алгоритмов
- •3 Программирование циклических алгоритмов(с неизвестным числом повторений)
- •4 Программирование циклических алгоритмов(с известным числом повторений)
- •Список использованной литературы
- •5 Процедуры и функции пользователя
- •6 Работа с информацией типа дата и время
- •7 Работа с логическими выражениями
3 Программирование циклических алгоритмов(с неизвестным числом повторений)
Задание: вычислить число π по итерационной формуле с номером, соответствующим номеру вашего ПК, с абсолютной погрешностью вычисления от 10-5 до 10-16. Найдите величину погрешности, при которой в числе π постоянным остаются 7 знаков после запятой. Определите программно время расчета для каждого варианта, покажите в окне сообщений таблицу, показывающую расчетное значение π, n и продолжительность расчета для различной погрешности.
Напишите 5 вариантов программы : 4 для цикла Do…Loop(с проверкой условия в начале и в конце с использованием While и Until в каждой из двух вариантов) и для
цикла While …Wend. Расчет для максимальной точности выполнить для одного варианта, т.к его продолжительность может достигать 15 – 30 мин.
Текст работы:
1)предусловие - While:
eps = 1e-7
a=1
s=0
n=0
Do While Abs(a) >eps
a= (-1)^n*(1/(6*n+1)+1/(6*n+5))
s=s+a : n=n+1
loop
MsgBOx "Расч. Pi = " & 3*s &vbLf& " п= " &n , ,"Гладкий В.С ИЭиТ-1-5"
Рисунок 3.1 – Результаты
Рисунок 3.2 – Блок-схема
2)предусловие – Until:
eps = 1e-7
a=1
s=0
n=0
Do Until Abs(a) <= eps
a= (-1)^n*(1/(6*n+1)+1/(6*n+5))
s=s+a : n=n+1
loop
MsgBOx "Расч. Pi = " & 3*s &vbLf& " п= " &n , ,"Гладкий В.С ИЭиТ-1-5"
Рисунок 3.3 - Результаты
Рисунок 3.4 – Блок-схема
3)постусловие - While:
eps = 1e-7
a=1
s=0
n=0
Do
a= (-1)^n*(1/(6*n+1)+1/(6*n+5))
s=s+a : n=n+1
loop While Abs(a) >eps
MsgBOx "Расч. Pi = " & 3*s &vbLf& " п= " &n , ,"Гладкий В.С ИЭиТ-1-5"
Рисунок 3.5 – Результаты
Рисунок 3.6 – Блок-схема
4)постусловие - Until:
eps = 1e-7
a=1
s=0
n=0
Do
a= (-1)^n*(1/(6*n+1)+1/(6*n+5))
s=s+a : n=n+1
loop Until Abs(a) <= eps
MsgBOx "Расч. Pi = " & 3*s &vbLf& " п= " &n , ,"Гладкий В.С ИЭиТ-1-5"
Рисунок 3.7 – Результаты
Рисунок 3.8 – Блок-схема
5)While …Wend:
eps=1e-7
a=1
s=0
n=0
t1=Time
Set W = CreateObject("Wscript.Shell")
While Abs(a) >eps
a= (-1)^n*(1/(6*n+1)+1/(6*n+5))
s=s+a : n=n+1
ifint(n/1e6)=n/1e6 then
W.Popup"n= "& n & " п = " & 3*s, 1, "Промежуточный результат", 4096
end if
wend
t2=time
Msgbox "Истинное значение п = 3,14159265358979"&vblf& _
"расчетное значение п = "& 3*s &vblf& _
"погрешность по а =" &formatnumber(Abs(a),15) _
&vblf& "разница расч. - ист.="& _
formatnumber(Abs(3.14159265358979-(3*s)),15) &vblf& _
"продолжительность расчета " & _
formatdatetime(t2-t1) &vblf& _
"n =" & n,vbexclamation+4096,_
"Гладкий В.С ИЭиТ-1-5"
Результаты:
Рисунок 3.7 – Результаты
Результаты 3.8 – Блок-схема
4 Программирование циклических алгоритмов(с известным числом повторений)
Задание:
С использованием оператора цикла For…Next и функции RNDсгенерировать один или два (для заданий 3 и 4) динамических массива из n действительных чисел в диапазоне от а до b для вычислений по заданной ниже формуле. Расчет по формуле выполнить с использованием оператора For…Next для nравного 10, 15 и 20. Исходные данные и результаты показать в окне сообщений, при формировании строки сообщения использовать цикл For each…Next.
Текст работы:
n=10
b=10
redim x(n),y(n)
Randomize
fori = 1 to n
x(i) =b*Rnd
Next
s=0
dimxs
fori=1 to n
s=s+x(i)
next
fori = 1 to n
y(i)=x(i)*s
Next
l= " "
For Each iks in x
l=l &iks& " " &vbLF
next
MsgBox l & "суммах(i) = " &s ,, " массив Х Гладкий С.В. 1-5"
K= " "
For Each igr in y
k=k &igr& " " &vbLF
next
MsgBox k ,, "массив Y ГладкийС.В. 1-5"
Рисунок 4.1 - Результаты
Рисунок 4.2 – Блок-схема
