Написание программ вычисления факториалов

Каждый оператор в программе Harmonic определял переход из одного множества состояний в другое.
Рассмотрим еще один пример.
Пример 10.1. Написать программу вычисления f(n)=n! , где n — натуральное, либо равно 0.
Program Factorial (input, output);
{ Программа Factorial вычисляет значение функции п!
Input (nÎ N)Ù(n ⊃3; 0)
Output (Fctrl Î N)Ù(Fctrl ⊃3; 1)Ù(Fctrl=)
}
var i, n, fctrl integer ; { n — исходное значение;
fctrl — результат;
i — параметр цикла
}
begin
{Ввод исходных данных}
write (¢Введите значение n = ¢) ;
readln ( n ) ;
{Проверка корректности исходных данных}
if n<0 then writeln (¢Ошибка.¢ п ¢не может быть меньше 0¢)
else
begin
if n=0 then fctrl =1
else
begin
fctrl =1 ;
for i =2 to n do fctrl =fctrl * i
end {if n=0};
{Вывод результата}
writeln (¢ При n = ¢ , n , ¢_ n! = ¢ , fctrl )
end {if n<0}
end {Program}.
Рис. 10.1.
В этой программе в строке 1 мы определяем типы переменных, которые мы будем использовать при вычислениях. В строке 2 пользователю выдается приглашение ввести исходное значение п , а в строке 3, с помощью оператора readln (n) значение, заданное пользователем, полагается текущим значением переменной п . Строка 4 — это проверка корректности исходных данных. Если текущее значение n < 0 , то пользователю будет выдано сообщение об ошибке.
В соответствии с определением функции n!

в строке 5, в зависимости от текущего значения, происходит выбор способа вычисления n! . Если n=0 , то переменная fctrl принимает значение 1. Если n⊃1;0 , то в строках 6 и 7 в цикле вычисляется произведение 1´2´3´…..´(п-1)´п . В строке 6 определяется начальное значение переменной fctrl . Обратите внимание, до этого момента значение этой пременной было не определено. Строка 7 — это оператор цикла. Переменная i — это параметр цикла, который последовательно принимает значения 2, 3, 4 и т.д. до п включительно. Для каждого значения параметра цикла выполняется тело цикла
fctrl = fctrl * i .
Ну и наконец, строка 8 — вывод полученного результата.
Последовательность итераций цикла в строке 7 для п = 6 показана на рисунке 10.2. Под итерацией цикла мы будем понимать выполнение тела цикла для конкретного значения параметра цикла.
Рис. 10.2.
Введение Pre и Post условий.
В зависимости от исходного значения п , мы будем иметь разное число итераций цикла и разные состояния. Итак, на основе сделанного, мы можем сделать вывод всякий оператор в программе определяет переход из одного множества состояний в другое.
Мы уже умеем определять множество с помощью предикатов. Пусть Q и R — предикаты, определяющие множество состояний до выполнения оператора S и после выполнения оператора S соответственно.
Это записывается так
{Q} S {R} .
Это преобразование множества Q во множество R и определяет семантику оператора S.
Определение 10.1. Предикат Q называется предусловием оператора S, а предикат R — постусловием оператора S, если
{Q} S {R} .
Например, оператор fctrl =1 ; из строки 7 рис. 10.1, любое состояние вычислительного процесса перерабатывает в состояние, где fctrl=1, т.е.
Q º T , а R º fctrl =1.
Семантика оператора присваивания.
Наша задача определить семантику оператора присваивания в терминах множеств состояний. Это означает, что нам надо определить взаимосвязь пред и постусловий для оператора присваивания. Эту задачу мы рассмотрим применительно к простым переменным.
Определение 10.2. Обозначим wp(S,R) — предикат, определяющий множество всех состояний, для которых выполнение оператора S, обязательно заканчивается за конечное время и обязательно в состоянии, удовлетворяющем предикату R.
Пример 10.1.
Пусть S — это оператор присваивания
i = i+1 ,
а R º i £ 1 , тогда
wp(i = i+1 , i £ 1)=( i £ 0).
Действительно, выполнение i = i+1 может завершиться в состоянии
i £ 1 только, если i было меньше или равно нулю. Как следует из свойства операции сложения, если i > 0 , то i+1 >1 .
Пример 10.2.
Множество состояний, определяемых предикатом wp(S,T) для некоторого оператора S, есть множество всех состояний, таких, что выполнение оператора S, начавшееся в одном из этих состояний, обязательно заканчивается.
Определение 10.3. Обозначим предикат, который получается из предиката R , если в нем заменить все свободные вхождения переменной x на выражение е .
Например, если R(x,y)=(x+y) , то

Пусть
E=x Тогда

, т.к. i не свободно в Е.

Определение 10.4. wp(x = e , R) = если domain(e) , то ;
где domain(e) — предикат, описывающий множество состояний, для которых значение выражения е определено.
Примеры 10.3.
wp(x =5 , х=5) = (5=5) = Т ,
т.е. любое состояние оператор x =5 перерабатывает в состояние, на котором предикат х=5 выполняется.
wp(x =5 , х⊃1;5) = (5⊃1;5) = F ,
т.е. нет такого состояния, которое бы оператор x =5 , перевел в состояние х⊃1;5 .
wp(x =x+1 , х<0) = (x+1<0) =(x<-1) .
wp(x =x´x , х4=10) = ((x´x)4=10) = (x8=10) .
Пусть с — константа, тогда
wp(x =е , х=с) = (е=с) ,
т.е. оператор x =е обязательно завершится и даст в результате состояние, где x имеет значение с, если, и только если, значение выражения е при выполнении этого оператора будет равно с .
Пусть с — константа, а х и y — имена двух разных переменных, тогда
wp(x =е , у=с) = (у=с) ,
т.е. выполнение оператора x = е не может изменить значение переменной у.
В последнем примере предполагается, что x =е может изменить только значение переменной х. Вычисление выражения е не может изменить значения никакой переменной, т.е. нет, так называемого, побочного эффекта. Побочный эффект мы рассмотрим позднее в лекции 15.
Запрещение побочных эффектов исключительно важно, т.к. это позволяет рассматривать выражения в программе, так же, как в математике. Это означает, что выражение в программе обладает многими свойствами выражений в математике.
Идея описания семантики оператора в терминах пред- и постусловий применима не только к отдельному оператору, но и к группе операторов. Покажем, что последовательность операторов
t =х ; x =y ; y = t ;
обеспечивает обмен значениями у переменных х и y .
Пусть начальное значение {x=Y , y=X}.
{x=Y Ù y=X}
t =х ;
{x=Y Ù y=X Ù t=Y}
x =y ;
{x=X Ù y=X Ù t=Y}
y = t ;
{x=X Ù y=Y Ù t=Y}
или
{x=Y Ù y=X} t =х ; x =y ; y = t ; {x=Х Ù y=Y}.
Что и требовалось доказать.
Условный оператор.
Условный оператор в большинстве языков программирования реализует операцию композиции “выбор”. Этот оператор позволяет выбрать ту или иную последовательность операторов в зависимости от текущего состояния вычислительного процесса.
Пример 10.4.
if x=>0 then z =x else z =-x.
В результате выполнения этого условного оператора, переменная z получит значение, равное абсолютной величине х .
Согласно синтаксису языка Pascal, между ключевыми словами if и then должно стоять логическое выражение. Если значение этого логического выражения Т, то выполняется оператор, стоящий после then, если — F, то оператор, стоящий после else.
Определение 10.3.
wp(if B then S1 else S2 , R) =
= domain (B)Ù(B Ú ØB)Ù((B Þ wp(S1 , R))Ù(ØBÞwp(S2 , R))) ,
где domain (B) — предикат, определяющий область определения для логического выражения В.
Обычно, B — всюду определенный предикат, поэтому член domain (B) опускают, и остается
wp(if В then S1 else S2 , R)= B Þ wp(S1 , R) Ù ØBÞwp(S2 , R)
Покажем, что при любых начальных условиях, выполнение оператора из примера 10.4. дает в результат в z абсолютную величину х.
wp( if x=>0 then z =x else z = -x , z =abs(x))=
= x ⊃3; 0 Þ wp(z =x , z =abs(x)) Ù x < 0 Þ wp(z = -x , z = abs(x))=
= x ⊃3; 0 Þ x = abs(x) Ù x < 0 Þ -x = abs(x) = TÙT = T ,
т.е., при любом предусловии этот оператор даст в качестве значения
z =abs(x).
Пример 10.5. Покажем, что при любом начальном состоянии оператор
if x=>y then z =x else z = y
дает z =max(x,y).
wp(if x ⊃3; y then z =x else z = y , z =max(x,y))=
=((x ⊃3; y) Þ( z =x, z =max(x,y))) Ù ((x =(x ⊃3; y) Þ (x=max(x,y)) Ù ((x Пример 10.6. Покажем, что
wp(if x=>y then z =x else z = y , z =y)= (x £ y).
wp(if x=>y then z =x else z = y , z =y)=
(x ⊃3; y) Þ ( z =x, z =y) Ù (x (x ⊃3; y) Þ (x=y) Ù (x У читателя может сложиться мнение, что для доказательства того, что было сделано в этих примерах, потрачено слишком много усилий. В конце концов, это можно было получить, руководствуясь интуитивными соображениями. Однако, важно уже сейчас научиться проделывать подобные формальные преобразования. Это приведет к лучшему пониманию условного оператора. При построении и анализе некоторых программ, эта техника будет совершенно необходима. Даже выполнение небольшого числа упражнений будет способствовать изменению привычных для нас способов обдумывания программ и того, что называется интуицией программиста.

Итерации
Cостояние

1-я итерация i£n ®

i 2
fctrl 1
n 6

2
2
6

2-я итерация i£n ®

3
2
6

3
6
6

3-я итерация i£n ®

4
6
6

4
24
6

4-я итерация i£n ®

5
24
6

5
120
6

5-я итерация i£n ®

6
120
6

6
720
6

Заказывайте рефераты — 150 р. курсовые — 700 р. дипломы — 2500 р.

Оценить/Добавить комментарий

Имя

Оценка НеудовлетворительноУдовлетворительноХорошоОтлично

document.all.comments_form.pincode.value=38*99+27*41+72*64;

Работы, похожие на Реферат Написание программ вычисления факториалов

Проектирование и разработка сетевых броузеров на основе теоретико …

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ТАВРИЧЕСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ им. В.И.Вернандского МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ КАФЕДРА ИНФОРМАТИКИ … x X, u U. Обозначим длину дуги u=(x,y) через d(u). Кратчайшую длину пути из х в Для каждой помеченной вершины х в этой цепи изменить величину потока ф'(y,x)=ф(y,x)+d(z), если х имеет пометку (+y,d(x)) или ф'(y,x)=ф(y,x)-d(z), если х имеет пометку (-y,d(x …
Раздел Рефераты по информатике, программированию Тип дипломная работа Просмотров 502 Комментариев 0 Похожие работы Оценило 7 человек Средний балл 2.9 Оценка 3 Скачать

Проектирование трансляторов

ЛЕКЦИЯ 1 СУЩНОСТЬ ПРЕДМЕТА. СОДЕРЖАНИЕ КП. СРОКИ. ОРГАНИЗАЦИЯ РАБОТ. МАТЕМАТИЧЕСКИЙ АППАРАТ. СТРУКТУРНАЯ СХЕМА ТРАНСЛЯТОРА. ПРОХОДЫ ТРАНСЛЯТОРА … xUy = xuy, где U C Vn, x, u, y C V. V*={z ° z = «»,z = xU}, z,x C V*, U C V — любой символ из V.
Раздел Рефераты по информатике, программированию Тип реферат Просмотров 353 Комментариев 1 Похожие работы Оценило 1 человек Средний балл 5 Оценка неизвестно Скачать

Лекции по C++

Астраханский государственный технический университет Кафедра «Информационных технологий и коммуникаций» Конспект лекций по дисциплине «Основы … A B C D E F G H I J K L M N O P Q R T U V W X Y Z Переменные x и y задаются своими определениями.
Раздел Рефераты по информатике, программированию Тип реферат Просмотров 618 Комментариев 0 Похожие работы Оценило 0 человек Средний балл 0 Оценка неизвестно Скачать

Алгоритмический язык Паскаль

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ЧЕРЕПОВЕЦКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ ИНСТИТУТ им. А.В. ЛУНАЧАРСКОГО КАФЕДРА ИНФОРМАТИКИ Дипломная … По этому оператору на экране будет напечатано в одной строке слово «программа» и далее без пробелов значения переменной X и выражения Y-Z*3. Чтобы отделить элементы вывода друг от … ° if X = Y then Y = Y^.next else
Раздел Рефераты по информатике, программированию Тип дипломная работа Просмотров 356 Комментариев 0 Похожие работы Оценило 0 человек Средний балл 0 Оценка неизвестно Скачать

Система математических расчетов MATLAB

ГОСУДАРСТВЕННЫЙ ИНЖЕНЕРНЫЙ УНИВЕРСИТЕТ АРМЕНИИ MATLAB УЧЕБНОЕ ПОСОБИЕ Гаспарян Олег Николаевич Д.т.н, с.н.с 2005 СОДЕРЖАНИЕ Система математических … Если матрица A является квадратной и несингулярной, то, пренебрегая ошибками округле-ния, выражение X = inv(A)*B теоретически означает то же, что и X = AB , а Y = B*inv(A … Например, функция plot(x, y, ‘-.or’) строит график значений y от аргумента x, используя штрих-пунктирную линию (-.); размещает круглые маркеры (o) в точках данных, и окра-шивает …
Раздел Рефераты по информатике, программированию Тип учебное пособие Просмотров 531 Комментариев 0 Похожие работы Оценило 0 человек Средний балл 0 Оценка неизвестно Скачать

… программированию в графическом режиме на языке turbo-pascal 7.x

СОДЕРЖАНИЕ ВВЕДЕНИЕ.. 7 1. НАЗНАЧЕНИЕ ОБУЧАЮЩЕЙ ПРОГРАММЫ.. 9 1.1. Обзор существующих обучающих средств и методов.. X и Y. Количество пикселей зависит от типа адаптера и режима его работы. If (Dh=’y’) or (Dh=’н’) then
Раздел Рефераты по информатике, программированию Тип реферат Просмотров 2807 Комментариев 7 Похожие работы Оценило 11 человек Средний балл 4.3 Оценка 4 Скачать

Логическое и функциональное программирование

Введение Целью логического и функционального программирования является вывод решений и они тесно связаны с задачами, решаемыми в искусственном … Рассмотрим, например, предикат подсистема(x, y), который задает отношение x подсистема y. Пусть переменная x связана квантором общности, а y — квантором существования. Для группы выражений {L(x, y), L(z, f(x)} подстановка q = {x/z, f(x)/y} является унификатором, но является также унификатором и подстановка q = {a/x, a/z, f(a)/y}. Здесь a …
Раздел Рефераты по информатике, программированию Тип учебное пособие Просмотров 225 Комментариев 0 Похожие работы Оценило 0 человек Средний балл 0 Оценка неизвестно Скачать

Основы программирования на языке Паскаль

Как работать с книгой Внимательно прочитайте соответствующий раздел теории (одну главу), разберите все примеры, чтобы вам все было понятно, при этом … if (x>=5) and (x<=9) then writeln('g=',sqr(h)+f(y,z)) else; ПроцедураCircle (Х, Y, R); вычерчивает окружность с центром X, Y и радиусом R.
Раздел Рефераты по информатике, программированию Тип учебное пособие Просмотров 141 Комментариев 0 Похожие работы Оценило 0 человек Средний балл 0 Оценка неизвестно Скачать

Object Pascal

… Основными символами языка Object Pascal являются символы _ 26 больших и 26 малых латинских букв A,B, .Y,Z, a,b, ., y,z 10 арабских цифр 0, 1, 2, 3, 4 … При выполнении оператора Case управление будет передано тому оператору, который помечен константой, являющейся значением переменной i. Например, если к моменту выполнения Case … 15, то будет выполнен оператор x = 2; наконец, если i не равно ни одной из вышеперечисленных констант, то будет выполнен оператор x = 3, следующий за словом else (иначе).
Раздел Рефераты по информатике, программированию Тип реферат Просмотров 734 Комментариев 1 Похожие работы Оценило 1 человек Средний балл 5 Оценка неизвестно Скачать

Вычислительная математика

Содержание Введение Тема 1. Решение задач вычислительными методами. Основные понятия 1.1 Погрешность 1.2 Корректность 1.3 Вычислительные методы Тема 2 … Используем метод простой итерации для решения уравнения f(x) = sin x — x2 = 0 с точностью e = 0.001. Maple-язык «понимает» все стандартные объекты типа циклов (while, for), операторов условного перехода (if-then-else), массивов (array), списков (list), наборов (set), таблиц и т.д …
Раздел Рефераты по математике Тип учебное пособие Просмотров 218 Комментариев 0 Похожие работы Оценило 0 человек Средний балл 0 Оценка неизвестно Скачать

Все работы, похожие на Реферат Написание программ вычисления факториалов (3200)

Назад

«