- •6. Алгоритмы и программы
- •6.1. Алгоритм и алгоритмический процесс
- •6.1.1. Основные свойства алгоритмов:
- •6.1.2. Способы записи алгоритма
- •6.1.3. Схемы алгоритмов и программ
- •6.2. Переменная и постоянная величина Выражения
- •6.3. Присваивание
- •6.4. Основные этапы решения задач на эвм
- •6. 5. Алгоритмизация. Базовые алгоритмические структуры
- •6.5.1. Реализация базовых структур в языке Pascal
- •6.5.2. Реализация базовых структур в языке qBasic
- •Операторы тела цикла
- •6.6. Ввод - вывод
- •6.6.1.Ввод-вывод данных на языке Pascal
- •Var X, y: integer; {Описание переменных X, y целочисленного типа}
- •6.6.2. Ввод-вывод данных на языке qBasic
- •6.7. Алгоритмы линейной и разветвляющейся структуры
- •Решение задачи 6.3. На языке Turbo Pascal:
- •6.8. Циклические алгоритмы
- •Input "Введите натуральное м : " , m
- •Print : print "о т в е т : Сумма этих чисел равна "; s
- •6.9. Итерационные циклы
- •6.10. Массивы
- •6.11. Вложенные циклы
- •6.12. Подпрограммы
- •6.12.1. Параметры подпрограмм
- •6.12.2. Подпрограммы в языке Pascal
- •Операторы функции, один из которых
- •6.12.3. Подпрограммы в языке Basic
- •6.13. Рекурсия
- •6.14. Логические операции с числами
- •6.15. Работа с символьной информацией
- •6.15.1. Работа с символьной информацией в языке Basic
- •6.15.2. Работа с символьной информацией в языке Pascal
Input "Введите натуральное м : " , m
F0 = 1 : F1 = 1
PRINT "Числа Фибоначчи, не превосходящие "; M ; " : " ; F0 ; F1 ;
IF M < 3 THEN
S =M;
ELSE
S = 2 : F2 = 2;
WHILE F2 < M
PRINT F2;
S=S+F2
F0=F1 : F1=F2
F2=F0+F1
WEND
END IF
Print : print "о т в е т : Сумма этих чисел равна "; s
END
Упражнения.
1. Определите значение целочисленной переменной S после выполнения операторов алгоритмического языка:
а) в)
S:=1; a:=1 а:=1; b:=1; S:=0;
нц для i от 1 до 3 нц пока a<=5
S:=S+i*(i+1)*a a:=a+b; b:=b+a;
a:=a+2 S:=S+a+b
кц кц
б) г)
S:=128 S:=0; i:=1; j:=5
нц для i от 1 до 4 нц пока i<j
S:=div(S,2) S:=S+i*j
Кц i:=i+1
j:=j-1
кц
2. Для заданного N составить программу вычисления:
а) S = 1+2+3+...+N
b) P = 1. 2 . 3 . ... .N
3.Для заданной последовательности чисел xi , где i меняется от 1 до N, составить программу вычисления суммы:
S = x1 + 2 x2 + 3 x3 + ... + N xn
4. Для заданных x и n составьте программу вычисления:
a) St = xn
b) S = 1+ x + x 2+ x3 +... + xn
Составить программы для решения задач 5-8.
5. В заданной последовательности из N чисел подсчитайте количество и сумму положительных, количество и произведение отрицательных чисел.
6. В заданной последовательности из N чисел вычислите сумму квадратов всех чисел, за исключением, кратных пяти.
7. В заданной последовательности из N чисел, которые попарно различны, найдите:
а) наибольший элемент из отрицательных;
б) наименьший элемент из положительных;
8. В заданной последовательности из N чисел определите число соседств:
а) двух положительных чисел;
б) двух чисел разного знака;
6.9. Итерационные циклы
Особенностью итерационного цикла является то, что число повторений операторов тела цикла заранее неизвестно. Для его организации используется цикл типа ПОКА. Выход из итерационного цикла осуществляется в случае выполнения заданного условия.
На каждом шаге вычислений происходит последовательное приближение к искомому результату и проверка условия достижения последнего.
Задача 6.11. Составить алгоритм вычисления sin x с помощью ряда:
Y = sin x = x – x3 / 3! + x5 / 5! - … + (-1 )n x 2n+1 / (2n+1)!
с заданной точностью e. Для данной знакочередующейся бесконечной суммы требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше e.
Вычисление сумм — типичная циклическая задача. Особенность задачи 6.11. в том, что число повторений тела цикла, т.е. число слагаемых, заранее неизвестно. Поэтому выполнение цикла должно завершиться в момент достижения требуемой точности.
При составлении алгоритма нужно учесть, что очередное слагаемое можно вычислить используя значение предыдущего слагаемого. Обозначим очередное слагаемое аn, тогда
a0 =x a1 = - x3 /3! = -a0 * x2 /(2*3) (3!=1*2*3)
a2 = + x5 /5! = -a1 * x2 /(4 * 5) … (5!=1*2*3*4*5=3!*4*5)
an = - an-1 * x2 / (2*n*(2*n+1))
Коэффициент для пересчета слагаемого можно получить, если an разделить на an-1 и преобразовать формулу:
an = (-1 )n x 2n+1 / (2n+1)! = -1 x 2n+1 / (2n-1)! = - x 2
an-1 (-1 )n-1 x 2(n-1)+1 / (2(n-1)+1)! x 2n-1 / (2n+1)! 2n(2n+1)
Тест: Вход x=1.57 e=0.00001
Выход y= 1.000004 sin x = 1.000000
Решение задачи 6.11. на языке Turbo Pascal:
Program PR_sinX;
Var E, {заданная точность}
x, {заданный аргумент функции sin }
a, {очередной член ряда - слагаемое}
y : Real; {сумма ряда}
n : Integer; {номер итерации}
BEGIN
Write(’Введите аргумент функции : ’);
ReadLn(x);
Write(’Введите точность : ’);
ReadLn(E);
y:=0; a:=x; n:=0;
While abs(а) >=E do begin
y:=y + a;
n:=n + 1;
a:=-a*x*x/(2*n*(2*n+1));
end;
WriteLn(’О т в е т : y= ’, y);
WriteLn(’О т в е т : sin x= ’, sin(x));
ReadLn
END.
Пояснения к программе:
1) Оператор цикла
While abs(а) >=E do begin
….
end;
обеспечивает вычисление суммы ряда, пока модуль очередного слагаемого больше или равен заданной точности Е.
2) Перед выполнением цикла переменным присваиваются начальные значения:
начальное значение суммы y:=0;
начальный номер итерации n:=0;
значение первого слагаемого a:=x;
В теле цикла вычисляется сумма ряда y:=y + a;
увеличивается номер итерации n:=n + 1;
пересчитывается слагаемое a:=-a*x*x/(2*n*(2*n+1));
3) Оператор WriteLn(’О т в е т : y= ’, y); выводит значение суммы ряда y, а оператор WriteLn(’О т в е т : sin x= ’, sin(x)); - значение полученное с помощью стандартной функции sin (x). Если алгоритм вычисления верен, эти значения совпадут.
Упражнения.
1. Составить программу вычисления cos x с помощью ряда:
Y = cos x = 1 – x2 / 2! + x4 / 4! - … + (-1 )n x 2n / (2n)! + …
с заданной точностью e.
2. Составить программу вычисления ex с помощью ряда:
Y = ex = 1 + x + x2 / 2! + x3 / 3! - … + x n / n! + …
с заданной точностью e.
3. Составить программу вычисления ln(x+1) с помощью ряда:
Y = ln(x+1) = x - x2 / 2 + x3 / 3 - … +(-1 )n-1 x n-1 / n + …
с заданной точностью e, где |x| <1.
