русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

О П Е Р А Т О Р Ц И К Л А С П А Р А М Е Т Р О М


Дата добавления: 2014-11-27; просмотров: 768; Нарушение авторских прав


 

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

Пример 1. Вычислить путем многократного умножения ( - целое положительное число).

 

Блок-схема программы представлена на следующей странице.

 

 
 

 

 


Здесь i – параметр цикла, т.е. переменная, которая управляет количеством его повторений. В подготовительном блоке параметру цикла назначается определенное начальное значение, модифицирующий блок изменяет значение параметра, управляющий блок проверяет условие окончания цикла.

Пример 2.Вычислить и отпечатать значения функции для , изменяющегося от начального значения до конечного значения с шагом .

 

Количество вычислений функции :

,

где квадратные скобки определяют целую часть вещественного числа.

 

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

 

Блок-схема решения задачи:

 
 

 

 


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

 
 

 

 


Блок-схема для примера 2 будет иметь вид:

 

 
 

 

 


Синтаксическая диаграмма оператора цикла с параметром:

 

 
 

 


Имя переменной на диаграмме - это параметр цикла. Он должен иметь ординальный тип и должен быть описан в том же блоке, где находится сам оператор цикла.



Выражение 1 - начальное значение параметра, выражение 2 - его конечное значение. Эти выражения должны быть ординального типа, совместимого с типом параметра цикла.

Если в операторе цикла используется зарезервированное слово to, то шаг изменения параметра цикла равен +1; для downto этот шаг равен -1.

Блок "Оператор" в синтаксической диаграмме - это тело цикла. В частном случае это может быть составной или пустой оператор.

В теле цикла параметр не должен изменяться. Начальное и конечное значения параметра вычисляются только один раз, до начала цикла.

При нормальном завершении цикла значение его параметра считается неопределенным.

Работу оператора цикла можно отобразить следующей блок-схемой:

 

 

а) Вариант toб) Вариант downto

 

       
   

 


Из блок-схемы можно вывести такие заключения:

1) если в теле цикла изменяются переменные, входящие в состав выражений 1 или 2, то это не отражается на количестве повторений цикла;

2) если начальное значение параметра цикла больше его конечного значения (вариант to), то цикл ни разу не выполняется;

3) в варианте downto цикл ни разу не выполняется, если начальное значение параметра цикла меньше его конечного значения.

 

Пример 1а. Паскаль-программа для примера 1:

 

ProgramMult;

Var x,y : real;

i,n : word;

Begin

Ввод и печать x, n

y:=1;

Fori:=1tondo

y:=y*x;

Печать y

End.

Пример 2а. Паскаль-программа для примера 2:

 

Program Table;

Var x,xn,xk,hx,y : real;

i,n : word;

Begin

Ввод и печать xn, xk, hx

n:=Round((xk-xn)/hx)+1; x:=xn;

For i:=1 to n do

Begin

y:=exp(sqrt(x))*sqr(sin(x));

Печать x,y

x:=x+hx

End;

End.

 

Пример 3. Вычисление факториала y=n! =

 

Vari,n : byte;

y : longint;

Begin

Read(n);

y:=1;

For i:=2 to n do

y:=y*i;

Writeln(‘y = ‘,y)

End.

 

Пример 4. Вычисление двойного факториала y=n!!

Двойной факториал – это произведение четных чисел при четном значении переменной n или произведение нечетных чисел при нечетном n.

Vari,n : byte;

y : longint;

Begin

y:=1;

For i:=2 to n do

Ifodd(i) = odd(n)then

y:=y*i;

Writeln(‘y = ‘,y)

End.

Пример 5. Вычислить ряд

четырьмя способами:

1) последовательно слева направо;

2) последовательно справа налево;

3) слева направо отдельно положительные и отрицательные элементы, затем их вычитание;

4) то же, но справа налево.

 

Program Summa;

Var SumLR, { сумма, все слева направо }

SumRL, { сумма, все справа налево }

SumLRNeg, { сумма, отрицательные эл-ты, слева направо }

SumLRPos, { сумма, положительные эл-ты, слева направо }

SumRLNeg, { сумма, отрицательные эл-ты, справа налево }

SumRLPos, { сумма, положительные эл-ты, справа налево }

ElemLRNeg, { очередной отриц.элемент, слева направо }

ElemLRPos, { очередной полож.элемент, слева направо }

ElemRLNeg, { очередной отриц.элемент, справа налево }

ElemRLPos { очередной полож.элемент, справа налево }

: single;

i : integer; { параметр цикла }

Begin

SumLR:=0; SumRL:=0; SumLRPos:=0; SumLRNeg:=0;

SumRLPos:=0; SumRLNeg:=0;

For i:=1 to 5000 do

Begin

ElemLRPos:=1/(2*i-1); ElemLRNeg:=1/(2*i);

ElemRLPos:=1/(10001-2*i); ElemRLNeg:=1/(10002-2*i);

SumLR:=SumLR+ElemLRPos-ElemLRNeg;

SumRL:=SumRL+ElemRLPos-ElemRLNeg;

SumLRNeg:=SumLRNeg+ElemLRNeg;

SumLRPos:=SumLRPos+ElemLRPos;

SumRLNeg:=SumRLNeg+ElemRLNeg;

SumRLPos:=SumRLPos+ElemRLPos;

End;

Writeln('SumLR = ',SumLR:10:7);

Writeln('SumRL = ',SumRL:10:7);

Writeln('SumLRPos-SumLRNeg = ',(SumLRPos-SumLRNeg):10:7);

Writeln('SumRLPos-SumRLNeg = ',(SumRLPos-SumRLNeg):10:7);

End.

Примечание. Для описания вещественных переменных использован тип single вместо типа real, чтобы более четко показать влияние погрешности представления вещественных значений на результат вычислений (в типе single мантисса имеет длину три байта вместо пяти, как в типе real, что определяет меньшее количество значащих цифр в представлении вещественного числа).

 

Программа печатает следующие результаты:

SumLR 0.6930732

SumRL 0.6930972

SumLRPos-SumLRNeg 0.6931019

SumRLPos-SumRLNeg 0.6930976

 

Наиболее точная здесь сумма - SumRL.

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

 

Рассмотрим, как изменяется число 1/9000 при сложении его с числом 1/8998 или с числом 1/3. Мантиссу будем представлять с семью десятичными цифрами.

 

1/9000 = 0,0001111111 = 0,1111111 ×

1/8998 = 0,0001111357 = 0,1111357 ×

1/3 = 0,3333333 = 0,3333333 ×

 

a) 0, 1 1 1 1 1 1 1 ×

+ 0, 1 1 1 1 3 5 7 ×

¾¾¾¾¾¾¾¾¾

0, 2 2 2 2 4 6 8 ×

б) 0, 1 1 1 1 1 1 1 × 0, 0 0 0 1 1 1 1 ×

+ 0, 3 3 3 3 3 3 3 × Þ + 0, 3 3 3 3 3 3 3 ×

¾¾¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾¾

0, 3 3 3 4 4 4 4 ×

 

Во втором случае в первом слагаемом потеряны три значащие цифры.

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

 

 



<== предыдущая лекция | следующая лекция ==>
О П Е Р А Т О Р Ц И К Л А С П О С Т У С Л О В И Е М | Д И А П А З О Н Н Ы Й Т И П Д А Н Н Ы Х


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.848 сек.