Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 32

Работа добавлена на сайт samzan.net:


Лабораторная работа  3.

Тема - программирование циклических  вычислительных процессов с использованием операторов, реализующих базовые структуры цикла.

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

Общие сведения

Циклическая структура процесса вычислений предполагает, что для получения результата некоторые действия необходимо выполнить несколько раз. Например, чтобы получить таблицу значений функции на заданном интервале изменения аргумента с заданным шагом, необходимо соответствующее количество раз определить следующее значение аргумента и вычислить для него значение функции. Другой пример. Чтобы найти фамилию человека в списке, надо проверить первую фамилию списка, затем вторую, третью и т. д. до тех пор, пока не будет найдена нужная или не будет достигнут конец списка. Такие повторяющиеся действия называются циклами.

Процессы вычислений циклической структуры можно разделить на три группы:

- циклические процессы, для которых количество повторений известно – счетные циклы или циклы с заданным числом повторений;

- циклические процессы, завершающиеся по достижении или нарушении некоторых условий – итерационные циклы;

- циклические процессы, для которых возможны два варианта выхода из цикла: выход по завершении циклического процесса и досрочный выход по какому-либо дополнительному условию – поисковые циклы.

Графические элементы структуры цикла:

1. Цикл с заранее известным числом повторений (рис.1)

Рис.1

2. Цикл с постусловием (рис.2)

Рис.2

3. Цикл с предусловием (рис.3)

Рис.3

Для реализации циклических процессов используют операторы циклов.

1. Цикл с заранее известным числом повторений реализуется  с помощью оператора цикла for. Оператор цикла for организует выполнение одного оператора заранее известное число раз.

Существует два варианта этого оператора:

а) for i := i1 to i2 do A ;

б) for i := i1 downto i2  do A .

В этих операторах:

 i - параметр цикла, являющийся переменной порядкового типа (чаще всего integer; вещественный тип не допускается);

i1 - выражение, определяющее начальное значение параметра цикла;

i2 - выражение, определяющее конечное значение параметра цикла;

A  -  простой или составной выполняемый оператор (тело цикла).

i1 и i2 должны быть совместимы для присваивания с параметром цикла. 

Цикл действует таким образом. Сначала вычисляются и запоминаются начальное i1 и конечное i2 значения параметра цикла. Далее параметру цикла i присваивается начальное значение i1. Затем значение параметра цикла i сравнивается со значением i2. Далее, пока параметр цикла меньше или равен конечному значению (в первом варианте оператора), или больше или равен конечному значению (во втором варианте), выполняется очередная итерация цикла; в противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение оператора A (тела цикла), а затем присваивание параметру цикла следующего, бóльшего, значения (в первом варианте оператора) или следующего, меньшего, значения (во втором варианте). Естественно, если в первом варианте значение i1 больше i2 или во втором варианте значение i1 меньше i2, оператор A (тело цикла) не выполняется ни разу.

После выхода из цикла параметр цикла становится неопределенным, за исключением случая, когда выход из цикла был осуществлен с помощью оператора GOTO или стандартной процедурой Break.

2. Цикл с постусловием реализуется с помощью оператора цикла repeat. Оператор цикла repeat организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла осуществляется при истинности некоторого логического выражения.

Структура этого оператора:

repeat 

until B;

В этой структуре:

p1, p2, ... , pk – выполняемые операторы, составляющие тело цикла.

B - логическое выражение, истинность которого проверяется в конце каждой итерации.

Тело цикла выполняется, пока логическое выражение имеет значение False, а если результат равен True, происходит выход из цикла.

3. Цикл с предусловием реализуется  с помощью оператора цикла while. Оператор цикла while организует выполнение одного оператора неизвестное заранее число раз. Выход из цикла осуществляется, если некоторое логическое выражение окажется ложным. Так как истинность логического выражения проверяется в начале каждой итерации, тело цикла может не выполняться ни разу.

Структура этого оператора: while B do A ;

где  B - логическое выражение, истинность которого проверяется в начале каждой итерации;

A - простой или составной выполняемый оператор (тело цикла).

Перед каждым выполнением цикла вычисляется значение B. Если результат равен True, тело цикла выполняется и снова вычисляется значение логического выражения B. Если результат равен False, происходит выход из цикла и переход к следующему оператору программы.

Пример выполнения работы.

Задача 4.1. Составить программу для табулирования функции

при x = 0,9; 1,0; 1,1; 1,2.

Решение.

  1.  Анализ задачи.

Обозначим: a - начальное значение x; b - конечное значение x; h - шаг изменения x;  - граничное значение x.

Тогда:

a = 0,9; b = 1,2; h = 0,1.

2. Тест для отладки программы.

a = 0,9 ;

b = 0,9 ;

y = 0,92 e-0,9-sin(0,9)  = 0,25797.

3. Блок - схема:

4. Программа:

Program Fun1 ;                 { Пример шаговой таблицы функции}

Var

  x , y , a , b ,h, xgr : real ;        { Описание переменных }

Begin

    WriteLn ;

    WriteLn(' Введите a,b,h');

    ReadLn(a,b,h) ;                     { Ввод исходных данных}

    WriteLn ;

    WriteLn(' a=',a:6:2,' b=',b:6:2,'  h=',h:7:3); {Вывод

                                               исходных данных}

    WriteLn ;

             {   Вывод заголовка таблицы  }

    WriteLn('____________________') ;

    WriteLn('     x       y                        ') ;

    WriteLn('____________________') ;

    xgr := b + 0.5 * h ;  { Вычисление граничного значения x }

    x := a ;              { Занесение начального значения x  }

    repeat

          y := x*x * exp(-x) * sin(x) ;     {  Вычисление y  }

    WriteLn(x:7:1,y:10:5) ;          {  Вывод значений x, y  }

    x := x + h ;    { Подготовка переменной x к новому циклу }

    until x > xgr            { Проверка на окончание цикла }

End.                                         { Конец программы}

5. Вид печати:

a=  0.90 b=  1.20  h=  0.100

____________________

    x       y      

____________________

   0.9   0.25797

   1.0   0.30956

   1.1   0.35896

   1.2   0.40424

Задача 4.2. Элементы последовательности вычисляются рекуррентно по формуле . Составить программу для вычисления и печати числа элементов последовательности, удовлетворяющих неравенству ai>0,7 , если ao = 27, a значения i изменяются от 1 до 10.

Решение.

  1.  Анализ задачи.

Пусть n - число вычисляемых элементов последовательности,

k - число элементов, удовлетворяющих условию ai > 0,7.

Тогда         

ko =0 - начальное значение k.

Исходные данные:      ao = 27,  n = 10.

  1.  Тест для отладки программы

n = 2,

ao = 27,

a1 = 9,

a2 = 3,

k = 2.

  1.  Блок - схема:

4. Программа:

Program Pose1 ;        { Вычисление элементов последовательности

                        и их числа, удовлетворяющих условию   }

Var

  a0, a : real ;                        { Описание переменных }

  i, n, k  : integer ;

Begin

    WriteLn ;

    WriteLn(' Введите n,a0');

    ReadLn(n,a0) ;                               { Ввод n, a0 }

    WriteLn ;

    WriteLn(' Введено число вычисляемых элементов последовательности :' ,n:4);                                { Вывод n }

    WriteLn(' Начальное значение :',a0:6:1) ;      { Вывод a0}

    k :=0 ;               { Занесение начального значения k }

    i :=1 ;               { Занесение начального значения i }

    a :=a0 ;              { Занесение начального значения a }

    while i <= n do

          begin

               a := a / 3.0 ; { Вычисление текущего

                                элемента последовательности}

               if a > 0.7 then k := k + 1 ; {Проверка

                                            условия a > 0.7}

               i := i + 1   { Увеличение номера элемента

                              последовательности            }

          end ;

    WriteLn ;

    WriteLn(' k=',k:4) ;              {Вывод числа элементов,

                                     удовлетворяющих условию }

End.                                         { Конец программы}

5. Вид печати:

Введено число вычисляемых элементов последовательности :  10

Начальное значение :  27.0

k=   3

Задача 4.3. Используя формулу для элементов последовательности ai, составить программу для вычисления суммы n элементов этой последовательности.

Дано:

Решение.

  1.  Анализ задачи.

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

Пусть Si - сумма i первых элементов последовательности.

Тогда   

Начальные значения:

Основные формулы:

Исходные данные:

n=3 (тест),

n=7 (рабочий вариант).

2. Тест для отладки программы:

3. Блок - схема:

4. Программа:

Program Sum ; { Вычисление суммы заданного числа элементов

последовательности }

Var  S, a : real ;  { Описание переменных }

i, n : integer ;

Begin

           WriteLn(' Введите n');

           ReadLn(n) ;      { Ввод числа элементов последовательности}

           WriteLn(' Введено n=',n:4);   { Вывод n }

           S := 0.0 ;

           a := -1.0 ;

           for i := 1 to n do begin

           a := -a / i ; { Вычисление текущего элемента последовательности}

           S := S +a ;  {  и суммы  }

end ;

WriteLn ;

WriteLn(' сумма S=',S:10:4) ; { Вывод суммы   }

End.                                                                            { Конец программы}

5. Вид печати:

Введено n=   3

сумма S=0.6667

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

Дано:

Решение.

  1.  Анализ задачи.

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

Обозначим: a - начальное значение x; b - конечное значение x; h- шаг изменения x; .

Тогда: a = 2; b = 5; h = 0,5.

  1.  Тест для отладки программы:

.

.

.

- первый отрицательный элемент последовательности.

3. Блок - схема 

  1.  Программа:

Program Otr ;   { Вычисление 1-го отрицательного э-та  пос-ности}

Var    x , y , a, b, h : real ;                             { Описание переменных }

Begin     { Начало основного блока }

          Write('Введите a,b.h') ;

          ReadLn(a,b,h) ;                                   { Ввод исходных данных }

          x:=a-h ;

repeat      x := x +h ;

                 y := sin(x); { Вычисление y }

until (x+h>b) or (y<0);   {комбинированное условие выхода из цикла}

if   y<0   then   WriteLn('y=',y:9:6,' при x=',x:3:1)

 else     WriteLn('Элемент не найден') ;

End.                                                                          { Конец программы}

  1.  Вид печати:

y=-0.350783 при x=3.5

Задача 4.5. Разработать программу, определяющую сумму ряда  для значения  с точностью

Решение.

  1.  Анализ задачи.

Из соответствующих разделов математики известно, что суммой ряда называется предел, к которому стремится последовательность частичных сумм  данного ряда, если он существует. Если такой предел существует, то ряд называется сходящимся, в противном случае - расходящимся. Также известно, что знакопеременный ряд сходится, если , где  и  - соответственно n-й и n+1-й члены ряда.

Кроме того, доказано, что , где  - сумма ряда, а  - сумма  n членов ряда.

Следовательно, для получения требуемого результата будем накапливать частичную сумму элементов ряда, пока очередной член ряда не станет меньше заданной погрешности: .

Имеем .

Тогда  .  Отсюда следует, что  

  1.  Тест для отладки программы:

3. Блок - схема 

4. Программа.

Program Sum_R;

Var

  S,r,x,eps:real;                             { Описание переменных }

Begin

  WriteLn(' Введите  x и eps');

  Readln(x,eps);                            { Ввод исходных данных }

  If abs(x) > 1 Then  {если x>1, то ищем сумму ряда}

    begin

      S:=1;

      r:=1;

      While abs(r) > eps do

        begin

          r:=-r/x;

          S:=S+r;

        end;

  WriteLn(' При x=',x:3:1,'  S=',S:7:5)

    end

  else Write('Ряд расходится ');

END.                                                { Конец программы}

  1.  Вид печати:

При x=6.3  S=0.86302

Варианты задания

Задача 4.1. Составить программу для табулирования функций  и при изменении  от  до  с шагом . В первой колонке печатать , во второй - , в третьей - . Исходные данные приведены в табл. 4.1.

Таблица 4.1

Вариант

1.

0,3

0,36

0,01

2.

0,12

0,22

0,02

Продолжение таблицы 4.1

Вариант

3.

0,1

3,6

0,5

4.

1,2

2,2

0,2

5.

0,3

1,1

0,1

6.

0,5

1,5

0,2

7.

0,1

0,15

0,01

8.

0,5

0,7

0,02

9.

1,5

1,6

0,01

10.

2,0

2,7

0,1

11.

-1,5

1,0

0,5

12.

-1,2

0,4

0,2

13.

0,2

0,7

0,1

14.

0,1

0,8

0,1

15.

0,3

1,2

0,1

Продолжение таблицы 4.1

Вариант

16.

1,5

2,5

0,1

17.

3,0

3,9

0,1

18.

0,2

0,28

0,01

Задача 4.2. Элементы последовательности заданы рекуррентно (табл. 4.2). Составить программу вычисления и печати числа элементов последовательности, удовлетворяющих указанному неравенству.

Таблица 4.2

Вариант

Формула

Изменение  i

Начальное

Неравенство

от

до

значение

1.

1

20

ao = 6

ai > 1

2.

1

10

ao = 1

ai < 5

3.

1

12

ao = 2

ai > 100

4.

1

20

ao = 1

ai < 40

5.

1

10

ao = 2

ai > 15

6.

1

20

ao = 1

ai <14

7.

1

6

ao = -1

ai > 500

8.

1

15

ao = 100

ai < 10

9.

1

10

ao = 1,2

ai > 5

10.

1

10

ao = 2

ai < 3

11.

1

12

ao = 1

ai > 10

Продолжение таблицы 4.2

Вариант

Формула

Изменение  i

Начальное

Неравенство

от

до

значение

12.

1

12

ao = 2

ai < 150

13.

1

15

ao = 36

ai > 0,1

14.

1

11

ao = 64

ai > 10

15.

1

14

ao = 3

ai > 4

16.

1

18

ao = 1

ai >-20

17.

1

15

ao = 1

ai <5

18.

1

12

ao = 1,5

ai > 3

Задача 4.3. Используя формулу для элементов последовательности ai, составить программу для вычисления суммы n элементов этой последовательности (табл.4.3). Составить рекуррентные соотношения там, где это необходимо.

Таблица 4.3

Вариант

ai

Начальное

значение i

n

1.

0

8

2.

1

7

3.

1

9

4.

1

10

Продолжение таблицы 4.3

Вариант

ai

Начальное

значение i

n

5.

1

7

6.

1

6

7.

1

6

8.

2

6

9.

1

8

10.

1

6

11.

1

8

12.

1

10

13.

1

6

14.

1

5

15.

1

10

16.

2

7

17.

1

8

18.

1

6

Задача 4.4. Разработать программу, которая определяет первый отрицательный (положительный) элемент последовательности значений функции  при изменении  в интервале  с шагом . Исходные данные приведены в табл. 4.4.

Таблица 4.4

Вариант

Первый элемент

1.

1

3

0,25

отрицательный

2.

-1

2

0,5

положительный

3.

-1

-0,5

0,1

отрицательный

4.

-1,3

0,1

0,2

положительный

5.

1

1,5

0,1

отрицательный

6.

-5

0

1

положительный

7.

0

6

1

отрицательный

8.

0,7

1

0,05

положительный

9.

0,25

1,25

0,25

отрицательный

10.

-0,5

0,7

0,3

положительный

11.

-0,8

-0,2

0,1

отрицательный

12.

0,9

1,2

0,05

положительный

13.

0,6

1

0,1

отрицательный

Продолжение таблицы 4.4

Вариант

Первый элемент

14.

0,9

1,2

0,05

положительный

15.

0,4

0,7

0,05

отрицательный

16.

0,2

0,8

0,1

положительный

17.

-3

2

1

отрицательный

18.

1

7

1

положительный

Задача 4.5. Разработать программу, определяющую сумму ряда  для заданного значения  с точностью  Исходные данные приведены в табл. 4.5.

Таблица 4.5

Вариант

1.

0,45

0,01

2.

0,76

0,0001

3.

0,84

0,001

4.

0,29

0,00001

5.

0,44

0,001

6.

0,19

0,00001

Продолжение таблицы 4.5

Вариант

7.

0,21

0,01

8.

0,91

0,001

9.

0,37

0,0001

10.

0,05

0,00001

11.

0,13

0,01

12.

0,82

0,001

13.

 

0,66

0.0001

14.

0,44

0,00001

15.

0,25

0,01

16.

0,21

0,001

17.

0,78

0,0001

18.

0,32

0.00001

PAGE  23


Начало

x=a-h

x=x+h

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

Конец

Да

Да

Нет

ет

Тело цикла

i := n1, n2, h

Тело цикла

Условие

Да

Нет

Тело цикла

Условие

Нет

Да

Начало

Ввод a, b, h

Вывод a, b, h, заголовка таблицы

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3

EMBED Equation.3  

EMBED Equation.3  

Вывод  x, y

Конец

Да

Нет

Начало

Начало

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

Вывод   k

Ввод - вывод  EMBED Equation.3

Да

Да

Нет

Нет

Начало

Ввод – вывод n

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

Вывод s

Конец

EMBED PBrush  

EMBED PBrush  

EMBED PBrush  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

Ряд

расходится

EMBED Equation.3  

Начало

Да

Нет

Нет

EMBED Equation.3  

EMBED Equation.3  

Да

EMBED Equation.3  

EMBED Equation.3  




1. Дипломная работа- Социально-психологические факторы эффективности общения преподавателя и учащихся
2. тема що об~єднує норми національного законодавства міжнародних договорів та звичаїв які регулюють майнові
3. Особенности строения акчагыльских отложений в нижнем течении р
4. СевероКавказский федеральный технический университет
5.  Тростниковый и свекловичный сахар сахарный песок рафинад является важным пищевым продуктом
6. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата філософських наук Харків2
7. комунікаційних технологій Навчальна дисципліна- Мережні операційні системи Лабораторія- Інформа1
8. Тема- Інвестування в системі міжнародного бізнесу1
9. на тему- ldquo;Перериванняrdquo; Виконав- студент групи СКСс11 Липовий Р
10. Вам пропонується відповісти на 75 питань
11. тема закономерно развивается переходя от равновесного состояния к неравновесному и так далее
12. Акушерська справа Охорона праці 1 Акушерка нарушила правила противопожарной безопасности что при
13. Интерференция света
14. сместившийся вниз по склону под действием силы тяжести массив слоистых или массивных горных пород
15. тема в результате некоторого процесса переходит из состояния А в состояние В и затем возвращается в начально
16. Введение план этой книги Чтобы увидеть свой дом лучше всего остаться дома; но если это не удастся обойди.
17. Варианты варианта Распо
18. Чусовая- исторический портрет
19. здоровый человек и его окружение
20. Тема- Робота з фінансовоекономічними функціями в MS Excel