Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.pdf
Скачиваний:
37
Добавлен:
07.06.2015
Размер:
672.16 Кб
Скачать

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 = an1 2an2 }.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14.

 

Найти

 

 

сумму

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

элементов

 

при

n = 25

 

 

cos 2

 

 

 

 

sin 3

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a1

=

 

 

 

 

, a2

=

 

 

 

 

,, an = an1

 

 

 

 

 

 

an2

.

 

 

 

 

 

 

 

 

 

 

 

 

 

12

 

 

15

 

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15.

Найти

 

 

сумму

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

 

элементов

при

n = 17

 

=

cos 2

,a2

=

sin 3

,, an = an1 4an2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a1

12

 

 

15

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16.

Найти

 

 

сумму

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

 

элементов

 

при

n = 100

 

 

cos 2

 

 

 

sin 3

 

 

 

an1

 

 

 

 

 

an2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

an1

 

 

 

 

 

an2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a1

=

 

 

 

, a2 =

 

 

 

 

,....,an =

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

 

15

 

 

0.85

 

 

 

21

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

19.

Найти

 

 

сумму

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

 

элементов

при

n = 63

{a1 = 0, a2

= 4,...., an

= an1 3an2 }.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20.

Найти

 

 

сумму

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

 

элементов

при

n = 21

{a1 = sin 3, a2 = 2,...., an = an1 5an2 }.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

Задание 2.2

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

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

1.

Подсчитать сумму

 

 

 

 

 

 

 

 

 

с точностью 0.000001

 

n(n 1)

 

n1

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

2n1

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2n1

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