20.
21.
22. 23.24.
25.
26.
27.28.
29.
30.
1. Какие стандартные тригонометрические функции, реализованные в языке Паскаль, вы знаете?
2. Можно ли аргумент стандартной тригонометрической функции задать в градусах?
3. Каков приоритет выполнения арифметических операций?
4. Из каких символов может состоять идентификатор?
5. Можно ли ключевые слова использовать в качестве имен переменных?
6. Как вывести вещественное значение в форме с плавающей точкой, сохранив заданное число знаков мантиссы?
7. Как работает условный оператор?
8. Какие формы записи условного оператора вы знаете?
9. В каких случаях при записи условного оператора необходимо применять составной оператор?
ЛАБОРАТОРНАЯ РАБОТА № 6
Операторы цикла. одномерные массивы
Цель работы: приобрести опыт работы, связанной с вычислениями, при которых приходится выполнять многократно (циклически) повторяющиеся действия и обработкой данных, размещенных в одномерных массивах.
Основные понятия
Цикл – это многократно выполняемая в программе последовательность действий (команд). Используя циклы, можно небольшим количеством операторов описать длинную последовательность операций по обработке однотипных данных. Любой цикл характеризуется условием выхода из него и телом цикла – совокупностью команд (операторов), ради выполнения которых он организован. В языке Паскаль имеются три типа цикла:
1) цикл со счетчиком (параметром);
2) цикл с предусловием;
3) цикл с постусловием.
Цикл со счетчиком или оператор цикла FOR может использоваться в двух представлениях (форматах):
1) FOR <параметр цикла>:= <S1> TO <S2> DO
<Оператор>;
2) FOR <параметр цикла>:= <S1> DOWNTO <S2> DO
<Оператор>;
Параметр цикла – переменная одного из порядковых типов (т.е. любого из стандартных типов, кроме вещественного). S1 и S2 – выражения совпадающие по типу с параметром цикла и определяющие его начальное и конечное значение соответственно. FOR, TO, DOWNTO, DO – зарезервированные слова, составляющие заголовок цикла. <Оператор> – простой или составной оператор, являющийся телом цикла и выполняющийся на каждом его шаге. При работе оператора цикла его параметр изменяется от начального до конечного значения. Шаг изменения всегда единичный (фактически в качестве нового значения параметра цикла берется, в зависимости от формы записи, следующее или предыдущее значение в его типе). Таким образом, количество итераций цикла зависит от начального и конечного значений параметра цикла. Первая форма записи оператора применяется в тех случаях, когда начальное значение меньше конечного. При этом подразумевается, что параметр цикла увеличивается. Вторая форма записи используется, когда начальное значение больше конечного и параметр цикла должен уменьшаться. Изменять в теле цикла его параметр непосредственно с помощью присваивания не рекомендуется. Цикл FOR используется в тех случаях, когда число повторений известно.
Оператор цикла с предусловием WHILE имеет следующий формат:
WHILE <условие> DO <Тело цикла>;
<условие> – логическое выражение, <тело цикла> – простой или составной оператор. Оператор выполняется до тех пор, пока <условие> является истинным (TRUE).
Оператор цикла с постусловием REPEAT имеет следующий формат:
REPEAT <оператор 1>...<оператор n> UNTIL<условие>;
Операторы, заключенные между словами REPEAT и UNTIL, составляют тело цикла. Оператор REPEAT выполняется до тех пор, пока <условие> является ложным (FALSE).
Операторы цикла WHILE, REPEAT, как правило, используются в тех случаях, когда число повторений заранее неизвестно.
Массив – это упорядоченный набор переменных одного типа, имеющий общее для всех своих элементов имя. Доступ к элементам массива осуществляется путем указания его имени и индексов, которые позволяют однозначно определить нужный элемент. Если для доступа к элементу используется один индекс, то такой массив называется одномерным. В этом случае индекс фактически представляет собой порядковый номер элемента. В двумерных массивах (матрицах) для доступа к элементу используется два индекса и т.д. Переменная, являющаяся массивом, описывается в программе следующим образом:
Var <идентификатор>: ARRAY [<сп.инд.типов>] OF <тuп>;
Здесь <идентификатор> – имя массива; ARRAY, OF – зарезервированные слова (массив, из); <сп.инд.типов> – список из одного или нескольких индексных типов (<нач. знач.> . . <кон. знач.>), разделенных запятыми; квадратные скобки, обрамляющие список – требование синтаксиса; <тип> – тип элементов массива: любой из стандартных или определенных пользователем типов данных.
В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы или их интервалы, кроме LONGINT. Индексный тип одновременно определяет граничные значения индекса и количество элементов в массиве. Объем памяти, отводимой под элементы массива, не может превышать 65 520 байт.
Примеры описания массивов:
1) VAR X: ARRAY [1..20] OF Real;
2) VAR Y: ARRAY [0..15] OF Char;
Здесь описаны два одномерных массива: массив X из 20 элементов вещественного типа и массив Y из 16 элементов символьного типа. Для обращения к элементу массива необходимо после имени в квадратных скобках указать индекс. Например, X[1], X[7]. В качестве индекса можно указать любое выражение, совпадающее с ним по типу:
i:=2;
x[i]:=12.5;
x[i*3]:=0.76;
Обработку массивов удобнее всего производить с применением циклов. Например, следующий фрагмент производит ввод элементов с клавиатуры:
for i:=1 to 20 do
read(x[i]);
В приведенном выше примере на каждом шаге цикла производится ввод элемента массива с индексом i = 1,2,…,20. Вывод элементов массива производится аналогично.
Пример использования одномерного массива
Задание. Вычислить и сохранить в массиве значения функции
на отрезке [a;b] в точках xi= a + i×h, i = 0,1,2…,n, h = (b–a)/n при a = 3.5, b = 4, n = 4. Найти наибольшее и среднее значение функции.Текст программы:
program example;
const a=3.5;
b=4;
n=4;
var x,s,max,h:real;
i:integer;
y:array[0..n] of real;
begin
h:=(b-a)/n;
{вычисление значений функции, сохранение результатов в массиве y,
вывод на экран значений функции и аргумента:}
for i:=0 to n do
begin
x:=a+i*h;
y[i]:=sin(x)/sqrt(x-2);
writeln('x=',x:5:2,' y=',y[i]:5:2);
end;
{нахождение суммы элементов и
наибольшего значения:}
s:=0;
for i:=0 to n do
begin
s:=s+y[i];
if i=0 then max:=y[i]
else if y[i]>max then max:=y[i];
end;
s:=s/(n+1); {вычисление среднего значения}
writeln('Наиб. знач.=',max:5:2,
' Среднее знач.=',s:5:2);
end.
Результаты вычислений:
x= 3.50 y=-0.29
x= 3.63 y=-0.36
x= 3.75 y=-0.43
x= 3.88 y=-0.49
x= 4.00 y=-0.54
Наиб. знач.=-0.29 Среднее знач.=-0.42
Задание к лабораторной работе
Выбрать алгоритм, составить блок-схему и программу для вычисления значения функции y = f(x) в точках xi= a + i×h, i = 0,1,2…,n, h = (b – a)/n промежутка [a,b]. Результаты вычислений сохранить в массиве Y. Найти наибольшее и среднее значения функции y = f(x). Вид функции, значения a, b, n указаны в каждом конкретном варианте задания.
Варианты заданий
1. xÎ[2; 3], n = 10 | 2. xÎ[1; 2], n = 10 |
3. xÎ[–1; –0,5], n = 5 | 4. xÎ[1,5; 2], n = 5 |
5. xÎ[2; 3], n = 10 | 6. xÎ[0,2; 0,8], n = 6 |
7. xÎ[2; 3], n = 10 | 8. xÎ[1; 2], n = 10 |
9. xÎ[1; 1,8], n = 4 | 10. xÎ[2,2; 2,6], n = 4 |
11. xÎ[1; 2], n = 10 | 12. xÎ[3,5; 4], n = 5 |
13. xÎ[–2; –1], n = 10 | 14. xÎ[0,5; 1,5], n = 10 |
15. xÎ[0; 1], n = 10 | 16. xÎ[1; 2], n = 10 |
17. xÎ[3; 4], n = 10 | 18. xÎ[1; 2], n = 10 |
19. xÎ[0; 1], n = 10 | 20. xÎ[2; 3], n = 10 |
21. xÎ[1; 2], n = 10 | 22. xÎ[2; 3], n = 10 |
23. xÎ[1; 2], n = 10 | 24. xÎ[2; 3], n = 10 |
25. xÎ[3; 4], n = 10 | 26. xÎ[1; 1,5], n = 5 |
27. , xÎ[1; 2], n = 10 | 28. xÎ[4; 5], n = 10 |
29. ,xÎ[–1; 0], n = 10 | 30. xÎ[0; 1], n = 10 |
КОНТРОЛЬНЫЕ ВОПРОСЫ