Практикум ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ_Янченко Д.В
.pdf70
Пример 6.5.1. Известны данные среднедекадных расходах воды за n декад (n ≤ 50). Требуется определить средний расход.
Для решения этой задачи необходимо воспользоваться алгоритмами ввода данных в одномерный массив (5.5.1) и алгоритмом нахождения среднего значения элементов массива (5.5.10).
Переменные, используемые в задаче:
-Одномерный массив Q – Q:ARRAY [1..50] OF REAL;
-N, I - количество и индекс переменной соответственно (Integer);
-S, SR – сумма элементов (S) и среднее значение (SR) – REAL.
Блок-схема алгоритма представлена на рисунке 33.
Текст программы на языке Pascal:
Program zad10;
Var
Q :ARRAY [1..50] OF Real;
I, N:Integer;
S, SR :Real;
Begin
Write(‘ N = ‘);
Readln(N);
For I:=1 To N Do Begin
Write(‘Q[‘,i,’]= ‘); Readln(Q[i]);
End;
S:=0;
For I:=1 To N Do
S := S +Q[I];
Sr := S/N;
Writeln(‘ Sr = ‘,Sr:8:3);
End.
Контрольный пример.
Исходные данные N = 5, Массив Q = {50; 60; 65; 76; 72};
Сумма элементов S = 323. Среднее значение Sr = 64,6 .
71
Начало
Ввод
N
I = 1
Ввод
QI
I = I + 1
Да
I ≤ N
S = 0 Нет
I = 1
S= S+Qi
I = I + 1
Да
I ≤ N
Нет
Sr = Sn
Ввод
Sr
Конец
Рисунок 33 – Алгоритм решения примера 6.5.1
Алгоритм нахождения среднего значения Алгоритм ввода элементов в массив
72
Пример 6.5.2. Известны данные среднедекадных температурах почв за К декад (К ≤ 30). Требуется определить наибольшую и наименьшую из положительных температур.
Для решения этой задачи необходимо воспользоваться алгоритмами ввода данных в одномерный массив (5.5.1) и алгоритмом нахождения максимального и минимального значения элементов массива (5.5.8). Однако, по условию задачи, необходимо найти максимальную и минимальную температуру не среди всех значений, а только среди положительных (отрицательные температуры игнорируются).
Необходимо модифицировать стандартный алгоритм нахождения максимума (минимума) так, чтобы работать только с положительными элементами. Для этого необходимо:
1)присвоить в переменную условного максимума (минимума) только положительное значение температуры;
2)при определении текущего максимума (минимума) проверять только положительные элементы.
Проверка на положительность осуществляется с помощью оператора условного перехода. Проверяется больше ли текущее значение температуры нуля или нет. Присвоение положительного значения температуры в переменную условного максимума можно оформить как самостоятельным циклом или совместить с вводом значений. В этом случае необходимо модифицировать алгоритм ввода исходных данных, в одномерный массив, добавив в него оператор условного перехода, для определения положительной температуры.
Переменные, используемые в задаче:
-Одномерный массив Т – Т:ARRAY [1..30] OF REAL;
-N, I - количество и индекс переменной соответственно (Integer);
-MAX, MIN – максимальное и минимальное значение – REAL.
Алгоритм решения задачи представлен на рисунке 34 (модификация ввода данных и нахождения максимума и минимума). Текст программы на языке Pascal:
Program zad11;
Var
T:ARRAY [1..30] OF Real;
I, N:Integer;
MAX, MIN :Real;
Begin
Write(‘ N = ‘);
73
Readln(N);
For I:=1 To N Do Begin Write(‘T[‘,i,’]= ‘); Readln(T[i]); If T[I] >= 0 Then Begin
MAX:=T[I];
MIN:=T[I];
End;
End;
For I:=1 To N Do
If (T[I] >= 0) And (T[I] > Max) Then Max:=T[I]; For I:=1 To N Do
If (T[I] >= 0) And (T[I] < Min) Then Min:=T[I]; Writeln(‘ Max = ‘,Max:8:3, ‘ Min = ‘, Min:8:3);
End.
Начало
Ввод
N
I = 1
Ввод
TI
Да
TI ≥ 0
Нет |
MAX= TI |
|
|
|
|
|
|
|
MIN= TI
I = I + 1
Да
I ≤ N
1
Алгоритм ввода элементов в массив и присвоения условного максимума и минимума
|
|
74 |
|
|
|
|
1 |
|
|
|
|
I = 1 |
|
|
|
||
TI |
≥ 0 |
Да |
нахожденияАлгоритм |
элементамаксимального |
|
Да |
|||||
Нет |
|
||||
|
|
|
|||
|
TI>MAX |
|
|
||
|
|
MAX= TI |
|
|
|
I = I + 1 |
|
|
|
||
I ≤ N |
Да |
|
|
||
|
Алгоритмнахождения |
минимальногоэлемента |
|||
Нет |
|
TI<MIN |
|||
I = 1 |
|
|
|
||
TI |
≥ 0 |
Да |
|
|
|
Да |
|
|
|||
|
|
|
|
||
|
|
MIN= TI |
|
|
|
I = I + 1 |
|
|
|
||
I ≤ N |
Да |
|
|
||
|
|
|
|||
Вывод |
|
|
|
||
MAX, MIN |
|
|
|
||
Конец |
|
|
|
||
Рисунок 34 – Алгоритм решения примера 6.5.2 |
|
|
75
Комментарии к программе.
При вводе значений массива (первый цикл) проверяется положительность числа (оператор If T[I] >= 0 Then …). Если условие выполняется, то необходимо присвоить текущее значение массива в переменные условного минимума и максимума. Поскольку по условию алгоритма после служебного слова Then необходимо записать больше одного оператора (в нашем случае два) необходимо использовать составной оператор:
If T[I] >= 0 Then Begin MAX:=T[I]; MIN:=T[I];
End;
При нахождении максимума и минимума необходимо проверка двойного условия – число положительно и число больше (меньше) чем текущий максимум (минимум). Возможно, записать два оператора условного перехода друг за другом:
If T[I] >= 0 Then
If T[I] > Max Then Max:=T[I];
или использовать в операторе условного перехода служебное слово «И»
(AND):
If (T[I] >= 0) And (T[I] > Max) Then Max:=T[I];
Оба варианты равносильны.
Контрольный пример.
Исходные данные N = 10, Массив Т = {5; -2; 1; 3; -5; -3; 6; 10; 4; 5};
Максимальный элемент Max = 10. Минимальный элемент Min = 1 .
Пример 6.5.3. Известны данные среднемесячных уровнях воды в реке за N месяцев (N ≤ 20). Требуется определить минимальный уровень и превышение каждого уровня над минимальным.
При решении этого примера будут использованы два стандартных алгоритма – алгоритм ввода данных в одномерный массив (5.5.1) и алгоритм нахождения минимального значения (5.5.8).
Для нахождения превышения каждого уровня над минимальным необходимо в цикле для каждого элемента массива найти разность между текущим элементом и найденным минимумом. Поскольку данный алгоритм не относится к характерным приемам обработки одномерных массивов необходимо его записать самостоятельно. Воспользуемся алгоритмом, изображенным на рисунке 10. В этом алгоритме обработка элемента будет заключаться в нахождении разницы между текущим элементом и
76
минимумом. Найденную разность поместим в переменную, например, PR (превышение) и выведем на печать. Определение разницы и вывод ее на печать выполним в одно цикле (в программе для этого придется воспользоваться составным оператором).
Переменные, используемые в задаче:
-Одномерный массив Н – Н:ARRAY [1..20] OF REAL;
-N, I - количество и индекс переменной соответственно (Integer);
-MIN – минимальное значение массива (REAL);
-PR – превышение каждого уровня над минимальным (REAL).
Алгоритм решения задачи представлен на рисунке 35.
Текст программы на языке Pascal:
Program zad12; Var
H:ARRAY [1..30] OF Real; I, N:Integer;
MIN, Pr :Real; Begin
Write(‘ N = ‘); Readln(N);
For I:=1 To N Do Begin Write(‘H[‘,i,’]= ‘); Readln(H[i]);
End;
Min := H[1];
For I:=1 To N Do
If H[I] < Min Then Min:=H[I]; Writeln(‘ Min = ‘, Min:8:3);
For I:=1 To N Do Begin
Pr := H[I] – Min;
Writeln(‘ Превышение ‘, I,’-го уровня = ‘, Pr:8:3); End;
End.
Начало
Ввод
N
I = 1
Ввод НI
I = I + 1
I ≤ N
Нет
MIN= Н1
I = 1
НI<MIN
Нет
I = I + 1
77
Да
Да
MIN= НI
I ≤ N |
Да |
|
1
Алгоритм нахождения минимального элемента Алгоритм ввода элементов в массив
78
1
Ввод
MIN
I = 1
Pr = НI - MIN
Ввод
Pr
I = I + 1
I ≤ N |
Да |
|
Конец
Рисунок 35 – Алгоритм решения примера 6.5.3
Алгоритм нахождения разности и ее вывод
Контрольный пример.
Исходные данные N = 10, Массив Н= {25;22;22;23;21;23;26;30;28; 26};
Минимальный элемент Min = 21. Превышение уровней над минимальным PR:
Превышение 1-го уровня = |
4.000 |
Превышение 2-го уровня = |
1.000 |
Превышение 3-го уровня = |
1.000 |
Превышение 4-го уровня = |
2.000 |
Превышение 5-го уровня = |
0.000 |
Превышение 6-го уровня = |
2.000 |
Превышение 7-го уровня = |
5.000 |
Превышение 8-го уровня = |
9.000 |
Превышение 9-го уровня = |
7.000 |
Превышение 10-го уровня = |
5.000 |
79
7 ВАРИАНТЫ КОНТРОЛЬНЫХ ЗАДАНИЙ
7.1 Варианты задания №1
Для перечисленных ниже задач, необходимо составить блок-схему алгоритма и программу на языке Pascal, выполняющую вычисление требуемой величины и вывода найденного значения.
Выбор конкретной задачи производят по номеру задания №1 (см. таблицу 3).
1. Вычислить величину расхода Q
|
если H2 = 0 |
||
µω 2gH , |
|||
Q = |
если H |
|
≠ 0 |
µω 2gZ , |
2 |
||
|
|
|
2. Вычислить коэффициент Шези С для бетонного канала
C = 1n R y
|
|
n, |
если R ≤1 |
при |
1,5 |
||
y = |
|
|
|
|
|
n, |
если R >1 |
|
1,3 |
3. Определить повторяемость L гидрологической величины
|
100 |
, |
|
|
|
|
если P ≤50 |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
P |
|
|
|
|
|
|
|
|
|||||||||
|
L = |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
100 |
|
|
, |
|
если P >50, |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
100 − P |
|
|
|
|
|
|
|
|
|
|||||||||
|
где P = |
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n +1 |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
4. |
Вычислить максимальный изгибающий момент |
||||||||||||||||||
|
|
|
|
2 |
|
|
Q |
2 |
|
|
|
L |
|||||||
|
|
|
|
|
L |
|
|
|
|
|
|
|
|||||||
|
|
P |
|
|
|
− |
|
, |
если a ≠ |
|
|
|
|
||||||
|
M = |
8 |
|
6 |
2 |
|
|||||||||||||
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
L |
|||||||
|
|
P |
L |
, |
|
|
|
|
|
если a = |
|||||||||
|
|
|
|
|
|
|
|
2 |
|
|
|||||||||
|
|
|
12 |
|
|
|
|
|
|
|
|
|
|||||||
5. |
Вычислить величину испарения Е с поверхности суши |
Eo ω1 ω+ω2 , E = 2 o
Eo ,
если ω1 +2ω2 <ωo
если ω1 +2ω2 ≥ωo