Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ministerstvo_obrazovania_i_nauki_Rossyskoy_Fed....docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
910 Кб
Скачать
☆

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 – Блок-схема