Пример выполнения задачи 4

Задание: В соответствии с условием разработать алгоритм комбинированной структуры и составить программу

Условие:      Вычислить значение функции

                 ,                   0,5 < с < 2,5

y =      ,       с ≤ 0,5 или с ≥ 2,5,

                

для с = -1,5; -0,5; -0,1; 0; 0,5; 1,75; 1,8; 2,5; 3,4; 5,7.

Тут  .       Пренебречь членами ряда, меньшими   ε = 10 - 4

Решение:  обозначим z → Z, z n → ZN, i →I, n → N, ε → EPS как простые переменные,  c → C(I), y → Y(I) как одномерные массивы, длина каждого из которых составляет 10 элементов (по количеству заданных значений с).  

Комбинированный алгоритм данной задачи состоит из фрагментов разветвляющегося алгоритма и двух циклических: простого (с заранее известным числом повторений) и итерационного (для вычисления суммы Z), прекращение которого происходит при достижении заданной точности вычислений zn < ε = 10-4.

 

Реализация итерационного цикла возможна только с помощью циклических алгоритмов типа ''Пока'' или ''До''. Для простого цикла можно использовать цикл ''Со счетчиком''.

 

Первая часть алгоритма осуществляет вычисление переменной Z (итерационный цикл) значение которой используется во второй части (простой цикл вычисления функции Y(I) с разветвлением – выбором соответствующей формулы, в зависимости от введенного значения переменной C(I)).

 

 

1-й вариант                                                                

Блок – схема           

 

n=1, z =0


                                                               

                                                    


                                           +

                                                           

 

     
 


               

 


                       +                                                  

     
Y(i) 1-я формула
 
Y(i) 2-я формула

 


                                     

 








Программа

REM алгоритм комбинированной структуры       ‘ оператор- комментарий

DIM  EPS, N, Z, ZN, I, C(1 TO 10), Y(1 TO 10)               ‘ описание переменных                

INPUT “ EPS ”; EPS                                                                      ‘ ввод данных          

DATA –1.5,-.5,-.1,0,.5,1.75,1.8,2.5,3.4,5.7                               ‘ строка данных          

N = 1: Z = 0                                                                ‘ оператор  присваивания

DO                                                                             ‘ оператор начала цикла

   ZN = 0.1*N / (N+0.6)^3: Z=Z+ZN                ‘ операторы присваивания    N= N + 1

LOOP WHILE ABS(ZN) > EPS                                          ‘ завершение цикла

PRINT “Z=”; Z                                                                                               ‘ вывод

FOR I = 1 TO 10                                                         ‘ оператор начала цикла

READ C(I)                                                                                    ‘ ввод данных          

IF C(I)>.5 AND C(I)< 2.5 THEN                    ‘ оператор условного перехода

      Y(I) = (C(I) * Z - 3) ^ 2                                   ‘ оператор присваивания

         ELSE Y(I) =.5 * Z ^ 3 - 5 * C(I)                     ‘ оператор присваивания

  END IF                                ‘ завершение оператора условного перехода

PRINT “Y”; I; “=”;Y(I)                                                                           ‘ вывод

NEXT I                                                                                  ‘ завершение цикла               

END                                                                                       ‘ конец програм мы               

Й вариант (с использованием подпрограммы пользователя)

Замечания

Фрагмент вычисления Z выделен в отдельный программный модуль – подпрограмму пользователя (SUB) с именем SUMZ.

Место подпрограммы SUB - после текста основного модуля.

Ввод программы, в тексте которой находится обращение к подпрограмме пользователя, выполняется в 2 этапа:

1. После ввода последней строки основной программы необходимо ввести часть заголовка процедуры, а именно SUB <имя> и нажать ENTER. 

На экране появятся 3 строки

SUB имя

-

END SUB

2. Ввод текста процедуры.

После ввода последнего оператора подпрограммы необходимо нажать клавишу F2.

На экране в поле диалога появляются имена головного модуля (например, UNTITLED) и функции.

С помощью курсорных клавиш и ENTER  можно перейти в поле редактирования головного модуля или подпрограммы.

 

Запуск процедуры SUB осуществляется из головной программы оператором CALL

CALL имя подпрограммы (факт. параметр[,ф.п....])

 

Обмен данными между головным модулем и подпрограммой, осуществляется 2 способами:

 

1. Использование глобального объявления типов данных с помощью оператора DIM SHARED (данные, которые объявлены глобальными, доступны как в основной программе, так и в процедуре)

2. Использование механизма формально-фактических параметров (здесь подпрограмма использует формальные параметры, значения которых определяются с помощью фактических параметров при обращении к подпрограмме).

Между фактическими и формальными параметрами существует соответствие по типу, количеству и порядку следования.

Оба способа обмена могут быть использованы в одной процедуре.

 

После выполнения подпрограммы SUB управление передается оператору, следующему за оператором – вызовом подпрограммы CALL

 

Блок – схема

     
 


                                                                            

         
 



          +                               -

 

Y(i) 2-а формула
 

                                                                                +


                                                                                       

     
 







Программа

REM алгоритм комб. структуры с подпрограммой ‘ оператор- комментарий

REM       основная  программа

DIM SHАRED I, EPS, N, Z, ZN                    ‘ описание простых переменных

DIM  C(1 TO 10),Y(1 TO 10)                                           ‘ описание массивов             

INPUT “ EPS ”; EPS                                                                      ‘ ввод данных           

DATA –1.5,-.5,-.1,0,.5,1.75,1.8,2.5,3.4,5.7                               ‘ строка данных          

CALL SUMZ(EPS,Z)                      ‘ обращение к подпрограмме вычисления Z                

FOR I = 1 TO 10                                                          ‘ оператор начала цикла

READ C(I)                                                                                    ‘ ввод данных                

IF C(I)>.5 AND C(I)< 2.5 THEN                ‘ оператор условного перехода

      Y(I) = (C(I) * Z - 3) ^ 2                                   ‘ оператор присваивания

         ELSE Y(I) =.5 * Z ^ 3 - 5 * C(I)                    ‘ оператор присваивания

  END IF                                ‘ завершение оператора условного перехода

PRINT “C”; I; “=”;C(I)                                                                           ‘ вывод

NEXT I                                                                           ‘ завершение цикла

END                                                                     ‘ конец основной   программы          

 

SUB SUMZ(EPS,Z)                          ‘ заголовок (начало) подпрограммы SUMZ

N = 1: Z = 0                                                              ‘ операторы присваивания

DO                                                                                ‘ оператор начала цикла

ZN =.1*N / (N+0.6)^3: Z=Z+ZN: N= N + 1         ‘ операторы  присваивания

LOOP WHILE ABS(ZN) > EPS                                               ‘завершение цикла

PRINT “Z=”; Z                                                                                          ‘ вывод

   END SUB                                                           ‘ конец подпрограм мы  SUMZ           

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

EPS?.001 _

Z = 5.597609E-02

Y2 = 2.500088

Y3 = 5.000088

Y4 = 8.769555E-05

Y5 = -2.499912

Y6 = 8.421847

Y7 = 8.40561

Y8 = -12.49991

Y9 = -16.99991

Y10 = -28.49991


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: