Читайте также:
|
|
Селектор интервального типа:
case I of 1..10: writeln('число ', I:4, ' в диапазоне 1 - 10'); 11..20: writeln('число ', I:4, ' в диапазоне 11 - 20'); 21..30: writeln('число ', I:4, ' в диапазоне 21 - 30')else writeln('число ', I:4, ' вне пределов контроля')end;Селектор целочисленного типа:
case I of 1: Z:= I + 10; 2: Z:= I + 100; 3: Z:= I + 1000end;
38.
Операторы цикла в Pascal
В языке Turbo Pascal имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы.
Счетный оператор цикла или оператор цикла с параметром
Оператор цикла с параметром используется в программе в случае, когда заранее известно количество повторений в цикле.
Этот оператор имеет следующую структуру:
For <пар_цик>: = <нач_знач> to <кон_знач> do <оператор>;
Здесь: For, to, do - зарезервированные слова;
<пар_цик> - параметр цикла - переменная типа Integer (точнее любого порядкового типа);
<нач_знач> - начальное значение - выражение того же типа;
<кон_знач> - конечное значение - выражение того же типа;
<оператор> - произвольный оператор Turbo Pascal.
При выполнении оператора For вначале вычисляется начальное значение и осуществляется его присваивание параметру цикла. Затем производится проверка условия <пар_цик> <= <кон_знач>, если условие имеет значение ИСТИНА, то выполняется оператор следующий за словом do, в противном случае оператор For прекращает свою работу.
Отметим два обстоятельства. Во-первых, условие, управляющее работой оператора For, проверяется перед выполнением оператора <оператор>: если условие не выполняется в самом начале работы циклического оператора, исполняемый оператор не будет выполнен ни разу. Другое обстоятельство - шаг наращивания параметр строго постоянен и равен +1. Существует другая форма оператора:
For <пар_цик>: = <нач_знач> downto <кон_знач> do <оператор>;
Замена зарезервированного слова to на downto означает, что шаг наращивания параметра цикла равен -1.
В случае использования в цикле не одного, а нескольких операторов, то принято заключать эти группы операторов в логические скобки begin и end.
Пример 1.
Дана последовательность целых чисел, состоящая из 25 элементов. Вычислить сумму элементов последовательности.
.... ![]() | Program primer1; Var i, a, s: integer; Begin x:= 0; For i:= 1 to 25 do begin Read (a); x:= x + a; end; Write ('Сумма элементов равна ', x); End. |
Пример 2.
Решим задание из примера 1 используя конструкцию оператора For, в которой шаг наращивания будет равен -1.
.... ![]() | Program primer2; Var i, a, s: integer; Begin x:= 0; For i:= 25 downto 1 do begin Read (a); x:= x + a; end; Write ('Сумма элементов равна ', x); End. |
39. Оператор цикла с предусловием (начинающийся с ключевого сло- ва while) содержит в себе выражение, которое управляет повторным выполнением оператора (который может быть составным оператором). ┌─────┐ ┌─────────┐ ┌──┐ ┌────────┐ оператор ───>│while├──>│выражение├──>│do├──>│оператор├──> while └─────┘ └─────────┘ └──┘ └────────┘ Выражение, с помощью которого осуществляется управление пов- торением оператора, должно иметь булевский тип. Вычисление его производится до того, как внутренний оператор будет выполнен. Внутренний оператор выполнятся повторно до тех пор, пока выраже- ние принимает значение Тruе. Если выражение с самого начала при- нимает значение False, то оператор, содержащийся внутри оператора цикла с предусловием, не выполняется. Примерами операторов цикла с предусловием могут служить сле- дующие операторы: while Data[I] <> X do I:= I + 1; While I > 0 do begin if Odd(I) then Z:= Z * X; I:= I div 2; X:= Sqr(X); end; while not Eof(InFile) do begin Readln(InFile,Line); 40. В операторе цикла с постусловием (начинающимся со слова
repeat) выражение, которое управляет повторным выполнением после-
довательности операторов содержится внутри оператора repeat.
┌──────┐ ┌────────┐ ┌─────┐ ┌─────────┐
оператор ─>│repeat├────>│оператор├──┬─>│until├──>│выражение├──>
repeat └──────┘ ^ └────────┘ │ └─────┘ └─────────┘
│ ┌───┐ │
└────┤; │<────┘
└───┘
Результат выражения должен быть булевского типа. Операторы,
заключенные между ключевыми словами repeat и until, выполняются
последовательно до тех пор, пока результат выражения не примет
значение True. Последовательность операторов выполнится по край-
ней мере один раз, поскольку вычисление выражения производится
после каждого выполнения последовательности операторов.
Приведем примеры оператора цикла с постусловием:
repeat
K:= I mod J;
I:= J;
J:= K;
until J = 0;
repeat
Write('Введите значение (0..9):');
Readln(I);
until (I >= 0) and (I <= 9);
v 41. Одномерный массив.Он имеет индивидуальное имя, а для обозначения отдельной компоненты к имени массива добавляется индекс, который и выделяет нужную компоненту
v Компоненты массива называются переменными с индексами
v Наименьший индекс называется нижней границей, наибольший индекс – верхней границей, а число элементов – размером массива
v Количество индексов называют размерностью массива
Описываем массив в блоке описаний:
VAR <имя_массива>: array [n..k] of <тип_элементов>;
Типизированное описание массива:
TYPE <имя_типа>= array [n..k] of <тип_элементов>;
VAR <имя_массива>: <имя_типа>;
Примеры:
• Var a: array[ 1..3 ] of integer; a [ 1 ]
Var b: array [‘a’..’c’ ] of integer; b[‘a’ ]
Var c: array[red,green,blue] of integer; c [red]
• Var d: array[byte] of real;
• Однако, размер массива в байтах не может превышать 65520!
42. Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим матрицу А размерностью 2*3, то есть в ней будет две строки, а в каждой строке по три элемента:
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел - номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 - это элемент, стоящий в первой строке и во втором столбце.
Существуют несколько способов объявления двумерного массива.
Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведённой выше:
Const n = 2; m = 3;
Type omyarray = Array[1..m] Of <тип элементов >;
dmyarray = Array[1..n] Of omyarray;
Var v: omyarray;
a: dmyarray;
В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.
Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:
Const n = 2; m = 3;
Type dmyarray = Array[1..n, 1..m] Of <тип элементов>;
Var a: dmyarray.
Способ 3. Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:
Const n = 2; m = 3;
Type dmyarray = Array[1..n, 1..m] Of <тип элементов >;
Var a: dmyarray.
Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:
Var a: Array [1..n, 1..m] Of < тип элементов >.
Рассмотренные выше методы решения задач обработки одномерных массивов могут применяться для обработки двумерных массивов. Поскольку положение элемента в двумерном массиве описывается двумя индексами [первый - номер строки, второй - номер столбца], программы большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл работает по строкам матрицы, то есть с его помощью выбирается требуемая строка матрицы, а внутренний цикл - по столбцам матрицы, то есть здесь выбирается нужный элемент из выбранной уже строки. Для задания значений элементам массива могут быть использованы операторы присваивания и операторы ввода данных.
Дата добавления: 2015-01-30; просмотров: 148 | Поможем написать вашу работу | Нарушение авторских прав |