Условный и сложный операторы . Операторы цикла. Массивы.

Содержание

Слайд 2

08/30/2023 Операторы ветвления К операторам, позволяющим из нескольких возможных вариантов выполнения

08/30/2023

Операторы ветвления
К операторам, позволяющим из нескольких возможных вариантов выполнения программы

(ветвей) выбрать только один, относятся if и case.
Условный оператор if
Оператор if выбирает между двумя вариантами развития событий:
if <условие> then
<операторы>
[else
<операторы>]
Слайд 3

08/30/2023 Условный оператор if работает следующим образом: Сначала вычисляется значение -

08/30/2023

Условный оператор if работает следующим образом:
Сначала вычисляется значение <условия> - это

может быть любое выражение, возвращающее значение типа boolean.
Затем, если в результате получена "истина" (true), то выполняется оператор, стоящий после ключевого слова then, а если "ложь" (false) - без дополнительных проверок выполняется оператор, стоящий после ключевого слова else. Если же else-ветвь отсутствует, то не выполняется ничего.
Слайд 4

08/30/2023 Вложенный оператор If if i>0 then if s>2 then s:=1 else else s:=-1;

08/30/2023

Вложенный оператор If
if i>0 then
if s>2 then
s:=1
else
else
s:=-1;


Слайд 5

08/30/2023 if i>0 then Begin if s>2 then s:=1; end else s:=-1;

08/30/2023
if i>0 then
Begin
if s>2 then
s:=1;
end
else
s:=-1;

Слайд 6

08/30/2023 Оператор выбора case Оператор case позволяет сделать выбор между несколькими

08/30/2023

Оператор выбора case
Оператор case позволяет сделать выбор между несколькими вариантами:
case <переключатель>

of <список_констант> : <один_оператор>; [<список_констант> : <один_оператор>;] [<список_констант> : <один_оператор>;] [else <один_оператор>;]end;
Слайд 7

08/30/2023 Var operation:Char; x,y,z:real; stop:Boolean; ………. Case operatoin of ‘+’: z:=x+y;

08/30/2023

Var
operation:Char;
x,y,z:real;
stop:Boolean;
……….
Case operatoin of
‘+’: z:=x+y;
‘-’: z:=x-y;
‘*’: z:=x*y;
‘/’: z:=x/y;
Else
Stop:=true;
End;

Слайд 8

08/30/2023 дополнительные правила, относящиеся к структуре оператора Case : Переключатель должен

08/30/2023

дополнительные правила, относящиеся к структуре оператора Case :
Переключатель должен относиться только

к порядковому типу данных, но не к типу longint.
Переключатель может быть переменной или выражением.
Список констант может задаваться как явным перечислением, так и интервалом или их объединением.
Повторение констант не допускается.
Тип переключателя и типы всех констант должны быть совместимыми.
Слайд 9

08/30/2023 Пример оператора выбора: case symbol of 'a'..'z', 'A'..'Z' : writeln('Это

08/30/2023

Пример оператора выбора:
case symbol of
'a'..'z', 'A'..'Z' : writeln('Это латинская

буква'); 'а'..'я', 'А'..'Я' : writeln('Это русская буква');
'0'..'9' : writeln('Это цифра');
' ',#10,#13,#26 : writeln('Это пробельный символ'); else
writeln('Это служебный символ');
end;
Слайд 10

08/30/2023 Массивы Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин. Каждая

08/30/2023

Массивы
Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин. Каждая

отдельная величина называется компонентой массива.
Тип компонент может быть любым, принятым в языке ПАСКАЛЬ, кроме файлового типа.
Тип компонент называется базовым типом.
Вся совокупность компонент определяется одним именем. Для обозначения отдельных компонент используется конструкция, называемая переменной с индексом или с индексами: A[5] S[k+1] B[3,5].
Слайд 11

08/30/2023 Описание массива Для того чтобы задать массив, необходимо в разделе

08/30/2023

Описание массива
Для того чтобы задать массив, необходимо в разделе описания переменных

(var) указать его размеры и тип его компонент.
Общий вид описания (одномерного) массива:
array[<левая_граница>..<правая_граница>] of <тип_компонент>;
Например, одномерный (линейный) массив, состоящий не более чем из 10 целых чисел, можно описать следующим образом:
var a1: array [1..10] of integer;
Слайд 12

08/30/2023 Нумерация компонент массива Не обязана начинаться с 1 или с

08/30/2023

Нумерация компонент массива
Не обязана начинаться с 1 или с

0 - можно описывать массив, пронумерованный любыми целыми числами. Необходимо лишь, чтобы номер последней компоненты был больше, чем номер первой:
var a1: array [-5..4] of integer;
Нумеровать компоненты массива можно не только целыми числами. Любой порядковый тип данных (перечислимый, интервальный, символьный, логический, а также произвольный тип, созданный на их основе) имеет право выступать в роли нумератора.
Слайд 13

08/30/2023 допустимы следующие описания массивов: type charrr = 'a','c'..'z'; (- отсутствует

08/30/2023

допустимы следующие описания массивов:
type
charrr = 'a','c'..'z'; (- отсутствует символ "b")
a2:

array [charrr] of integer; - 25 целых компонент
a3: array [shortint] of real; - 256 вещественных компонент
Общий размер массива не должен превосходить 65 520 байт.
Нельзя задать массив
a4:array[integer]of byte;
поскольку тип integer покрывает 65 535 различных элементов.
Тем более нельзя использовать тип longint.
Слайд 14

08/30/2023 Тип компонент массива может быть любым: var a4: array[10..20] of

08/30/2023

Тип компонент массива может быть любым:
var
a4: array[10..20] of real; -

массив из компонент простого типа
a5: array[0..100] of record1; - массив из записей
a6: array[-10..10] of ^string; - массив из указателей на строки
a7: array[-1..1] of file; - массив из имен файловых переменных
a8: array[1..100] of array[1..100] of char; - двумерный массив (массив векторов)
Слайд 15

08/30/2023 Для краткости и удобства многомерные массивы можно описывать и более

08/30/2023

Для краткости и удобства многомерные массивы можно описывать и более простым

способом:
var
a9: array[1..10,1..20] of real; - двумерный массив 10 х 20
a10: array[boolean, -1..1,char, -10..10] of word; - четырехмерный массив 2 х 3 х 256 х 21
Слайд 16

08/30/2023 Общее ограничение на размер массива - не более 65 520

08/30/2023

Общее ограничение на размер массива - не более 65 520 байт

- сохраняется и для многомерных массивов.
Количество компонент многомерного массива вычисляется как произведение всех его "измерений".
Таким образом, в массиве а9
a9: array[1..10,1..20] of real; - двумерный массив 10 х 20
содержится 200 компонент, а в массиве а10 - 32 256 компонент.
a10: array[boolean, -1..1,char, -10..10] of word; - четырехмерный массив 2 х 3 х 256 х 21
Слайд 17

08/30/2023 Для ввода или вывода массива в список ввода или вывода

08/30/2023

Для ввода или вывода массива в список ввода или вывода

помещается переменная с индексом, а операторы ввода или вывода выполняются в цикле. Первый индекс определяет номер строки, второй - номер столбца. Двумерные массивы хранятся в памяти ЭВМ по строкам. Инициализация массивов (присвоение начальных значений всем компонентам массивов) осуществляется двумя cпособами.
Слайд 18

08/30/2023 Первый способ - с использованием типизированных констант, например: type Dim10=

08/30/2023

Первый способ - с использованием типизированных констант, например:
type

Dim10= Array[1..10] of Real; const
M10: Dim10 = ( 0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3 );
Слайд 19

08/30/2023 При инициализации двумерных массивов значения компонент каждого из входящих в

08/30/2023

При инициализации двумерных массивов значения компонент каждого из входящих в него

одномерных массивов записывается в скобках: type
Dim3x2= Array[1..3,1..2] of Integer; const
M3x2: Dim3x2= ( (1, 2), (3, 4), (5, 6) );
Второй способ инициализации - использование разновидности процедуры FillChar: FillChar( var V; NBytes: Word; B: Byte );
Эта процедура заполняет участок памяти однобайтовым значением. Например, для обнуления массива
A[1..10] of Real можно записать:
FillChar(A, 40, 0); или FillChar(A, SizeOf(A), 0);
Слайд 20

08/30/2023 Обращение к компонентам массива Массивы относятся к структурам прямого доступа.

08/30/2023

Обращение к компонентам массива
Массивы относятся к структурам прямого доступа. Это означает,

что возможно напрямую (не перебирая предварительно все предшествующие компоненты) обратиться к любой интересующей нас компоненте массива.
Доступ к компонентам линейного массива осуществляется так:
<имя_массива>[<индекс_компоненты>] а многомерного - так:
<имя_массива>[<индекс>,_,<индекс>]
Слайд 21

08/30/2023 Примеры использования компонент массива: a2['z']:= a2['z']+1; a3[-10]:= 2.5; a3[i+j]:= a9[i,j];

08/30/2023

Примеры использования компонент массива:
a2['z']:= a2['z']+1;
a3[-10]:= 2.5;
a3[i+j]:= a9[i,j];

Слайд 22

08/30/2023 Примеры задания массивов типизированными константами: type mass = array[1..3,1..2] of

08/30/2023

Примеры задания массивов типизированными константами:
type
mass = array[1..3,1..2] of byte;
const
a:

array[-1..1] of byte = (0,0,0); {линейный}
b: mass = ((1,2),(3,4),(5,6)); {двумерный}
s: array[0..9] of char = '0123456789';
Слайд 23

08/30/2023 Операторы циклов Для того чтобы обработать несколько однотипных элементов, совершить

08/30/2023

Операторы циклов
Для того чтобы обработать несколько однотипных элементов, совершить несколько одинаковых

действий и т.п., разумно воспользоваться оператором цикла - любым из четырех, который наилучшим образом подходит к поставленной задаче.
Оператор цикла повторяет некоторую последовательность операторов заданное число раз, которое может быть определено и динамически - уже во время работы программы.
Замечание: Алгоритмы, построенные только с использованием циклов, называются итеративными - от слова итерация, которое обозначает повторяемую последовательность действий.
Слайд 24

08/30/2023 for-to и for-downto В случае когда количество однотипных действий заранее

08/30/2023

for-to и for-downto
В случае когда количество однотипных действий заранее известно (например,

необходимо обработать все компоненты массива), стоит отдать предпочтение циклу с параметром (for).
Инкрементный цикл с параметром
for i:= first to last do <оператор>;
Слайд 25

08/30/2023 Цикл for-to работает следующим образом: вычисляется значение верхней границы last;

08/30/2023

Цикл for-to работает следующим образом:
вычисляется значение верхней границы last;
переменной i

присваивается значение нижней границы first;
производится проверка того, что i<=last;
если это так, то выполняется <оператор>;
значение переменной i увеличивается на единицу;
пункты 3-5, составляющие одну итерацию цикла, выполняются до тех пор, пока i не станет строго больше, чем last; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.
Слайд 26

08/30/2023 какое количество раз отработает цикл for-to в каждом из трех

08/30/2023

какое количество раз отработает цикл for-to в каждом из трех случаев:
first

< last: цикл будет работать last-first+1 раз;
first = last: цикл отработает ровно один раз;
first > last: цикл вообще не будет работать.
Слайд 27

08/30/2023 Декрементный цикл с параметром аналогичный вариант цикла for, который позволяет

08/30/2023

Декрементный цикл с параметром
аналогичный вариант цикла for, который позволяет производить

обработку не от меньшего к большему, а в противоположном направлении:
for i:= first downto last do <оператор>;
Слайд 28

08/30/2023 Цикл for-downto работает следующим образом: переменной i присваивается значение first;

08/30/2023

Цикл for-downto работает следующим образом:
переменной i присваивается значение first;
производится проверка

того, что i>=last;
если это так, то выполняется <оператор>;
значение переменной i уменьшается на единицу;
пункты 1-3 выполняются до тех пор, пока i не станет меньше, чем last; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.
Если при этом
first < last, то цикл вообще не будет работать;
first = last, то цикл отработает один раз;
first > last, то цикл будет работать first-last+1 раз.
Слайд 29

08/30/2023 while и repeat-until Если заранее неизвестно, сколько раз необходимо выполнить

08/30/2023

while и repeat-until
Если заранее неизвестно, сколько раз необходимо выполнить тело цикла,

то удобнее всего пользоваться циклом с предусловием (while) или циклом с постусловием (repeat-until).
Общий вид этих операторов:
while <условие_1> do <оператор>;
repeat <операторы> until <условие_2>;
Условие окончания цикла может быть выражено переменной, константой или выражением, имеющим логический тип.
Слайд 30

08/30/2023 Замечание: на каждой итерации циклы for и while выполняют только

08/30/2023

Замечание: на каждой итерации циклы for и while выполняют только по

одному оператору (либо группу операторов, заключенную в операторные скобки begin-end и потому воспринимаемую как единый составной оператор). В отличие от них, цикл repeat-until позволяет выполнить сразу несколько операторов: ключевые слова repeat и until сами служат операторными скобками.
Так же, как циклы for-to и for-downto, циклы while и repeat-until можно назвать в некотором смысле противоположными друг другу.
Слайд 31

08/30/2023 Последовательности действий при выполнении этих циклов таковы: Для while: 1.

08/30/2023

Последовательности действий при выполнении этих циклов таковы:
Для while:
1. Проверяется истино ли

<условие_1>.
2. Если это так, то выполняется <оператор>.
3. Пункты 1 и 2 выполняются до тех пор, пока <условие_1> не станет ложным.
Для repeat-until:
1. Выполняются <операторы>.
2. Проверяется, ложно ли <условие_2>
3. Пункты 1 и 2 выполняются до тех пор, пока <условие_2> не станет истинным.
Таким образом, если <условие_1> изначально ложно, то цикл while не выполнится ни разу. Если же <условие_2> изначально истинно, то цикл repeat-until выполнится один раз.
Слайд 32

08/30/2023 break и continue Существует возможность прервать выполнение цикла (или одной

08/30/2023

break и continue
Существует возможность прервать выполнение цикла (или одной его

итерации), не дождавшись конца его (или ее) работы.
break прерывает работу всего цикла и передает управление на следующий за ним оператор.
continue прерывает работу текущей итерации цикла и передает управление следующей итерации (цикл repeat-until) или на предшествующую ей проверку (циклы for-to, for-downto, while).
Замечание: При прерывании работы циклов for-to и for-downto с помощью функции break переменная цикла (счетчик) сохраняет свое текущее значение, не "портится".
Слайд 33

08/30/2023 Оператор безусловного перехода goto при всей его нежелательности все-таки существует

08/30/2023

Оператор безусловного перехода goto
при всей его нежелательности все-таки существует ситуация, когда

предпочтительно использовать именно его. Эта ситуация - необходимость передачи управления изнутри нескольких вложенных циклов на самый верхний уровень.
Дело в том, что процедуры break и continue прерывают только один цикл - тот, в теле которого они содержатся. Поэтому в упомянутой выше ситуации пришлось бы заметно усложнить текст программы, вводя много дополнительных прерываний. А один оператор goto способен заменить их все.
Слайд 34

08/30/2023 Вывод массива, удобный для пользователя Задача. Распечатать двумерный массив размерности

08/30/2023

Вывод массива, удобный для пользователя
Задача. Распечатать двумерный массив размерности MxN удобным

для пользователя способом. (Известно, что массив содержит только целые числа из промежутка [0..100].)
Алгоритм. нужно вывести массив построчно, отражая его структуру.
Реализация
for i:= 1 to n do
begin
for j:= 1 to m do
write(a[i,j]:4);
writeln;
end;
Слайд 35

08/30/2023 Как с помощью цикла можно ввести значения элементов с клавиатуры:

08/30/2023

Как с помощью цикла можно ввести значения элементов с клавиатуры:
For I:=1

to n do
Begin
writeln(‘Введите значение элемента ’,’I’ );
readln(a[i]);
End;
Слайд 36

08/30/2023 Как присвоить значения элементам массива или как заполнить массив с

08/30/2023

Как присвоить значения элементам массива или как заполнить массив с помощью

датчика случайных чисел:
For I:=1 to n do
Begin
a[i]:=random(21)-10;
End;
Массив будет заполнен целыми числами от –10 до 10