- •Язык Турбо-Паскаль. Общие сведения о языке
- •Структура блока описаний
- •Типы данных в языке Паскаль Понятие и классификация типов данных
- •Целочисленные типы
- •Вещественные типы
- •Символьный тип
- •Функции преобразования типов
- •Приоритеты операций
- •Выполняемые операторы языка (для программ линейной структуры)
- •Понятие и классификация
- •Классификация инструкций Паскаля
- •Оператор присваивания
- •Простые управляющие операторы
- •Оператор безусловного перехода.
- •Оператор продолжения цикла.
- •Оператор прекращения (прерывания) цикла.
- •Понятие составного оператора, операторные скобки
- •Операторы ветвлений
- •Оператор условного перехода.
- •Неполный условный оператор.
- •Полный условный оператор.
- •Операторы циклов
- •Оператор арифметического цикла
- •Операторы итеративных циклов
- •Организация цикла с помощью условного перехода
- •Оператор итеративного цикла с предусловием
- •Оператор итеративного цикла с постусловием
- •Глава 7. Составные типы данных
- •Классификация составных типов
- •Массивы Основные определения
- •Сортировки массива
- •Алгоритмы основных методов сортировок
Организация цикла с помощью условного перехода
Цикл можно реализовать либо с помощью условного и безусловного переходов, либо с помощью только условного перехода.
В первом случае, возврат на начало тела цикла выполняется оператором безусловного перехода, а выход из цикла – оператором условного перехода. Логическое выражение в условном операторе представляет собой условие окончания цикла.
В программе при такой организации цикла требуется иметь две метки:
Start:
. . .
if A=Priznak then goto Finish;
. . .
goto Start;
Finish: . . .
Во втором случае проверяют условие продолжения цикла, и по его выполнению возвращаются на начало тела цикла, иначе цикл заканчивается. В этом случае достаточно обычно одной метки:
Start:
. . .
if A<>Priznak then goto Start;
. . .
Тело итеративного цикла при таких способах построения в скобки begin ... end заключать не требуется.
Оператор итеративного цикла с предусловием
Вид оператора:
While <логическое выражение> do
<простой или составной оператор тела цикла>;
Логическое выражение – это условие продолжения цикла (выполнения тела цикла). Само тело цикла это один оператор или группа операторов (в операторных скобках begin .. end). Если в момент входа в заголовок цикла логическое выражение ложно, цикл не выполнится ни разу. На это следует обращать внимание при программировании с завершением цикла по вводу признака конца. Если ввод данных выполняется целиком в цикле, перед его началом значение вводимой в дальнейшем величины следует сделать искусственно неравным признаку конца. Например:
. . .
WriteLn(' Какое число будет обозначать слово «Конец» ?');
ReadLn(Pr);
A:=Pr+1;
While A<>Pr do
begin
WriteLn(' Введите очередное число ');
ReadLn(A);
if A<>Pr then
. . .
end;
. . .
Этому оператору в блок-схеме соответствует структура, изображенная на рисунке
Рисунок 10. Структура оператора цикла
“While”
Оператор итеративного цикла с постусловием
Вид оператора:
Repeat
< операторы тела цикла>;
until <логическое выражение>;
Логическое выражение – это условие окончания цикла.
Тело цикла выполнится не менее одного раза, предварительные фиктивные значения для данных не требуются. Отметим, что тело цикла и при наличии нескольких операторов, в скобки begin .. end заключать не надо, так как Repeat и until сами выполняют роль скобок.
Как и в случаях с циклами For и While, в теле цикла можно использовать операторы continue и break, например, для работы с числами, пропуская отрицательные, можно использовать такой фрагмент программы:
. . .
WriteLn(' Какое число будет обозначать слово «Конец» ?');
ReadLn(Pr);
Repeat
WriteLn(' Введите очередное число ');
ReadLn(A);
if (A<>Pr) and (A<0) then
continue; { возврат на начало тела цикла }
. . .
until A = Pr;
. . .
Этому оператору в блок-схеме соответствует структура, изображенная на рисунке
Рисунок 11. Структура оператора цикла
“ Repeat ”
Глава 7. Составные типы данных
Классификация составных типов
Массивы Основные определения
Массивом называется совокупность однотипных простых данных, имеющих общее имя и расположенных в памяти ЭВМ подряд; обращение к элементам, составляющим массив, осуществляется с помощью индексных выражений. Количество индексов, задающих отдельный элемент массива, определяет размерность массива.
Массивы являются наименее сложными из всех составных типов и, поэтому, реализованы во всех алгоритмических языках.
Впамяти массив представляет собой подряд расположенные ячейки одного типа. Все имеют одно и то же имя, и могут вызываться используя это имя и индекс (порядковый номер для одномерного массива).
Благодаря тому, что индекс может задаваться выражением (в частности – именем переменной), Элементы массива удобно использовать в циклах. При этом обращение к разным элементам массива выглядит одинаково: A[i].
Такая возможность определяет назначение массивов – хранение в памяти данных одного типа, которые следует обрабатывать одинаковыми операциями.
Массивы бывают одномерные и многомерные. Одномерные массивы иногда называют векторами, двумерные - матрицами.
В общем случае массивом может выступать совокупность однотипных составных данных, например массив структур, массив символьных строк и т.д. Такие массивы реализованы не во всех языках (в Turbo Pascal - разрешены).
В линейной памяти ЭВМ одномерные массивы размещаются в порядке возрастания индекса, многомерные "вытягиваются в цепочку элементов" или с наиболее быстрым ростом первого индекса - "по столбцам" (в языке Фортран) или с наиболее быстрым ростом последнего индекса - "по строкам" (Паскаль).
Создание массивов с использованием описателей типов
TYPE
mas1 = array[1..100] of integer; {описатель для целочисленных
одномерных массивов длиной не более 100 элементов}
vector = array [1..30] of real; {описатель для вещественных
одномерных массивов длиной не более 20 элементов}
mas2 = array[1..8, 1..10] of Char; {описатель для символьных
двумерных массивов размерами не более 8 строк и 10 столбцов }
matrix = array[1..12] of vector; {описатель для вещественных
двумерных массивов размерами не более 10 строк и 20 столбцов.}
Последний описатель можно было бы задать без использования описателя типа vector:
matrix = array[1..12, 1..30] of real;
После задания типов, можно описать переменные таких типов:
VAR {здесь выделяется место под все массивы }
Names : mas2;
Numbers, Ages : mas1;
Day_Tempr,Day_Wind : vector;
Tempr1996 : matrix;
Создание массивов без использования специальных описателей типов
VAR Ball_Groop_1,B_M170 : array[1..30] of real; {выделение места под два одномерных вещественных массива }
B_M175 : array[1..30] of real;
Ball_Kurs : array[1:12, 1..30] of real; {выделение места под двумерный вещественный массив }