- •ВВЕДЕНИЕ
- •1. ЭЛЕМЕНТЫ ЯЗЫКА ПАСКАЛЬ. ЛИНЕЙНЫЕ ПРОГРАММЫ
- •Стандартные функции
- •Функции преобразования типов
- •Порядок вычислений
- •Заданиe 1. Вычислить арифметические выражения
- •2. СТРУКТУРИРОВАННЫЕ ОПЕРАТОРЫ
- •2.1. Составной оператор
- •2.2. Условные операторы
- •2.3. Селективный оператор
- •2.4 Операторы цикла
- •Задание 2.1
- •Задание 2.2
- •Задание 3*
- •4. ПОДПРОГРАММЫ В ПАСКАЛЕ
- •4.1. Процедуры
- •4.2. Функции
- •Задание 4
- •5. МАССИВЫ
- •5.1. Одномерные масивы
- •5.2. Двумерные массивы
- •Задания 5.1
- •Задания 5.2
- •ГЛАВА 7. СОРТИРОВКА МАССИВОВ
- •Сортировка посредством простого выбора
- •Сортировка обменом (метод «пузырька»)
- •Сортировка включением
- •Быстрая сортировка
- •Задание 7.
begin k:=k+1; A:=A *X/k; S:=S + A
end;
writeln(“ exp(x) = “, S) end.
Задание 2.1
Составить программу на языке Паскаль для вычисления суммы членов конечной последовательности:
|
|
1. |
Найти сумму членов ряда с первого по семнадцатый включи- |
|||||||||||||||
|
|
|
|
1 |
,cos |
1 |
,cos |
1 |
|
|||||||||
тельно cos |
3 |
5 |
7 |
,… . |
||||||||||||||
|
|
|
|
|
|
|
|
|
||||||||||
|
|
2. |
Найти сумму членов ряда с десятого по тридцатый включи- |
|||||||||||||||
тельно |
1 |
|
|
, |
1 |
|
, |
1 |
,… . |
|||||||||
|
|
|
|
|
sin 2 |
sin 3 |
||||||||||||
|
|
|
sin1 |
|
|
|
|
|
|
|||||||||
|
|
3. |
Найти произведение членов ряда от пятого до двадцать пятого |
|||||||||||||||
1 |
, |
1 , |
1 |
, |
1 |
, |
|
|
1 |
,... . |
|
|
||||||
|
|
15 |
|
|
||||||||||||||
7 |
|
9 11 13 |
|
|
|
|
|
|
4.Найти сумму первых пятидесяти членов 1 , 1 , 1 ,… .
2 3 4
5.Найти сумму членов с пятнадцатого по двадцать пятый включительно {2,5,8,…} .
6.Найти сумму членов с десятого по двадцать пятый включительно {6,9,12} .
7.Найти сумму членов с первого по двадцать первый включи-
тельно {100,97,94}.
8.Найти сумму членов с десятого по двадцать пятый включи-
тельно |
1 |
, |
|
1 |
, |
1 |
,… . |
8 |
|
|
|||||
|
|
12 16 |
|
23
|
9. |
Вычислить произведение членов с первого по пятнадцатый |
|||||||||||||||||||||||||||||||||||||||
включительно − |
1 |
, − 1 , |
− 1 ,… . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
2 |
|
3 |
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
10. |
Найти сумму первых ста элементов |
1 , |
1 |
, 1 |
, 1 |
, |
1 |
|
,… . |
|
||||||||||||||||||||||||||||||
|
5 |
|
|
|
|||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
7 |
9 11 |
|
|
|
|
||||||
|
11. |
Найти сумму членов с первого по девяносто пятый включи- |
|||||||||||||||||||||||||||||||||||||||
тельно 1 , |
|
1 |
, |
1 |
,… . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
8 |
12 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
12. |
Найти сумму членов с первого по пятидесятый включитель- |
|||||||||||||||||||||||||||||||||||||||
но 1 |
, 1 , |
1 |
|
, 1 ,… . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
2 |
4 |
6 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
13. |
Найти сумму положительных элементов последовательности |
|||||||||||||||||||||||||||||||||||||||
при n = 35 |
|
{a1 = 1, a2 = 3, an = an−1 − 2an−2 }. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
14. |
|
Найти |
|
|
сумму |
положительных |
элементов |
|
при |
n = 25 |
||||||||||||||||||||||||||||||
|
|
cos 2 |
|
|
|
|
sin 3 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
a1 |
= |
|
|
|
|
, a2 |
= |
|
|
|
|
,…, an = an−1 − |
|
|
|
|
|
|
an−2 |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
12 |
|
|
15 |
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
15. |
Найти |
|
|
сумму |
отрицательных |
|
элементов |
при |
n = 17 |
|||||||||||||||||||||||||||||||
|
= |
cos 2 |
,a2 |
= |
sin 3 |
,…, an = an−1 − 4an−2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
a1 |
12 |
|
|
15 |
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
16. |
Найти |
|
|
сумму |
положительных |
|
элементов |
|
при |
n = 100 |
||||||||||||||||||||||||||||||
|
|
cos 2 |
|
|
|
sin 3 |
|
|
|
an−1 |
|
|
|
|
|
an−2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
a1 |
= |
|
|
|
|
, a2 |
= |
|
|
|
|
,…,an = |
|
− |
|
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
12 |
|
|
15 |
|
0.85 |
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
17. |
Найти сумму при n = |
|
|
|
|
|
|
= ln |
1 |
, a2 |
= ln |
1 |
, a3 |
= ln |
1 |
|
|
|||||||||||||||||||||||
|
15 a1 |
2 |
4 |
6 |
,… |
||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
18. |
Подсчитать |
|
сумму |
отрицательных |
элементов |
|
при |
n = 48 |
||||||||||||||||||||||||||||||||
|
|
sin 5 |
|
|
|
|
cos3 |
|
|
|
an−1 |
|
|
|
|
|
an−2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
a1 |
= |
|
|
|
, a2 = |
|
|
|
|
,....,an = |
|
|
− |
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
12 |
|
15 |
|
|
0.85 |
|
|
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
19. |
Найти |
|
|
сумму |
отрицательных |
|
элементов |
при |
n = 63 |
|||||||||||||||||||||||||||||||
{a1 = 0, a2 |
= 4,...., an |
= an−1 − 3an−2 }. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
20. |
Найти |
|
|
сумму |
отрицательных |
|
элементов |
при |
n = 21 |
|||||||||||||||||||||||||||||||
{a1 = sin 3, a2 = 2,...., an = an−1 − 5an−2 }. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24
Задание 2.2
Составить программу на языке Паскаль для вычисления суммы членов бесконечной последовательности:
|
∞ |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1. |
Подсчитать сумму ∑ |
|
|
|
|
|
|
|
|
|
с точностью 0.000001 |
||||||||
|
n(n − 1) |
||||||||||||||||||
|
n−1 |
|
|
|
|
|
|
|
|
||||||||||
|
∞ |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
||
2. |
Подсчитать сумму ∑ |
|
|
|
|
|
|
|
|
|
с точностью 0.000001. |
||||||||
|
n(n + |
2) |
|
||||||||||||||||
|
n=1 |
|
|
|
|
|
|
|
|
||||||||||
|
∞ |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
||
3. |
Подсчитать сумму ∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
с точностью 0.000001. |
||||
|
n(n + 1)(n + 2) |
||||||||||||||||||
|
n=1 |
|
|
|
|||||||||||||||
|
∞ |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. |
Подсчитать сумму ∑ |
|
|
с точностью 0.000001. |
|||||||||||||||
|
n! |
||||||||||||||||||
|
n=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
∞ |
|
(−1) |
n |
|
|
|
|
|
|
|
|
|
|
|||||
5. |
|
|
|
с точностью 0.000001. |
|||||||||||||||
Подсчитать сумму ∑ |
|
|
|
||||||||||||||||
|
n=0 |
|
|
n! |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
∞ |
|
|
|
|
|
n+2 |
|
|
|
|
|
|
|
|||||
6. |
|
(−1)n |
|
с точностью 0.000001 при х=2,-1. |
|||||||||||||||
Подсчитать сумму ∑ |
|
|
|||||||||||||||||
|
n=1 |
|
n!x |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
∞ |
|
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7. |
Подсчитать сумму ∑ |
|
|
с точностью 0.000001 при х=2;-1. |
|||||||||||||||
n! |
|||||||||||||||||||
|
n=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
∞ |
|
(− x) |
n |
|
|
|
|
|
|
|
|
|
|
|||||
8. |
|
|
с точностью 0.000001 при х=2; -1. |
||||||||||||||||
Подсчитать сумму ∑ |
|
|
|||||||||||||||||
|
n=0 |
|
|
n! |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
∞ |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9. |
Подсчитать сумму ∑ |
|
|
с точностью 0.0000001. |
|||||||||||||||
|
2 |
||||||||||||||||||
|
n=1 |
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
∞ |
|
|
|
|
|
|
|
|
|
|
|
|
с точностью 0.000001. |
|||||
10. Подсчитать сумму ∑(−1)n+1 1 |
|
||||||||||||||||||
|
n=1 |
|
|
|
|
|
|
|
n |
|
|
|
|
|
|
||||
|
∞ |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
||||
11. Подсчитать сумму ∑(−1)n |
|
|
|
с точностью 0.000001. |
|||||||||||||||
2n + 1 |
|||||||||||||||||||
|
n=0 |
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
∞ |
|
|
1 |
|
|
|
x − 1 |
|
2n−1 |
||||||||
12. Подсчитать сумму 2∑ |
|
|
|
|
|
с точностью 0.000001 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
2n − 1 |
|
|
|
|
|||||||||||||||
|
n=1 |
x + 1 |
|
|
при x = e1 .
25
|
|
|
∞ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
13. |
Подсчитать сумму ∑(−1)n+1 (x − 1) |
|
|
с точностью 0.000001 при |
||||||||||||||||||||||
|
|
|
n=1 |
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
||||
x = e0.2 . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
∞ |
|
|
|
|
|
x |
2n |
|
|
|
|
|
|
|
|
|
||||||
14. |
Подсчитать сумму ∑(−1)n |
|
|
|
|
|
|
|
|
с точностью 0.000001 при |
||||||||||||||||
(2n)! |
|
|||||||||||||||||||||||||
|
|
|
|
n=0 |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
x = π . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15. |
Подсчитать сумму |
2 ∞ |
2 |
x |
|
|
|
|
|
n |
|
|
с точностью 0.000001 при |
|||||||||||||
|
∑ |
3 |
− 1 |
|
|
|
|
|||||||||||||||||||
|
|
|
3 n=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
x = 1. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16. |
Подсчитать |
сумму |
|
∞ |
|
|
|
|
|
|
|
n |
|
|
|
|
с |
точностью |
0.000001 при |
|||||||
|
∑ (x ln a) |
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
n=0 |
|
n! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
x = 2 , a = 2 . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
∞ |
|
|
|
|
|
x |
2n+1 |
|
|
|
|
|
|
|
|||||||||
17. |
Подсчитать сумму ∑(−1)n |
|
|
|
|
|
|
|
|
|
|
|
|
|
с точностью 0.000001 при |
|||||||||||
(2n + 1)! |
||||||||||||||||||||||||||
|
|
|
n=0 |
|
|
|
|
|
|
|||||||||||||||||
x = π / 2. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
∞ |
|
|
|
|
|
|
|
|
|
2n−1 |
x |
2n |
|
|
||||||||
18. |
Подсчитать |
сумму |
|
∑(−1)n+1 2 |
|
|
|
|
|
|
|
с точностью 0.000001 |
||||||||||||||
|
|
|
|
n=0 |
|
|
|
|
|
|
|
|
|
(2n)! |
|
|
||||||||||
при x = π / 2. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
∞ |
|
|
|
|
|
x |
2n+1 |
|
|
|
|
|
|
|
||||||||
19. |
Подсчитать сумму 4∑(−1)n |
|
|
|
|
|
|
|
|
с точностью 0.000001 при |
||||||||||||||||
2n + 1 |
||||||||||||||||||||||||||
|
|
|
|
n=0 |
|
|
|
|
|
|
|
|
|
|||||||||||||
x = 1. |
|
|
|
|
|
|
(2n)!x |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
∞ |
|
2n+1 |
|
|
||||||||||||||||||
20. |
Подсчитать сумму 6∑ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
с точностью 0.000001 |
|||||||
2n |
( |
|
|
) |
2 |
( |
|
|
|
|
|
) |
|
|||||||||||||
|
|
|
|
n=0 2 |
|
|
|
n! |
|
|
|
|
|
2n + 1 |
|
|
||||||||||
при x = 0.5. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
|
|
||
21. |
Подсчитать |
сумму |
|
|
|
|
|
|
|
∞ |
|
2n − 1 !!x2n+1 |
с точностью |
|||||||||||||
6x + 6∑ |
|
|
|
|
|
) |
n+1 |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
n=1 |
|
|
|
(2n)!!2 |
|
0.000001 при x = 0.5.
26
3.
Для построения алгебраических рядов используют производящие функции. Основным способом решения этого класса задач является порождение множителей с помощью циклических конструкций и проверки того, удовлетворяет ли данный член заданному условию или нет.
К подобным задачам относят и проверки различных свойств натуральных чисел, например проверку того, является ли число простым, совершенным, автоморфным и т.п..
Алгоритмы решения для таких задач сходны между обой. Они состоят из трёх шагов:
−Ввод и проверка данных.
−Цикл, который порождает множители с проверкой на выполнение какого-либо свойства.
−Вывод результатов.
Например, вывод на экран последовательности следующего типа:
2,4,...N если N − четное
S = 1,3,...N если N − нечетное > 2
дующей программой.
Program Row; var N,i: integer;
F: boolean; begin
repeat
write(‘Введите натуральное число N=’); readln(N);
until N>2;
if (n mod 2 =0 ) then F:=false else F:=true;
write(‘S=’);
for i:=1 to N-2 do
if (not F) and (i mod 2 = 0) then write(i,’ ‘);
27
else
if F and (I mod 2 <> 0) then write(i,’ ‘); writeln(N)
end.
Вначале описываются переменные N, i как целые, где N – заданное число, а i – переменная цикла. Вводим вспомогательную логическую переменную F, с помощью которой учитывается чётность числа N.
Тело программы начинается с ввода целого числа и проверки того, является ли оно натуральным и большим 2;
repeat
write(‘Введите натуральное число N=’); readln(N);
until N>2;
Оператор repeat требует ввода данных до тех пор, пока пользователь не введёт положительное число, большее двух.
Флаг F устанавливается в зависимости от чётности числа N. Для определения чётности используется стандартная функция mod, которая вычисляет остаток от деления числа N на 2.
На втором шаге в цикле
for i:=1 to N-2 do
if (not F) and (i mod 2 = 0) then write(i,’ ‘) else
if F and (I mod 2 <> 0) then write(i,’ ‘);
Мы порождаем натуральное число i в интервале от 1 до N-2 и в зависимости от чётности числа формируем требуемый ряд, выводя его на экран в одну строку.
По выходу из цикла на экран выводится N, как завершающий член ряда и строка закрывается.
Эту же задачу можно решить по-другому. Тело цикла выглядит следующим образом
28
if N mod 2 = 0 then begin
i:=2; repeat
i:=i+2;
write(‘*’,i) until i=N-2;
end else
begin write(‘1’); i:=1; repeat
i:=i+2;
write(‘*’,I); until i=N-2;
end;
Несмотря на то, что программа выглядит длинной, в ней не порождаются лишние члены, а в зависимости от чётности числа выбирается тот цикл, который необходим. В отличие от первого примера для любого из этих циклов переменная i увеличивается на 2 за каждый проход.
Рассмотрим ещё один пример.
Дано натуральное число N. Определить, является ли оно простым.
Program pr2_1; var i,N,F:integer; begin
repeat
write(‘Введите натуральное число N=’); readln(N);
until N>0; F:=0;
for i:=2 to N div 2 do
29
if N mod I = 0 then F:=1;
if F=0 then writeln(‘Число ‘,N,’ простое’) else writeln(‘Число ‘,N,’ составное’);
end.
Для решения задачи
−формируем тело программы и описываем переменные
−вводим натуральное число
−в интервале от 2 до N/2 порождаем натуральные числа и проверяем являются ли они делителями числа N
−в зависимости от значения флага F выводим результат.
Введите натуральное число N=25 Число 25 не простое
Введите натуральное число N=31 Число 31 составное
Обработка числовых последовательностей.
Алгоритмы для обработки последовательностей обычно относятся к одному из двух типов: 1) поиск и 2) проверка условий.
Для исследований характерно, что в каждый момент времени нам доступен только один элемент последовательности. Поэтому все алгоритмы строятся с учётом однократного последовательного просмотра.
Алгоритм для решения таких задач называют алгоритмом с линейным поиском.
Рассмотрим пример. Выводим последовательность из N целых чисел. Найти сумму всех отрицательных чисел.
Program PR5_1;
var N,x,sum,i:integer; begin
repeat
write(‘Введите длину последовательности N=’); readln(N);
until N>0; Sum:=0;
30
for i:=1 to N do begin
write(‘Введите x=’); readln(x);
if x<0 then sum:=sum+x;
end;
if sum=0 then writeln(‘Отрицательных чисел нет’) else writeln(‘Сумма отрицательных чисел sum=’,sum)
end.
Для решения задачи :
−формируем тело программы и описываем переменные
−вводим длину последовательности N и устанавливаем начальное значение суммы
−последовательно считываем числа, и если число отрицательное, то прибавляем его к сумме
−в зависимости от значения суммы выводим результат.
Пример 3.1
Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить является ли последовательность возрастающей.
Решение данной задачи строится от противного. Математически для того, чтобы последовательность была возрастающей, для каждого очередного элемента NEW и предыдущего OLD должно выполняться условие NEW>OLD. Любое нарушение данного условия приводит к тому, что последовательность не может быть возрастающей.
Program PR5_9; var old,new:real; F: boolean; begin
F:=true; write(‘Введите x=’); readln(old); write(‘Введите x=’);
31