Program z2;
Var
a, b,c, R,V, F:real;
Begin
read(b, c,R);
a:=sqrt(sqr(c)-sqr(b));
V:=4/3*pi*R*R*R;
F:=(exp(0.2*ln(V))+c)/a;
writeln(F);
End.
7.6. Программирование разветвлений
Для реализации алгоритма разветвляющейся структуры в языке Pascal используются следующие операторы.
Оператор безусловного перехода имеет вид:goto M
Это означает, что надо перейти к строке с меткой M.
Метка – обозначение закладки в программе (метка обычно отделяется от остального текста программы двоеточием).
Оператор условного перехода (условный оператор) имеет вид:if U then Op1 else Op2
Это означает, что если условие U истинное, то выполнять оператор Op1, иначе выполнять оператор Op2.
Условие – логическое выражение, которое может принимать одно из 2-х значений: «истина» или «ложь».
Оператор варианта (оператор выбора) имеет вид:case S of
Z1 : Op1;
…
ZN : OpN
else Op0
end
Это означает, что в случае, если селектор S принимает значение из списка Z1, то выполнять оператор Op1, … если селектор S принимает значение из списка ZN, то выполнять оператор OpN, иначе выполнять оператор Op0.
Селектор – выражение порядкового типа, которое может принимать одно из многих значений (селектор может быть целым числом и не может быть дробным числом).
Задача 3.
Условие задачи. Вычислить величину ![]()
Блок-схема.
|
Программа.
Program z3;
Var
a, b,c:real;
Begin
read(a, b);
if a>b
then c:=a+b
else c:=a-b;
writeln(c);
End.
7.7. Программирование циклов
Для реализации алгоритма циклической структуры в языке Pascal используются следующие операторы.
Оператор цикла с предусловием имеет вид:while U do Op
Это означает, что пока условие U истинное, повторять оператор Op в цикле; как только условие станет ложным, выйти из цикла.
Оператор цикла с постусловием имеет вид:repeat
Op1;
…
OpN
until U
Это означает, что надо повторять операторы Op1, … OpN в цикле до тех пор, пока условие U не станет истинным; как только условие станет истинным, выйти из цикла.
Оператор цикла с параметром:а) При увеличении параметра имеет вид:
for Par := Nz to Kz do Op
Это означает, что для параметра Par, увеличивающегося от начального значения Nz до конечного значения Kz с шагом 1, повторять оператор Op в цикле.
б) При уменьшении параметра имеет вид:
for Par := Nz downto Kz do Op
Это означает, что для параметра Par, уменьшающегося от начального значения Nz до конечного значения Kz с шагом (-1), повторять оператор Op в цикле.
Параметр цикла (счётчик циклов) – переменная порядкового типа, изменяющаяся в цикле от начального до конечного значения с каким-либо шагом (параметр цикла может быть целым числом и не может быть дробным числом).
Задача 4.
Условие задачи. Вычислить значения функции
при x, увеличивающемся от xн до xк с шагом Δx
(Введём обозначения: xн → xn ; xк → xk ; Δx → dx ).
Блок-схема.
Программа.
Program z4;
Var
x, y,xn, xk, dx:real;
Begin
read(xn, xk, dx);
x:=xn;
while x<=xk do
begin
y:=sin(x)/cos(x);
writeln('при x=',x:10:3,' y=',y:7:2);
x:=x+dx;
end;
End.
7.8. Одномерные массивы
Одномерный массив (вектор) – массив, элементы которого имеют один неповторяющийся номер.
Индекс одномерного массива – порядковый номер элемента в одномерном массиве.
Описание одномерного массива в разделе описания переменных (Var) на языке Pascal имеет вид:
Mas : array [ IMin.. IMax ] of T ;
Это означает, что переменная Mas является массивом, который может иметь индексы от IMin до IMax у элементов типа T.
Пример.
Var A : array [1..100] of real;
Это означает, что переменная A – массив, который может содержать от 1 до 100 элементов вещественного типа.
Доступ к элементу одномерного массива на языке Pascal имеет вид:
Mas [ Ind ]
Это означает доступ к элементу массива Mas с индексом Ind.
Пример.
A[1]
b[3]
c[i]
d[n]
f[k+1]
Это означает 1-й элемент массива A и т. д.
Задача 5.
Условие задачи. Дан массив A, состоящий из n элементов (n ≤ 100). Найти сумму элементов массива:
.
Блок-схема.
Программа.
Program z5;
Var
A:array[1..100] of real;
i, n:integer;
s:real;
Begin
read(n);
s:=0;
for i:=1 to n do
begin
read(A[i]);
s:=s+A[i];
end;
writeln(s);
End.
7.9. Фрагменты вычисления характеристик одномерного массива
Рассмотрим фрагменты программ в таблице 4.
Таблица 4
Характеристика | Для всех элементов | Для части элементов |
| Сумма s | s:=0; for i:=1 to n do s:=s+A[i]; | s:=0; for i:=1 to n do if A[i]>z then s:=s+A[i]; |
| Количество k | k:=n; | k:=0; for i:=1 to n do if A[i]>z then k:=k+1; |
| Произведение p | p:=1; for i:=1 to n do p:=p*A[i]; | p:=1; for i:=1 to n do if A[i]>z then p:=p*A[i]; |
| Максимальное значение max | max:=A[1]; for i:=2 to n do if A[i]>max then max:=A[i]; | max:=-1E10; for i:=1 to n do if (A[i]>max) and (A[i]>z) then max:=A[i]; |
| Минимальное значение min | min:=A[1]; for i:=2 to n do if A[i]<min then min:=A[i]; | min:=1E10; for i:=1 to n do if (A[i]<min) and (A[i]>z) then min:=A[i]; |
| Среднее значение sr | s:=0; for i:=1 to n do s:=s+A[i]; sr:=s/n; | s:=0; k:=0; for i:=1 to n do if A[i]>z then begin s:=s+A[i]; k:=k+1; end; sr:=s/k; |
7.10. Фрагменты операций с одномерными массивами
Рассмотрим фрагменты программ в таблице 5.
Таблица 5
Операция | Фрагмент программы |
| Ввод элементов массива | for i:=1 to n do read(A[i]); |
| Вывод элементов массива | for i:=1 to n do writeln(A[i]); |
| Замена элементов массива на величину z | for i:=1 to n do A[i]:=z; |
| Увеличение элементов массива на величину z (аналогично уменьшение, умножение, деление) | for i:=1 to n do A[i]:=A[i]+z; |
| Вычисление элементов массива B прибавлением к элементам массива A величины z (аналогично вычитанием, умножением, делением) | for i:=1 to n do B[i]:=A[i]+z; |
| Вычисление индекса максимального элемента imax (аналогично минимального) | max:=A[1]; imax:=1; for i:=2 to n do if A[i]>max then begin max:=A[i]; imax:=i; end; |
| Вывод индексов для части элементов | for i:=1 to n do if A[i]>z then writeln(i); |
| Перестановка 1-го и 2-го элементов одномерного массива | c:=A[1]; A[1]:=A[2]; A[2]:=c; |
7.11. Двумерные массивы
Двумерный массив (матрица) – массив, элементы которого имеют два номера (номер строки номер столбца).
Индекс двумерного массива – порядковый номер строки или столбца в двумерном массиве.
Описание двумерного массива в разделе описания переменных (Var) на языке Pascal имеет вид:
Mas : array [ IMin.. IMax, JMin.. JMax ] of T ;
Это означает, что переменная Mas является массивом, который может иметь индексы строк от IMin до IMax, индексы столбцов от JMin до JMax у элементов типа T.
Пример. Var A : array [1..10,1..15] of real;
Это означает, что переменная A – массив, который может содержать от 1 до 10 строк, от 1 до 15 столбцов из элементов вещественного типа.
Доступ к элементу двумерного массива на языке Pascal имеет вид:
Mas [ Ind1 , Ind2 ]
где Mas – имя массива, Ind1 – индекс строки, Ind2 – индекс столбца.
Это означает доступ к элементу массива Mas, находящемуся в строке с индексом Ind1 и в столбце с индексом Ind2 .
Пример. A[1,1]; b[i, j]
Это означает элемент массива A в 1-й строке и 1-м столбце, и т. д.
Задача 6.
Условие задачи. Дан двумерный массив A из m строк и n столбцов (m ≤ 10; n ≤ 15). Найти сумму положительных элементов в массиве A.
Блок-схема.
Программа.
Program z6;
Var
A:array[1..10,1..15] of real;
i, j,m, n:integer;
s:real;
Begin
read(m, n);
s:=0;
for i:=1 to m do
for j:=1 to n do
begin
read(A[i, j]);
if A[i, j]>0 then s:=s+A[i, j];
end;
writeln(s);
End.
7.12. Подпрограммы
Подпрограмма – именованный блок операторов, отдельно выделенный в составе программы.
Подпрограммы бывают 2-х видов:
Подпрограмма-функция – подпрограмма для вычисления функции, которая возвращает какое-либо значение. Подпрограмма-процедура – подпрограмма для выполнения действий, которая не возвращает никаких значений.Формальные параметры – переменные, которые объявляются в заголовке подпрограммы (перечисляются в скобках через точку с запятой с указанием спецификации и типа параметров; параметры одного типа перечисляются через запятую).
Фактические параметры – переменные или значения, которые подставляются вместо формальных параметров в момент конкретного вызова подпрограммы (перечисляются в скобках через запятую).
Параметры-значения – параметры, значения которых передаются в подпрограмму в момент её вызова и назад не выдаются.
Параметры-переменные – параметры, значения которых передаются в подпрограмму в момент её вызова и могут использоваться после выполнения подпрограммы (перечисляются со словом var перед именем переменной).
Локальные переменные – переменные, используемые только внутри подпрограммы.
Глобальные переменные – переменные, которые могут использоваться в любом месте основной программы,
в т. ч. и в подпрограмме.
Заголовок описания функции имеет вид:
function Func ( SFP1 : T1 ; … ; SFPN : TN ) : T ;
Это означает, что задаётся подпрограмма-функция с именем Func, зависящая от формальных параметров из списка SFP1 типа T1 , … из списка SFPN типа TN, а также вычисляющая значение типа T.
Вызов функции из другой части программы имеет вид:
Func ( SFP )
Это означает, что вычисляется значение функции Func, зависящей от фактических параметров из списка SFP, причём вызов функции может осуществляться в составе выражения.
Заголовок описания процедуры имеет вид:
procedure Proc ( SFP1 : T1 ; … ; SFPN : TN ) ;
Это означает, что задаётся подпрограмма-процедура с именем Proc, зависящая от формальных параметров из списка SFP1 типа T1 , … из списка SFPN типа TN, а также выполняющая какие-либо действия.
Вызов процедуры из другой части программы имеет вид:
Proc ( SFP )
Это означает, что выполняются действия в теле процедуры Proc, зависящей от фактических параметров из списка SFP, причём вызов процедуры не может осуществляться в составе выражения.
Задача 7.
Условие задачи. Вычислить
, а также найти
с использованием подпрограммы-функции возведения в степень.
Программа.
Program z7;
Var
A:array[0..100] of real;
B, C,x:real;
i, n:integer;
Function Step(a, b:real):real;
begin
Step:=exp(b*ln(a));
end;
Begin
read(n, x);
for i:=0 to n do
read(A[i]);
B:=Step(2.1,5)+Step(7,0.3);
C:=0;
for i:=0 to n do
C:=C+A[i]*Step(x, i);
writeln(B, C);
End.
Задача 8.
Условие задачи. В двумерном массиве A из 3 строк и 4 столбцов вычислить сумму и произведение отрицательных элементов с использованием подпрограммы-процедуры, именованных констант и типов данных.
Программа.
Program z8;
Const m=3; n=4;
Type TT=array [1..m,1..n] of real;
Var A:TT; i, j:integer; s, p:real;
Procedure SumPro(B:TT; m, n:integer; var s, p:real);
var i, j:integer;
begin
s:=0; p:=1;
for i:=1 to m do
for j:=1 to n do
if B[i, j]<0 then
begin
s:=s+B[i, j];
p:=p*B[i, j];
end;
end;
Begin
for i:=1 to m do
for j:=1 to n do
read(A[i, j]);
SumPro(A,3,4,s, p);
writeln(s, p);
End.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



