Основы алгоритмизации и программирования. Часть 1. Задачи и упражнения. Практикум. Учебно-методическое пособие
.pdf28. найти решение системы уравнений:
ax +by = c,dx +ey = f .
29.определить, является ли заданный год N високосным. год високосный, если N не кратно 100 и число, изображаемое его двумя последними цифрами, кратно четырем. если N кратно 100, то год високосный лишь при N, кратном 400.
30.заданы координаты вершин прямоугольника со сторонами, параллельными осям координат. определить площадь части прямоугольника, расположенной в первой координатной четверти.
31.на плоскости заданы точки M1(x1, y1), M2(x2, y2), N1(x3, y3), N2(x4, y4). проверить, являются ли параллельными прямые, одна из которых проходит через точки M1, M2, а другая – через точки N1, N2. если прямые пересекаются, то найти координаты точки пересечения.
32.два прямоугольника со сторонами, параллельными осям координат, заданы координатами двух своих противоположных
вершин: M1(x1, y1), M2(x2, y2) – первый, N1(x3, y3), N2(x4, y4) – второй прямоугольник. найти площадь их пересечения.
33.найти координаты точек пересечения прямой y = k x + b
иокружности радиуса R с центром в начале координат. определить, сколько точек пересечения расположены в первой координатной четверти.
34.заданы числа k, a, b. определить число точек пересечения прямой y = kx + b с гиперболой y = a/x и их координаты.
35.заданы числа k, a, b. проверить, попадают ли вещественные корни уравнения x2 + ax + b = 0 в интервал (−k, k).
36.заданы числа a, b, x, y, z (a < b). определить, какие из чисел x, y, z попадают в отрезок [a, b]. напечатать также количество таких чисел.
37.заданы координаты двух точек на плоскости (x1, y1), (x2, y2)
ичисла R, P (R > 0). определить, попадают ли обе точки внутрь полукруга радиуса R с центром в точке (P, 0), лежащего в верхней полуплоскости.
21
38. заданы числа a, b, c, d (a < b, c < d) и x. определить, принадлежит ли x какому-либо из отрезков [a, b], [c, d] или их общей части. ответ выдать в виде сообщения.
39. заданы числа k, b, c, d, e. определить количество и координаты точек пересечения прямой у = k x + b и параболы y = cx2 + dx + eи расстояние от каждой точки до начала координат.
40.заданы числа k, b, a, l. определить, попадают ли обе точки пересечения прямой y = k x + b и параболы y = a x2 в квадрат со стороной l и центром в начале координат (стороны параллельны осям). напечатать сообщение и координаты точек.
41.заданы числа a, b, c, u, v. найти наибольшее и наименьшее значения функции у = ax2 + bx + c на отрезке [u, v].
42.составить программу, определяющую число действительных корней биквадратного уравнения ax4 + bx2 + c = 0.
43.заданы k1, b1, k2, b2 и e (e > 0). определить, содержится ли точка пересечения прямых у = k1х + b1 и у = k2х + b2 в e – окрестности начала координат. если прямые совпадают, то проверить пересечение прямой с e – окрестностью начала координат.
44.ввести N1, N2, N3 – количества пропущенных часов занятий в среднем на студента за неделю для трех групп. если min (N1, N2, N3) < 10, то напечатать: «есть хорошая группа».
45.ввести N1, N2, N3 – количества рекламаций на 3 вида товаров. напечатать текст «все товары хорошие», если
max (N1, N2, N3) < 5, иначе – «есть плохие товары».
46. по номеру дня недели выдать сообщение, каким он является – рабочим или выходным.
3. ПрОгрАммирОвАние итерАциОнных циКлОв
циклический алгоритм – это описание действий, которые в зависимости от исходных данных могут повторяться многократно. последовательность действий, предназначенная для многократного исполнения, называется телом цикла.
итерационные циклы – это алгоритмы, в которых тело цикла выполняется в зависимости от какого-либо условия. различают циклы с предусловием и постусловием.
цикл с предусловием – цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому последнее может быть ни разу не выполнено (если условие с самого начала ложно).
цикл с постусловием – цикл, в котором условие проверяется после выполнения тела цикла. отсюда следует, что тело данного цикла всегда выполняется хотя бы один раз.
Пример типовой задачи
вычислить значения функции y = cos(x) – ex/2 при изменении аргумента х на заданном интервале [c, d] с заданным шагом h.
решение с использованием цикла с предусловием
Блок-схема алгоритма
приведена на рис. 3.
23
Начало c, d, h
x = c
x ≤ d |
нет |
|
|
|
да
y = cos(x) −ex/2
x, y
x = x + h
Конец
рис. 3. блок-схема алгоритма с использованием цикла с предусловием
текст программы на языке Паскаль
program prim3;
var с, d, h, x, y: real; begin
write('c='); readln(c); write('d='); readln(d); write('h='); readln(h); x := c;
d := d + h/2; while x <= d do begin
y := cos(x) – exp(x/2); writeln('x=', x:6:2, 'y=', y:6:2 ); x := x + h
end;
end.
24
текст программы на языке С#
using System;
namespace ConsoleApplication21
{
class Program
{
static void Main(string[] args)
{
Console.Write("введите c=");
double c = double.Parse(Console.ReadLine()); Console.Write("введите d=");
double d = double.Parse(Console.ReadLine()); Console.Write("введите h=");
double h = double.Parse(Console.ReadLine()); double y, x = c;
d = d + h/2; while (x <= d) {
y = Math.Cos(x) – Math.Exp(x/2); Console.WriteLine("x={0}, y={1}", x, y); x = x + h;
}
Console.ReadLine();
}
}
}
решение с использованием цикла с постусловием
Блок-схема алгоритма
приведена на рис. 4
текст программы на языке Паскаль
program prim4;
var с, d, h, x, y: real; begin
write('c='); readln(c); write('d='); readln(d);
25
write('h='); readln(h); x := c;
d := d + h/2; repeat
y := cos(x) – exp(x/2); writeln('x=', x:6:2, 'y=', y:6:2 ); x := x + h
until x > d; end.
Начало
c, d, h
x = c
y = cos(x) −ex/2 |
x, y
x = x + h
x > d
Конец
рис. 4. блок-схема алгоритма с использованием цикла с постусловием
26
текст программы на языке С#
using System;
namespace ConsoleApplication22
{
class Program
{
static void Main(string[] args)
{
Console.Write("введите c=");
double c = double.Parse(Console.ReadLine()); Console.Write("введите d=");
double d = double.Parse(Console.ReadLine()); Console.Write("введите h=");
double h = double.Parse(Console.ReadLine()); double y, x = c;
d = d + h/2; do {
y = Math.Cos(x) – Math.Exp(x/2); Console.WriteLine("x = {0}, y = {1}", x, y); x = x + h;
} while (x <= d); Console.ReadLine();
}
}
}
Задачи
1.найти наибольшее целое n такое, что
1)3n4 – 730n < 5;
2)en – 1000 ln(n) ≤ 10.
2.дано целое число m > 1. получить наибольшее целое k, при котором 4k < m.
3.дано натуральное число n. получить наименьшее число вида 2r, превосходящее n.
4.Числа Фибоначчи определяются формулами:
f0 = f1 = 1; fn = fn −1 + fn −2 при n = 2, 3, … .
1)найти f – первое число Фибоначчи, большее заданного m
(m > 1).
27
2)вычислить S – сумму всех тех чисел Фибоначчи, которые не превосходят 1000.
5.вычислить число
через разложение в ряд
π =1− |
1 + 1 − 1 + = ∑(−1)k +1 |
1 |
|
|
|
|
∞ |
|
|
4 |
3 5 7 |
|
|
|
k =1 |
2k −1 |
|
||
сточностью ε = 10−3. сравнить с точным значением.
6.составить программу приближенного вычисления значе-
ния π2 с точностью ε = 10−4, используя формулу
π |
|
2 |
|
2 |
|
4 |
4 |
6 |
6 |
|
∞ |
(2i) |
2 |
|
|||
= |
|
|
=∏ |
|
. |
||||||||||||
2 |
1 |
3 |
3 |
7 |
(2i −1)(2i +1) |
||||||||||||
|
|
|
5 |
5 |
|
i =1 |
|
||||||||||
вычисления заканчивать, если |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
(2i)2 |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
−1 |
|
< ε. |
|
|
|||||
|
|
|
|
|
|
|
(2i −1)(2i +1) |
|
|
||||||||
сравнить с точным значением.
7. вычислить бесконечную сумму с заданной точностью
ε = 10−4.
1)∑∞ i12 ;
i=1
3)∑∞ (−1)i ;
i=1 i!
∞ |
1 |
|
|
2) ∑ |
; |
||
i(i +1) |
|||
i =1 |
|
4)∑∞ (−2)i .
i=1 i!
8. составить программы |
вычисления |
|
значений функций |
||||||||||||||
с помощью разложений в ряд: |
|
|
|
|
|
|
|||||||||||
|
|
x |
2 |
|
|
|
x |
3 |
|
∞ |
|
x |
k |
|
|
||
1) ln (1+ x) = x − |
|
+ |
|
− = ∑(−1)k +1 |
|
; |
|
||||||||||
|
|
|
|
|
|
k |
|
||||||||||
|
|
2 |
|
|
3 |
|
k =1 |
|
|
|
|||||||
|
x |
3 |
|
|
|
x |
5 |
|
|
|
∞ |
x |
2n +1 |
|
|||
2) sin (x) = x − |
|
|
+ |
|
|
− = ∑(−1)n |
|
|
|
; |
|||||||
|
|
|
|
|
|
(2n +1)! |
|||||||||||
3! |
|
|
5! |
|
|
|
n = 0 |
|
|||||||||
28
3)cos (x) =1−
4)ex =1+1!x +
x2
2!
x2
2!
|
x |
4 |
∞ |
x |
2n |
|
+ |
|
− = ∑(−1)n |
|
; |
||
|
|
(2n)! |
||||
4! |
n =0 |
|
||||
+ = ∑∞ xn .
n =0 n!
вычислять с точностью до члена ряда, меньшего ε. сравнить
сточными значениями функций.
9.определить приближенное (с точностью до 0,1) значение корня уравнения x – arctg (x) = π. изменять x от 2 с шагом h = 0,1; изменение знака функции является признаком пересечения оси Ox.
10.найти корень уравнения F(x) = 0 методом деления отрезка пополам с точностью ε = 10−4. (ниже рядом с каждым уравнением указан отрезок, содержащий корень.)
1)F(x) = lg (x) – 2,1 + x; [1, 3].
2)F(x) = lg (x) – 0,16/x; [1, 10].
3)F(x) = x + ln (x + 0,5) – 0,5; [0, 2].
4)F(x) = x5 – x – 0,2; [1, 1,1].
5)F(x) = x4 + 2x – x – 1; [0, 1].
6)F(x) = x3 – 0,2x2 – 0,2x – 1,2; [1, 1,5].
Метод деления отрезка пополам для уравнения F(x) = 0 состоит в многократном делении отрезка [a, b] точкой с пополам и выборе той половины отрезка, на которой остался корень уравнения. вычисления производятся до достижения точно-
сти ε: |b – a| < ε.
11. вычислить приближенное значение корня уравнения x = j (x) методом простой итерации с точностью ε = 10−4. (ниже рядом с каждой функцией j (x) в скобках указано начальное приближение x0 к корню.)
1) j(x) = |
ex |
; (0). |
2) j(x) = |
1+ x4 |
; (0,2). |
|
4,7 |
6 |
|||||
|
|
|
|
29
3) |
j(x) = |
sin (x) |
+1; (0). |
4) |
j(x) = |
1−2x3 |
; (0,11). |
||
2 |
|
4 |
|||||||
|
|
|
|
|
|
|
|
||
5) |
j(x) = |
2 − x3 |
; (0,95). |
6) |
j(x) = |
8+8ln (x) |
; (4,32). |
||
12 |
5 |
|
|||||||
|
|
|
|
|
|
|
|
||
Метод простой итерации для решения уравнения x = φ( x) состоит в последовательном приближении к корню по формулам xk + 1 = φ(xk). вычисления заканчиваются, когда |xk + 1 – xk| < ε.
12. найти корень уравнения F(x) = 0 методом ньютона с точностью ε = 10 −4. (ниже рядом с каждым уравнением указано начальное приближение x0 к корню.)
1)x3 – 2x2 + x – 3 = 0; (2,2).
2)tg(x) – x = 0; (4,67).
3)1,8x4 – sin(10x) = 0; (0,22).
4)x3 – 6x2 + 20 = 0; (2,31).
Метод ньютона (касательных) для уравнения F(x) = 0 состоит
в нахождении xk + 1 = xk – F(xk) /F′(xk). вычисления заканчиваются,
когда |xk + 1 –xk| < ε.
13.решить уравнение cos(x) – 4,7x = 0 упрощенным методом
ньютона: xk + 1 = xk – F(xk ) /F′(x0) с точностью ε = 10−4. вычисления заканчиваются, когда |xk + 1 –xk | < ε.
14.решить с точностью ε = 10−4 уравнение sin(x) – x + 2,7 = 0 методом неподвижных хорд:
xk +1 = xk − F(xk )(xk − x0). F(xk )− F(x0)
выбрать x0 и x1. вычисления заканчиваются, когда |xk +1 –xk| < ε.
15. решить с точностью ε = 10 −4 уравнение 1,7cos(x) – ex = 0 методом подвижных хорд:
xk +1 = xk − F((xk )()−xk −(xk −1)).
F xk F xk −1
вычисления заканчиваются, когда |xk + 1 –xk | < ε.
30
