Операции цикла
Блоки ради выполнения который организуется цикл называется телом цикла. Остальные операторы служат для управления процессом повторения: это начальные установки, проверка условия продолжение цикла и модификация параметров цикла. 1 проход цикла называется итерацией.
Цикл с параметром for
Этот оператор применяется если требуется выполнить тело цикла заранее заданное количество раз (известное количество повторов).
1-й формат: FOR<параметр>:=<выражение_1>to<выражение_2>do
оператор 2-й формат: FOR<параметр>:=<выражение_2>downto<выражение_1>do
оператор
Выражение должны быть того же типа что и переменна цикла, оператор простым или составным.
Пример:
Var
I, Sum:Integer; Begin Sum:=0; For
I:=10 downto 1 to
Begin Writeln(I);
Inc (Sum,I) End; Writeln(‘сумма
чисел:_’,sum) End.
Если в теле цикла необходимо выполнить более 1-го оператора необходимо заключить их в блок с помощью begin и end.
Экзаменационная задачи:
-
Найти среднее арифметическое минимального и максимального элемента их 10 введённых.
-
Из n введённых чисел найти максимальное значение среди положительных элементов.
-
Вычислить суммы 1-ых n слагаемых 1*+2*-3*-4*+5*-6*……(каждое 3-е слагаемое со знаком - )
Начальные
установки
Начальные
установки
выражение Операторы
операторы Модификация
параметров
модификация выражение
Начальные установки – до входа в цикл задают значение переменных которые в нём используются.
Проверка условия продолжение цикла выполняется над каждой операцией либо до тела (предусловие) либо после тела (постусловие).
Параметром цикла называется переменная которая используется при проверки условия и принудительно изменяется на каждой операции, при том , как правило, на одну и туже величину.
Цикл с предусловием while
Формат оператора:
While<выражение>do<оператор>
Выражение должно быть логического типа (может быть операция отношения, или просто логическая переменная(истина или ложь)). Если результат вычисление выражение = true то выполняется простой или составной оператор после зарезервированного слова do, это продолжается до того момента пока значение выражение не становится = false. После окончанию цикла управление передаётся на следующий за ним оператор.
Пример: Написать программу печати значения функции для аргумента изменяющийся в заданный пределах заданным шагом Dx
t, x<0
tx, 10>x>=0 = y
2t, x>=10
-
Ввести исходные данные
-
Взять первое значение аргументу
-
Определить к какому из интервалов оно принадлежит
-
Вычислить значение функций по соответствующей формуле
-
Вывести на экран результат
-
Перейти к следующему значению аргумента
-
Если оно не превышает конечное значение повторить шаги 3-6, иначе закончить.
Цикл с постусловием repeat
Формат оператора:
Repeat
Оператор;
Оператор;
…………………….
Оператор;
Until
Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется. В отличии от while цикл будет выполнятся до тех пор пока логическое выражение после слова until ложно. Как только результат выражения станет истинным, произойдёт выход из цикла, в вычисление выражения выполняется в конце каждой операции цикла.
Задача: найти сумму чётных чисел в интервале от 0 до 100 (экзаменационная задача)
Задача: Написать программу расчёта функций y=x\ii и вывести все значения y меньше некоторого eps. Eps=0.0183 x=1.55
Рекомендации по использованию циклов
-
Чтобы избежать ошибок рекомендуется в теле циклов while и for при выполнении более одного оператора использовать операторные скобки (begin и end).
-
Убедиться, что все переменные встречающиеся в правой части операторов присваивания в теле цикла получили свои начальные значения, а также возможно ли выполнение других операторов.
-
Проверять изменяется ли в теле цикла хотя бы одна переменная входящая в условие продолжения цикла.
-
Предусматривать аварийный выход из итерактивного цикла по достижению некоторого предельно допустимого количества операций.
Модуль CRT…
Uses CRT; - предназначен для обслуживания процессов вывода информации на экран, ввода с клавиатуры, вывода звуковых сигналов, работы с окнами на экране и вывода цветных текстовых строк на экран.
При работе через модуль CRT экран разбивается на отдельные строки, а каждая строка на отдельные позиции (знакоместо,) в каждую из которых можно поместить один символ, в том числе и пробел.
Система координат.
Ось OX вправо, ось OY вниз.
Верхний левый угол имеет координату 1,1 (первая цифра отвечает за X)
Символы отображаемые в знакоместо хранятся в специальной части оперативной памяти – видеопамяти.
Под каждый символ отводится по 2 байта. 1-й байт занимает код символа, другой байт хранит атрибуты цвета, фона, признак мерцания. Можно получить 8 различных цветов фона и 16 цветов символа.
Модуль CRT выполняет:
-
Выполнять вывод в заданное место экрана заданным цветом символа и фона.
-
Открывать на экране окно прямоугольной формы и выполнять вывод в пределах этого окна.
-
Очищать экран, окно, строку и её части.
-
Обрабатывать ввод с клавиатуры.
-
Управлять встроенным динамиком.
Процедуры задания режимов работы.
Text Mode(t)
T = 0, 1, 2…256
Процедура управления цветом
0 |
Black |
1 |
Blue |
2 |
Green |
3 |
Gyan |
4 |
Red |
5 |
Magenta |
6 |
Brown |
7 |
light gray |
8 |
Dark gray |
9 |
Light blue |
10 |
Light green |
11 |
Light gyan |
12 |
Light rad |
13 |
Light magenta |
14 |
Yellow |
15 |
White |
Color+128 – blink (мерцание) |
Процедуры задания цвета
HighVideo - Устанавливает высокую яркость символов, устанавливает цвета 0-7 на 8-15
LowVideo –
NormVideo – устанавливает первоначальную яркость символов.
TextBackGround(color 0-7)
TextColor(color) – задаёт цвет символа.
Процедуры работы с экраном.
ClrEol - Удаляет все символы от курсора включительно, до конца строки, заполняя этот участок текущим цветом фона.
ClrScr – очищает текущее окно, заполняет окно текущим цветом фоно и помещает курсор в его левый угол с координатами 1.1
DelLine – Удаляет строку, в которой находится курсор.
GotaXY (x,y) – перемещает курсор к элементу окна с заданными координатами. Если хотя бы одна из координат недопустима, процедура не выполняется.
InsLine – вставляет пустую строку на экране, в месте расположения курсора и заполняет её текущим цветом фона.
Window(x1,y1,x2,y2) – задаёт размеры окна на экране и помещает курсор в левый верхний угол окна с координатами 1.1 Если одна из координат недопустима, то функция не выполняется.
Функции работы с экраном.
WhereX: Integer - возвращает текущую координату x курсора
WhereY: Integer - возвращает текущую координату Y курсора
Функция работы с клавиатуры.
KeyPressed: booleon – анализирует нажатие клавиши клавиатуры, результат истина если клавиша нажата, ложь в противном случае.
ReadKey: char – считывает символ с клавиатуры, считываемый символ не отображается на экране.
Подача звукового сигнала
Sound(hz:word); - задание звука; Delay (ms;word) – таймер. 1000ms – 1c
No sound – выключение звука.
Символы таблицы ASCII делятся на специальные (0..32)( обычно они не видны для пользователя).
33…127 располагаются все допустимые символы и латинский алфавит.
127…255 содержат русский прописной и строчный алфавит и коды псевдографики.
176..255 коды псевдографики.
Программа:
Массивы
Конечная именованная последовательность однотипных величин называется массивом. Чтобы описать массив надо задать какого типа его элементы и каким образом они пронумерованы. Форматы описания типов:
Tupe имя_типа = ARRAY[тиа индекса] of тип элемента
Tupe имя_типа = ARRAY[нач. индекс, кон.индекс] of тип элемента
Tupe mas = array[1..10] of real;
Обычно при описания массива верхняя граница его индекса(конечный индекс) задаётся в виде именованной константы.
onst n=6; {: не ставится}
Tupe intmas = array [1..n] of integer;
После задания типа массива переменные этого типа описываются обычным образом.
Var a,d: integer;
Var a,b: array[1..6] of integer; ( ТАК ПРОЩЕ)
С массивами в целом можно выполнять только присваивание, при этом массивы должны быть одного типа.
B:=A;
Все остальные действия выполняются с отдельными элементами массива. С ними можно делать всё, что допустимо для переменных того же типа.
Инициализация массива – присваивание каждому элементу массива одного и того же значения соответствующего базовому типу.
For i:=1 to 6 do A[i]:=0;
B[2], A[5] (конкретно к какому то элементу)
Пример: Определить максимальный элемент массива из 20 вещественных.
Пример: Упорядочить по возрастанию элементы массив из 20 элементов
Многомерные массивы.
Если в качестве базового типа взят другой массив, образуется структура, которую принято называть многомерным массивом.
Пример:
Type
Vector=array [1..4] of integer;
Massiv=array [1..4] of Vector;
Var
Matr: Massiv;
Tmer: array [1..6] of Massiv;
ИЛИ
Var: ARRAY [1..4, 1..4] of integer; tmer; array [1..6, 1..4, 1..4];
Для описания массивов можно использовать предварительно определённые константы
Const
G1=4; G2=6
Var
Mas y:array[1..G1, 1..G2] of real;
Элементы массива могут быть любого типа кроме файлового. В памяти двумерный массив располагается по строкам.
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44
Обнулить главную диагональ:
For I:=1 to 4 do A[I,I]:=0;
Массив может участвовать только в операциях отношения ( равно, не равно) и в операциях присваивания.
Var A,B:array[1..20, 1..10] of real;
A = B
A< >B
A:=B;
При вводе строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки ‘enter’ встретиться раньше при выводе под строку отводиться кол-во позиций равной её фактической длине. (происходит выравнивание по левому краю)
К отдельному символу строки можно обращаться как элементу массива символов. (S1[4]) Их можно использовать в выражениях одновременно
S1[4]:=’x’;
Writeln(S2[3]+S2[5]+’R’);
Операция Конкатенации (+)
Ограничение по длине строки
Функции для работы со строками
-
Concat (S1, [S2,…, Sn]:String):String;
-
Length (S:String):Integer; - возвращает текущий размер строки, S – строка у которой определяется размер
-
Pos (P, S:string):Byte - поиск последовательности P в строке S, результат равен номеру 1-му символу строки S с которого начинается искомая последовательность, или нулю, если такой последовательности в строке нет.
-
Copy (s:string;I:Integer;c:integer), - создаёт подстроку подстроки S. S – исходная строка, I - номер первого выделяемого символа строки,(если значение больше длины строки возвращается пустая строка) С – число выделяемых символов(если всех необходимых символов в строке нет возвращается имеющийся остаток строки).
Процедуры для работы со строками
-
Delete (Var S:string; I:integer; С:Integer) - удаляет подстроку из строки S. I – номер 1-го удаляемого символа. С – число удаляемых символов.
-
Insert (P:string; Var S:String; I:integer); - данная процедура помещает подстроку P строку S. S исходная строка. I номер позиции исходной строки начиная с которой помещается подстрока.
-
STR(х, S) – преобразует числовое значение х в строку S. При этом для х может быть задан формат STR(x:6:2, S);
-
Val(S, X, errCode); - преобразует строка s в значение числовой переменной x. В случае успешного преобразование код ошибки равен 0.
Процедуры и функции
Подпрограмма – это именованное логически законченное группа оператора языка, которую можно вызывать для выполнения любое количество раз из различных мест программы.
Для организации подпрограмм используют процедуры и функции:
Процедура – независимая поименованная часть программы, предназначенная для выполнения определённых действий. Процедура состоит из заголовка и тела. После описания процедуру можно вызывать из последующих частей программы. Когда процедура выполнит свою задачу, программа продолжится с оператора следующего непосредственно за оператором вызова процедуры. Использование имени процедуры в программе называние оператором процедуры, или вызовом процедуры. Имя процедуры не может находиться в выражениях в качестве операндума.
Функция – аналогично процедуре, но имеет 2 отличия. 1)Функция передаёт в точку вызова скалярное значение(результат своей работы). 2)Имя функции может входить в выражение как операнд.