Основы программирования
Задача 1
Условие задачи
Заданы три корня кубического
уравнения: X1, X2, X3. Найдите коэффициенты
этого уравнения.
Блок-схема
Листинг с комментариями
Program Exercise_1;
var X1, X2, X3:
Real;, B, C, D: Real;('X1: ');(X1);('X2: ');(X2);('X3: ');(X3);;
A:= 1; // коэффициент при x в степени 3
B:= - (X1+X2+X3); // коэффициент при x в степени 2
C:= X1*X2+X1*X3+X2*X3; // коэффициент при x в степени 1
D:= - (X1*X2*X3); // свободный член
Writeln ('A = 1');('B =
', B:0:1);('C = ', C:0:1);('D = ', D:0:1);
Readln;
end.
Таблица исполнения
X1
|
X2
|
X3
|
A
|
B
|
C
|
D
|
1
|
2
|
3
|
1
|
-6
|
11
|
-6
|
= 1= - (1+2+3) = -6=
1*2+1*3+2*3 = 11= - (1*2*3) = -6
Таблица тестов
X1
|
X2
|
X3
|
A
|
B
|
C
|
D
|
5
|
12
|
4
|
1
|
-21
|
128
|
-240
|
10
|
1
|
8
|
1
|
-19
|
98
|
-80
|
2.5
|
3
|
17
|
1
|
-22.5
|
101
|
-127.5
|
-2
|
4
|
7
|
1
|
-9
|
6
|
56
|
15
|
-4.2
|
-10.8
|
1
|
0
|
-79.6
|
-680.4
|
Задача 2
Условие задачи
Пройдет ли кирпич со сторонами a, b и c сквозь прямоугольное отверстие со
сторонами r и s? Стороны отверстия должны быть параллельны граням кирпича.
Листинг с комментариями
Program Exercise_2;
var:array [1..3] of
real;:array [1..2] of real;, j:integer;:real;
// заполняем 1 массивi:=1 to 3 doi of
: Write ('Введите a: ');
: Write ('Введите b: ');
: Write ('Введите c: ');;(a[i]);;
// заполняем 2 массивi:=1 to 2 doi of
: Write ('Введите r: ');
: Write ('Введите s: ');;(b[i]);;
// сортировка 1 массиваi:=1 to 2 doj:=i+1
to 3 doa[i]<a[j] then:=a[i];[i]:=a[j];[j]:=k;
end;
// сортировка 2 массиваb[1]<b[2]
then
begin:=b[1];[1]:=b[2];[2]:=k;;
// сравнение наиб. элементов
массивов
if (a[2]<b[1]) and (a[3]<b[2]) then
Writeln('Пройдёт')('Не пройдёт');;.
Таблица исполнения
a
|
b
|
c
|
r
|
s
|
a(1)
|
a(2)
|
a(3)
|
b(1)
|
b(2)
|
1 and 2
|
Вывод
|
15
|
3
|
8
|
2
|
5
|
15
|
3
|
8
|
2
|
5
|
8<5 and 3<2
|
Не пройдет
|
|
|
|
|
|
15
|
8
|
3
|
5
|
2
|
|
|
8<5 - ложь и 3<2 - ложь Þ не пройдет
Таблица тестов
a
|
b
|
c
|
r
|
s
|
Вывод
|
2
|
7
|
14
|
6
|
9
|
Пройдет
|
12
|
5
|
1
|
2
|
8
|
Пройдет
|
10
|
13
|
8
|
14
|
7
|
Не пройдет
|
11
|
4
|
5
|
4
|
5
|
Не пройдет
|
7
|
1
|
6
|
8
|
2
|
Пройдет
|
Задача 3
Условие задачи
Для заданных a и p вычислить x = по реккурентному соотношению:
, .
Сколько итераций надо выполнить,
чтобы для заданной погрешности e
выполнялось соотношение: ?
Блок-схема
Листинг с комментариями
Program Exercise_3;
const=0.0001;, x,
xn:real;:boolean;, p:integer;kvadr (chislo:real;
stepen:integer):real;:real;:integer;:=1;g:=1 to stepen
do:=k*chislo;:=k;;:=true;('введите а: ');(a);('введите p: ');(p);:=a;:=0;flag do:=(1/p)*((p-1)*x+(a/kvadr (x, p-1)));abs
(x-xn)<e then:=false
else
x:=xn;:=i+1;;('x = ',
x:3:2);('интерации = ', i);;.
Таблица исполнения
e
|
a
|
p
|
x
|
kvadr
|
xn
|
i
|
0.0001
|
1
|
3
|
1
|
k
|
g
|
x
|
p-1
|
kvadr
|
1
|
1
|
|
|
|
|
1
|
1
|
1
|
2
|
1
|
|
|
|
|
|
|
1
|
2
|
1
|
2
|
1
|
|
|
k=1*1=1, kvadr=1=1*1=1,
kvadr=1
xn = (1/3)*((3-1)*1+1/1)
= 1
|1-1| = 0 < 0.0001
верно Þ x=1, i=0+1=1
Таблица тестов
a
|
p
|
x
|
i
|
5
|
7
|
1.26
|
13
|
4
|
9
|
1.17
|
14
|
12
|
3
|
2.29
|
8
|
2
|
15
|
1.05
|
13
|
8
|
10
|
1.23
|
22
|
Задача 4
Условие задачи
В массиве C(m) каждый третий элемент заменить
полусуммой двух предыдущих, а стоящий перед ним - полусуммой соседних с ним
элементов. Дополнительный (рабочий) массив не использовать.
Листинг с комментариями
Program Exercise_4;
Const=15;:array [1..m]
of real;:integer;, i4:real;;i:=1 to m do[i]:=Random(9);i:=1 to m do (C[i]:2:0,' '); // :2:0 ноль это дробная часть
Writeln;:=3;i<=m
do:=(C [i-1]+ C [i-2])/2;:=(C[i]+C [i-2])/2;[i]:=i3;[i-1]:=i4;:=i+3;;i:=1 to m
do (C[i]:2:0,' '); // :2:0 ноль это дробнаячасть
Writeln;
readln;.
Таблица исполнения
С1(1)
|
С1(2)
|
С1(3)
|
С1(4)
|
С1(5)
|
С1(6)
|
С2(1)
|
С2(2)
|
С2(3)
|
С2(4)
|
С2(5)
|
С2(6)
|
3
|
5
|
1
|
7
|
0
|
9
|
3
|
2
|
4
|
7
|
8
|
4
|
С2(1) = С1(1)
= 3 С2(4) = С1(4) = 7
С2(2) = (3+1)/2 = 2 С2(5)
= (7+9)/2 = 8
С2(3) = (3+5)/2 = 4 С2(3)
= (7+0)/2 = 3,5 » 4
Таблица тестов
№
|
№
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
С(1)
|
1
|
1
|
7
|
4
|
2
|
3
|
0
|
4
|
8
|
4
|
7
|
4
|
7
|
2
|
4
|
4
|
|
2
|
7
|
5
|
6
|
3
|
4
|
2
|
8
|
8
|
6
|
4
|
3
|
6
|
4
|
4
|
2
|
1
|
2
|
8
|
0
|
6
|
5
|
8
|
8
|
4
|
8
|
1
|
8
|
4
|
7
|
2
|
|
2
|
2
|
1
|
5
|
6
|
7
|
6
|
8
|
8
|
6
|
1
|
3
|
5
|
7
|
7
|
3
|
1
|
6
|
8
|
1
|
8
|
6
|
2
|
0
|
3
|
3
|
3
|
3
|
0
|
3
|
|
2
|
6
|
4
|
7
|
8
|
7
|
8
|
2
|
3
|
1
|
3
|
3
|
3
|
0
|
4
|
Задача 5
Условие задачи
Матрицу А (m, n) заполнить следующим
образом. Для заданных k и l элементу akl присвоить значение 1; элементам,
окаймляющим его (соседним с ним по вертикали, горизонтали и диагоналям) -
значение 2; элементам следующего окаймления - значение 3 и так далее до
заполнения всей матрицы.
Листинг с комментариями
Program Exercise_5;
Const n=10;=15;A: array
[1..n, 1..m] of Integer;, j, r, k, l: Integer;('k= ');(k);('l= ');(l);;i:=1 to
n doj:=1 to m do(abs (i-k)<abs (j-l)) then:=abs (j-l)r:=abs (i-k);[i,
j]:=r+1;;('Otvet: ');i:=1 to n doj:=1 to m do(A [i, j]:3);;;;.
Таблица исполнения
k
|
l
|
A [1,1]
|
A [1,2]
|
A [1,13]
|
…
|
A [2,3]
|
A [2,4]
|
A [2,5]
|
…
|
A [10,15]
|
2
|
3
|
3
|
2
|
2
|
…
|
1
|
2
|
3
|
…
|
13
|
Таблица тестов
k
|
l
|
Сформированный массив
|
2
|
3
|
3
|
2
|
2
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
3
|
2
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
3
|
2
|
2
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
3
|
3
|
3
|
3
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
4
|
4
|
4
|
4
|
4
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
5
|
5
|
5
|
5
|
5
|
5
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
6
|
6
|
6
|
6
|
6
|
6
|
6
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
7
|
7
|
7
|
7
|
7
|
7
|
7
|
7
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
8
|
9
|
10
|
11
|
12
|
13
|
|
|
9
|
9
|
9
|
9
|
9
|
9
|
9
|
9
|
9
|
9
|
9
|
10
|
11
|
12
|
13
|
Задача 6
Условие задачи
Даны два целочисленных массива К(m)
и L(n). Найти наибольший элемент массива K, не имеющий себе равных в массиве L.
Листинг с комментариями
Program Exercise_6;
Const m=15;=10;k: array
[1..m] of Integer;: array [1..n] of Integer;, j, imax, b, r: Integer;:
boolean;;i:= 1 to m do[i]:= -25 + random(75);('k: ');i:= 1 to m do(k[i]:4);;i:=
1 to n do[i]:= -25 + random(75);('l: ');i:= 1 to n do(l[i]:4);;
// сортировка массива ki:= 1 to m-1 do:=
i;j:= i+1 to m dok[j]>k[imax]
then:=j;:=k[i];[i]:=k[imax];[imax]:=b;;('new_k: ');i:= 1 to m do(k[i]:4);
Writeln;
// Проверяем (с max) элементы k[i]
на наличие их в массиве l
r:= 1;:=true;flag and
not (r=m+1) do // чтобы не
выйти за пределы массиваi:=1 to n
dok[r]=l[i] then
r:=r+1; // переходим к следующему
элементу массива k
break;flag:=false;;flag
then('net takogo');;;('Otvet: ', k[r]);
Writeln;;
end.
Таблица исполнения
Массивы
|
Ответ
|
k
|
-6
|
-10
|
21
|
31
|
1
|
33
|
48
|
-24
|
34
|
30
|
35
|
32
|
-2
|
-5
|
31
|
48
|
new_k
|
48
|
35
|
34
|
33
|
32
|
31
|
31
|
30
|
21
|
1
|
-2
|
-5
|
-6
|
-10
|
-24
|
|
l
|
37
|
26
|
33
|
49
|
-13
|
1
|
9
|
39
|
6
|
9
|
|
|
|
|
|
|
Таблица тестов
Массивы
|
Ответ
|
k
|
12
|
-7
|
49
|
14
|
-19
|
2
|
24
|
6
|
-12
|
44
|
20
|
25
|
-17
|
28
|
16
|
49
|
l
|
-19
|
43
|
-8
|
-9
|
32
|
2
|
10
|
-7
|
27
|
38
|
|
|
|
|
|
|
k
|
5
|
-8
|
20
|
-2
|
-1
|
-24
|
39
|
-22
|
23
|
47
|
15
|
11
|
17
|
-17
|
-25
|
47
|
l
|
2
|
30
|
36
|
35
|
36
|
19
|
10
|
-22
|
-21
|
24
|
|
|
|
|
|
|
k
|
-17
|
-4
|
6
|
49
|
20
|
-5
|
-19
|
-8
|
26
|
21
|
13
|
-12
|
-3
|
20
|
-7
|
49
|
l
|
-3
|
-8
|
-20
|
13
|
36
|
22
|
10
|
8
|
-14
|
|
|
|
|
|
|
Задача 7
массив уравнение итерация матрица
Условие задачи
Упорядочить по неубыванию каждую
строку матрицы A (m, n), а после этого перестановкой строк упорядочить всю
матрицу по неубыванию элементов первого столбца.
Листинг с комментариями
Program Exercise_7;
const=10;=10;:array
[1..m, 1..n] of integer;:array [1..m] of integer;, j, p, k, t, s:
integer;change (one, two: integer);: integer;i1:= 1 to n do:=a [one, i1];[one,
i1]:=a [two, i1];[two, i1]:=s;;;;i:= 1 to m doj:= 1 to n do[i, j]:=Random(40);
// вывод массиваi:= 1 to m
doj:= 1 to n do(a[i, j]:3);;;;
// Сортировкаi:= 1
to m doj:= 1 to n-1 dot:= 1 to n-j doa [i, t]>a [i, t+1] then:=a [i, t];[i,
t]:=a [i, t+1];[i, t+1]:=s;;
// вывод массиваi:= 1 to m
doj:= 1 to n do(a[i, j]:3);;;;
// заменаi:= 1 to m-1 doj:=
1 to m-i doa [j, 1]>a [j+1,1] then(j, j+1);
// вывод массиваi:= 1 to m
doj:= 1 to n do(a[i, j]:3);;;;.
Таблица исполнения
Исходный массив
|
Промежуточный массив
|
Результат
|
1
|
19
|
6
|
3
|
22
|
1
|
3
|
6
|
19
|
22
|
0
|
15
|
20
|
22
|
33
|
33
|
20
|
15
|
0
|
22
|
0
|
15
|
20
|
22
|
33
|
1
|
3
|
6
|
19
|
22
|
27
|
32
|
6
|
3
|
39
|
3
|
6
|
27
|
32
|
39
|
1
|
15
|
22
|
24
|
24
|
25
|
17
|
2
|
18
|
26
|
2
|
17
|
18
|
25
|
26
|
2
|
17
|
18
|
25
|
26
|
24
|
24
|
15
|
1
|
22
|
1
|
15
|
22
|
24
|
24
|
3
|
6
|
27
|
32
|
39
|
Таблица тестов
Исходный массив
|
Результат
|
18
|
27
|
0
|
20
|
2
|
36
|
5
|
8
|
5
|
19
|
0
|
2
|
5
|
5
|
8
|
18
|
19
|
20
|
27
|
36
|
1
|
13
|
5
|
8
|
39
|
38
|
27
|
36
|
0
|
31
|
0
|
1
|
5
|
8
|
13
|
27
|
31
|
36
|
38
|
39
|
29
|
35
|
32
|
13
|
36
|
2
|
4
|
12
|
7
|
26
|
0
|
5
|
5
|
8
|
8
|
10
|
13
|
19
|
19
|
29
|
24
|
36
|
37
|
29
|
34
|
11
|
22
|
28
|
21
|
35
|
0
|
4
|
5
|
7
|
8
|
8
|
22
|
32
|
34
|
37
|
8
|
19
|
0
|
8
|
5
|
10
|
13
|
5
|
29
|
19
|
0
|
10
|
21
|
23
|
28
|
28
|
29
|
33
|
34
|
35
|
12
|
23
|
3
|
17
|
9
|
19
|
6
|
34
|
29
|
18
|
0
|
6
|
6
|
7
|
16
|
24
|
24
|
28
|
33
|
34
|
34
|
5
|
22
|
7
|
8
|
0
|
37
|
32
|
4
|
8
|
2
|
4
|
7
|
12
|
13
|
26
|
29
|
32
|
35
|
36
|
10
|
33
|
28
|
21
|
28
|
23
|
35
|
29
|
34
|
0
|
3
|
6
|
9
|
12
|
17
|
18
|
19
|
23
|
29
|
34
|
35
|
16
|
26
|
39
|
37
|
11
|
9
|
36
|
15
|
22
|
9
|
11
|
15
|
16
|
22
|
26
|
35
|
36
|
37
|
39
|
7
|
28
|
16
|
34
|
0
|
24
|
24
|
33
|
6
|
6
|
11
|
21
|
22
|
24
|
28
|
29
|
34
|
35
|
36
|
37
|
Задача 10
Условие задачи
Даны длины a, b, c сторон некоторого треугольника.
Найти медианы треугольника, сторонами которого являются медианы исходного
треугольника. (Длина медианы, проведенной к стороне a, равна .
Листинг с комментариями
Program Exercise_10;
Var a, b, c: Integer;,
b1, c1, m1, m2, m3: Real;('a = ');(a);('b = ');(b);('c = ');(c);
// проверка существования
треугольника
if (a>=b+c) or (b>=a+c) or (c>=a+b) then
begin('Net');;:=
0.5*sqrt (2*b*b+2*c*c-a*a);:= 0.5*sqrt (2*a*a+2*c*c-b*b);:= 0.5*sqrt
(2*a*a+2*b*b-c*c);:= 0.5*sqrt (2*b1*b1+2*c1*c1-a1*a1);:= 0.5*sqrt (2*a1*a1+2*c1*c1-b1*b1);:=
0.5*sqrt (2*a1*a1+2*b1*b1-c1*c1);('m1 = ', m1:3:2);('m2 = ', m2:3:2);('m3 = ',
m3:3:2);;nd.