Информатика. Практикум
.pdf
Символ 5. Проверка условия X[I] ≥ 10 и cos(X[I]) = 0 (условие то-
го, что значение tg(X [I ]) |
sin(X [I ]) |
может быть вычислено). Если |
|
cos(X [I ]) |
|||
|
|
условие верно, то далее выполняется символ 6, если нет – символ 7. Символ 6. Вывод на экран сообщения «Функция не определена». Символ 7. Проверка условия X[I] < –10. Если условие верно, то
далее выполняется символ 8, если нет – символ 9.
Символ 8. Присвоение переменной Z значения sin(X[I]).
Символ 9. Проверка условия принадлежности X[I] интервалу [–10; 1). Если условие верно, то далее выполняется символ 10, если нет – символ 11.
Символ 10. Присвоение переменной Z значения cos(X[I]).
Символ 11. Проверка условия принадлежности X[I] интервалу [1; 10). Если условие верно, то далее выполняется символ 12, если нет – символ 13.
Символ 12. Присвоение переменной Z значения ln(X[I]).
Символ 13. Присвоение переменной Z значения sin( X [I ]) . cos( X [I ])
Символ 14. Вывод на экран значения переменной Z. Символ 15. Закрытие цикла с параметром I.
Символ 16. Конец алгоритма.
Задача 1.10. Разработать схему алгоритма и программу для вычисления значений элементов матрицы А размером 5 12, которые заданы формулой
sin(i j), если i
j;
aij |
|
i |
|
|
ln( |
|
),если i j. |
|
j |
||
Значения элементов массива aij вывести на экран.
Решение задачи
Алгоритм решения задачи состоит в организации двух циклов по i и j для вычисления в зависимости от условий значений элементов
31
двумерного массива aij. Схема алгоритма решения задачи представлена на рис. 1.10.
1 |
Начало |
|
|
2 |
A |
|
|
|
|
||
|
I = 1, 5 |
|
|
3 |
B |
|
|
|
|
||
|
J = 1, 12 |
|
|
нет 4 |
I < J |
да |
|
6 |
5 |
||
|
|||
A[I, J] = |
|
A[I, J] = |
|
= Ln(I/J) |
|
= Sin(I+J) |
7Вывод
A[I, J]
8
B
9
A
10
Конец
Рис. 1.10
Пояснения к схеме алгоритма
Обозначения:
A[I, J] – aij элемент матрицы А.
32
Символ 1. Начало алгоритма.
Символ 2. Открытие внешнего цикла с параметром I = 1; 5 для перебора строк матрицы A.
Символ 3. Открытие внутреннего цикла с параметром J = 1; 12 для перебора столбцов матрицы A.
Символ 4. Проверка условия I J. Если условие верно, то далее выполняется символ 5, если нет – то символ 6.
Символ 5. Присвоение элементу A[I, J] значения sin(I + J). Символ 6. Присвоение элементу A[I, J] значения ln(I/J). Символ 7. Вывод на экран значения A[I, J].
Символ 8. Закрытие внутреннего цикла с параметром J. Символ 9. Закрытие внешнего цикла с параметром I. Символ 10. Конец алгоритма.
Программа
Program Prog1_10;
Var
I, J : Byte;
A : array [1..5, 1..12] of Real;
Begin {начало раздела операторов программы} for I:= 1 to 5 do
Begin {начало цикла 1 - для перебора строк массива А} for J := 1 to 12 do
Begin {начало цикла 2 - для перебора столбцов массива А} {вычисление значения элемента массива в зависимости от условия}
If I <= J Then A[I, J] := sin(I + J) else A[I, J] := ln(I/J);
Write(A[I, J]:7:2, ' ');{вывод элемента массива на экран} end; {конец цикла 2}
Writeln; {переход на следующую строку} end; {конец цикла 1}
End. {конец программы}
Результат работы программы
0.91 |
0.14 |
-0.76 -0.96 |
-0.28 |
0.66 |
0.99 |
0.41 |
-0.54 -1.00 |
-0.54 |
0.42 |
||
0.69 -0.76 -0.96 |
-0.28 |
0.66 |
0.99 |
0.41 |
-0.54 |
-1.00 |
-0.54 |
0.42 |
0.99 |
||
1.10 |
0.41 |
-0.28 |
0.66 |
0.99 |
0.41 |
-0.54 |
-1.00 |
-0.54 |
0.42 |
0.99 |
0.65 |
1.39 |
0.69 |
0.29 |
0.99 |
0.41 |
-0.54 -1.00 |
-0.54 |
0.42 |
0.99 |
0.65 |
-0.29 |
|
1.61 |
0.92 |
0.51 |
0.22 |
-0.54 |
-1.00 |
-0.54 |
0.42 |
0.99 |
0.65 |
-0.29 -0.96 |
|
33
Задача 1.11. Разработать схему алгоритма и программу получения из матрицы А10 10, заданной по закону aij = cos(i + j), двух одномерных массивов C и D. В массив C занести все неотрицательные элементы заштрихованной области матрицы А, а в массив D – отрицательные элементы незаштрихованной области. Вывести на экран число элементов массивов С и D.
Решение задачи
Алгоритм решения задачи включает анализ двух условий:
j |
i, |
и |
j |
i, |
aij |
0 |
|
aij |
0. |
Если выполняется первое условие, то элемент aij заносится в массив С: ck = aij, если выполняется второе условие – то элемент aij заносится в массив D: dn = aij. Таким образом, логика алгоритма требует организации двух циклов для формирования и перебора значений aij и использования разветвляющихся процессов для их анализа. Схема алгоритма решения задачи представлена на рис. 1.11.
34
|
|
1 |
Начало |
|
|
|
2 |
|
|
|
|
|
К = 0 |
|
|
|
|
N = 0 |
|
|
|
3 |
A |
|
|
|
|
|
|
|
|
|
I = 1, 10 |
|
|
|
4 |
B |
|
|
|
|
|
|
|
|
|
J = 1, 10 |
|
|
|
5 |
|
|
|
|
A[I,J]=cos(I+J) |
|
|
|
нет |
6 |
J>I и |
да |
|
|
|
A[I,J]>0 |
7 |
нет 8 |
|
|
|
|
J<I и |
|
да |
K = K+1 |
|
|
A[I,J]<0 |
9 |
|
C[К]=A[I, J] |
|
|
|
|
|
|
|
|
N = N+1 |
|
|
|
|
D[N]=A[I, J] |
|
|
|
10 |
|
|
|
|
|
B |
|
|
|
11 |
|
|
|
|
|
A |
|
|
|
12 |
Вывод |
|
|
|
|
|
|
|
|
|
K, N |
|
13
Конец
Рис. 1.11
35
Пояснения к схеме алгоритма
Обозначения:
A[I, J] – aij элемент матрицы А; С[K] – ck элемент массива C; D[N] – dn элемент массива D;
K, N – счетчики числа элементов массивов C, D. Символ 1. Начало алгоритма.
Символ 2. Обнуление счетчиков элементов массивов C (переменная K) и массива D (переменная N).
Символ 3. Открытие внешнего цикла с параметром I = 1; 10 для перебора строк матрицы A.
Символ 4. Открытие внутреннего цикла с параметром J = 1; 10 для перебора столбцов матрицы A.
Символ 5. Вычисление элемента A[I, J].
Символ 6. Проверка условий принадлежности элемента A[I, J] заштрихованной области (J ≥ I) и неотрицательности элемента A[I, J]. Если условия верны, выполняется символ 7, если нет – символ 8.
Символ 7. Увеличение счетчика элементов массива C (переменная K). Присвоение элементу массива C значения элемента A[I, J].
Символ 8. Проверка условий принадлежности элемента A[I, J] незаштрихованной области (J < I) и отрицательности элемента A[I, J]. Если условия верны, выполняется символ 9, если нет – символ 10.
Символ 9. Увеличение счетчика элементов массива D (переменная N). Присвоение элементу массива D значения элемента A[I, J].
Символ 10. Закрытие внутреннего цикла с параметром J. Символ 11. Закрытие внешнего цикла с параметром I. Символ 12. Вывод на экран значений K, N.
Символ 13. Конец алгоритма.
Программа
Program Prog1_11;
Var
I, J, K, N : Byte;
A : array [1..10, 1..10] of Real; C, D : array [1..55] of Real;
Begin {начало раздела операторов программы}
K := 0; N := 0; {начальные значения для индексов массивов C, D}
36
for I := 1 to 10 do {цикл 1 - для перебора строк матрицы А} for J := 1 to 10 do {цикл 2 - для перебора столбцов матрицы А}
Begin |
{начало циклов 1, 2} |
|
A[I, J] := cos(I + J); |
{вычисление A[I, J]} |
|
If (J >= I) and (A[I, J] >= 0) Then {проверка условий}
Begin |
{начало блока 1 – условия верны} |
|
K := K + 1; |
|
{увеличение индекса K на 1} |
C[K] := A[I, J]; |
{заполнение массива C} |
|
end |
|
{конец блока 1} |
else If (J < I) and (A[I, J] < 0) Then {проверка условий} |
||
Begin |
|
{начало блока 2–условия верны} |
N := N + 1; |
{увеличение индекса N на 1} |
|
D[N] := A[I, J]; {заполнение массива D} |
||
end; |
|
{конец блока 2} |
end; |
|
{конец циклов 1, 2} |
Writeln('Число элементов массива C = ', K); {вывод K} Writeln('Число элементов массива D = ', N); {вывод N}
End. {конец программы}
Результат работы программы
Число элементов массива C = 30 Число элементов массива D = 20
1.6.Алгоритмы и программы для нахождения сумм
ипроизведений функциональных выражений
Задача 1.12. Разработать схему алгоритма и написать программу для
|
20 |
|
|
|
sin(k |
1) |
|
вычисления значения A |
k 1 |
|
. Значение А вывести на экран. |
100
cos(i)
i 1
Решение задачи
Алгоритм решения задачи сводится к последовательному вычислению знаменателя (суммирование), при этом следует обратить внимание на то, что он не должен быть равен нулю, а затем – числителя (произведение). Схема алгоритма решения задачи представлена на рис. 1.12.
37
|
1 |
Начало |
|
|
2 |
|
|
|
|
S = 0 |
|
|
3 |
A |
|
|
|
|
|
|
|
I = 1, 100 |
|
|
4 |
|
|
|
|
S =S+Cos (I) |
|
|
5 |
|
|
|
|
A |
|
|
да 6 |
S=0 |
нет |
|
14 |
|
|
|
7 |
|
|
«Значение A не |
Вывод |
|
|
|
P = 1 |
||
определено» |
«...» |
|
|
|
|
||
|
|
8 |
B |
|
|
|
|
|
|
|
K = 1, 20 |
|
|
9 |
|
|
|
|
P = |
|
|
=P sin(K+1) |
|
|
|
10 |
|
|
|
|
B |
|
|
11 |
|
|
|
|
A = P/S |
|
|
12 |
Вывод |
|
|
|
|
|
|
|
А |
|
|
13 |
Конец |
|
|
|
|
Рис. 1.12
Вычисление суммы (S)
Вычисление произведения (P)
38
Пояснения к схеме алгоритма
Обозначения:
|
20 |
|
P – значение выражения произведения |
sin(k 1) ; |
|
|
k |
1 |
100 |
|
|
S – значение выражения суммы |
cos(i) . |
|
i |
1 |
|
Символ 1. Начало алгоритма.
Символ 2. Присвоение переменной S начального значения 0. Символ 3. Открытие цикла с параметром I = 1; 100 для вычисле-
ния суммы.
Символ 4. Вычисление переменной S по формуле с учетом накоплений сумм.
Символ 5. Закрытие цикла с параметром I.
Символ 6. Проверка условия равенства нулю значения S. Если верно, то выполняется символ 14, если нет – символ 7.
Символ 7. Присвоение переменной P начального значения 1. Символ 8. Открытие цикла с параметром K = 1; 20 для вычисле-
ния произведения.
Символ 9. Вычисление переменной P по формуле с учетом накоплений произведений.
Символ 10. Закрытие цикла с параметром K. Символ 11. Вычисление переменной A. Символ 12. Вывод на экран значения А. Символ 13. Конец алгоритма.
Символ 14. Вывод на экран сообщения «Значение А не определено».
|
|
Программа |
Program Prog1_12; |
|
|
Var |
|
|
K, I : Byte; |
|
|
P, S, A : Real; |
|
|
Begin |
{начало раздела операторов программы} |
|
S := 0; |
|
{начальное значение переменной S} |
for I := 1 to 100 do |
|
|
S := S + cos(I); |
{вычисление суммы в цикле} |
|
If S = 0 Then Writeln('Значение А не определено')
39
else begin |
{начало блока 1} |
P := 1; |
{начальное значение переменной P} |
for K := 1 to 20 do |
|
P:=P * sin(K+1);{вычисление произведения в цикле} |
|
A := P/S; |
{вычисление А} |
Writeln('A = ', A:15:12){вывод на экран значения А} |
|
end; |
{конец блока 1} |
End. |
{конец программы} |
Результат работы программы
A=0.00002461930
1.7. Алгоритм и программа метода пузырьковой сортировки
Задача 1.13. Разработать схему алгоритма и написать программу сортировки по возрастанию одномерного массива A, состоящего из пяти элементов: 10, 80, 45, 36, 71. Использовать метод пузырьковой сортировки. Значения элементов отсортированного массива вывести на экран.
Решение задачи
Алгоритм пузырьковой сортировки заключается в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно, и, если порядок в паре неверный, их меняют местами. При первом проходе сравниваются первый и второй элементы, затем второй и третий и т. д., пока не будет достигнут последний элемент массива. Таким образом, наибольший элемент оказывается в конце массива, то есть «всплывает», как пузырёк в воде. При втором проходе производятся аналогичные сравнения, которые останавливаются на предпоследнем элементе массива, и, таким образом, после второго прохода на предпоследнем месте окажется второй наибольший элемент и т. д.
В нашем случае, поскольку массив состоит из пяти элементов, будет сделано четыре прохода, и на каждом проходе все элементы будут попарно сравниваться. Таким образом, при построении схемы алгоритма необходимо организовать два цикла A и B. Цикл B вводится для попарного сравнения элементов, цикл A – для задания числа проходов и номера последнего элемента для сравнения. Схема алгоритма решения задачи представлена на рис. 1.13.
40
