Оператор цикла с постусловием



Синтаксис оператора:

REPEAT

          оператор 1;

          оператор 2;

           ………….

          оператор N

UNTIL условие;

 

где REPEAT (повторять), UNTIL (до тех пор, пока) – служебные слова;

   операторы – любые операторы языка Паскаль;

   условие – логическое выражение.

Служебные слова REPEAT и UNTIL по действию похожи на операторные скобки BEGIN и END: между ними можно помещать группу операторов, отделяя их друг от друга точкой с запятой. Точка с запятой не ставится перед словом UNTIL.

Операторы в цикле REPEAT будут выполняться до тех пор, пока условие ложно, т.е. проверка условия производится после очередного выполнения цикла, что обеспечивает его выполнение хотя бы один раз.

 

Пример:

Найти сумму S=1+ + +…+ +… Вычисления закончить, как только очередное слагаемое станет меньше e.

 

 

PROGRAM PRIMER4;

  USES CRT;

  LABEL

1;

VAR

   S,EPS:REAL;

   N:INTEGER;    

   OTV:CHAR;

BEGIN

                   1:CLRSCR;

WRITELN (‘Введите точность вычислений’);

READLN (EPS);

S:=1;

N:=2;

REPEAT

        S:=S+(1/N);

        N:=N+1

UNTIL (1/N)<EPS;

WRITELN (‘Сумма =’, S:5:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

  THEN GOTO 1

END.

Оператор цикла с предусловием

Синтаксис оператора:

        WHILE условие

             DO оператор;

 

где WHILE (пока), DO (выполнить) – служебные слова;

  оператор – любой оператор языка Паскаль;

  условие – логическое выражение.

Оператор в цикле WHILE выполняется до тех пор, пока условие истинно. Если условие ложно, то выполняется оператор, следующий за WHILE. Если условие ложно с самого начала, то оператор не выполняется ни разу. Условие вычисляется и анализируется перед каждым выполнением цикла. Тело цикла может состоять из нескольких операторов. В этом случае необходимо использовать операторные скобки BEGIN и END.

 

Оператор цикла с параметром

Синтаксис оператора :

     FOR V:=E1 TO [DOWNTO] E2 DO

          оператор;

 

где FOR (для), TO (до), DOWNTO (вниз до), DO (выполнить) – служебные слова;

   V – параметр цикла;

           Е1, Е2 – граничные выражения, определяющие границу изменения параметра цикла (начальное и конечное значения параметра цикла).

Оператор цикла с параметром используется в том случае, если заранее известно число повторений цикла. Тип параметра цикла V и граничных выражений Е1 и Е2 должен совпадать, может быть любым, кроме вещественного. Тело цикла может состоять из нескольких операторов, в этом случае необходимо использовать операторные скобки BEGIN и END. После выхода из цикла значение параметра цикла становится неопределенным.

 

Оператор цикла выполняется следующим образом:

1. Вычисляются значения выражений Е1 и Е2 (один раз перед входом в цикл).

2. Параметру цикла V присваивается значение выражения Е1.

3. Значение параметра цикла сравнивается со значением выражения Е2. Если параметр цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла заканчивается – при использовании TO. При использовании DOWNTO тело цикла выполняется в том случае, если параметр цикла больше или равен значению Е2.

4. Параметр цикла принимает следующее значение, полученное с помощью функции SUCC (в случае TO) или PRED (в случае DOWNTO). Происходит возврат к пункту 3.

Пример:

Вычислить переменную A:

 

A=

 

PROGRAM PRIMER5;

USES CRT;

VAR

S,P,I,N,A:INTEGER;

BEGIN

                            CLRSCR;

S:=0;

FOR I:=1 TO 20 DO

S:=S+SQR(I);

P:=1;

FOR N:=10 DOWNTO 1 DO

P:=P*SQR(N)*N;

A:=S+P;

WRITELN (‘Сумма=’,A:7);

END.

 

 

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

 

Структурированный тип данных - это множество значений или переменных с одним общим именем.

Переменная, состоящая из нескольких компонентов, называется структурированной переменной.

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

1. Регулярный тип (массивы).

2. Комбинированный тип (записи).

3. Множественный тип (множества).

4. Файловый тип (файлы).

 

МАССИВЫ (РЕГУЛЯРНЫЙ ТИП)

Для массивов в языке Паскаль характерно следующее:

1. Число элементов массива определяется при его описании и в дальнейшем не изменяется.

2. Каждый элемент массива может быть явно обозначен и к нему имеется прямой доступ.

Синтаксис описания одномерного массива:

TYPE

имя типа=ARRAY [тип индекса] OF тип элементов;

VAR

имя массива:имя типа;

Тип индекса может быть любым стандартным типом, кроме REAL.

Пример:  Описать вещественный массив А(10).

TYPE

VECTOR=ARRAY [1..10] OF REAL;

VAR

 A:VECTOR;

 

Можно обойтись без определения типа массива. Тогда описание массива имеет вид:

VAR

имя массива: ARRAY [тип индекса] OF тип элементов;

 

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

CONST

N=10;

VAR

A: ARRAY [1..N] OF REAL;

 

Синтаксис описания двумерного массива:

TYPE

имя типа=ARRAY [тип инд.1] OF ARRAY [тип инд.2] OF тип элементов;

VAR

имя массива:имя типа;

Пример: Описать целочисленную матрицу B(20, 10).

TYPE

MATRICA=ARRAY [1..20] OF ARRAY [1..10] OF INTEGER;

VAR

B:MATRICA;

 

Описание можно сократить, указывая только имя массива и диапазон изменения индексов для каждой размерности массива.

Например:               VAR

B:ARRAY [1..20, 1..10] OF INTEGER;

 

Обращение к элементам массива производится при помощи указания имени массива, за которым в квадратных скобках следуют номера индекса.

Например:               a5 ® A[5]

                       b15,8 ® B[15, 8]

 

Пример:

Дан вектор Х(N). Найти количество нулевых элементов, сумму положительных и произведение отрицательных элементов.

PROGRAM PRIMER6; 

USES CRT;

LABEL

1;

VAR

X:ARRAY [1..50] OF REAL;

S, P:REAL;

K,N,I:INTEGER;

OTV:CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите размерность вектора’);

READLN (N);

(*ввод вектора*)

WRITELN (‘Введите вектор X’);

FOR I:=1 TO N DO

BEGIN

WRITE (‘X [‘,I:2,‘]=>’);

READLN (X[I])

END;

(*вывод вектора*)

WRITELN (‘Вектор X’);

FOR I:=1 TO N DO

WRITE (X[I]:5:2,‘ _ ’);

WRITELN;

K:=0;

S:=0;

P:=1;

FOR I:=1 TO N DO

IF X[I]=0

THEN K:=K+1

ELSE IF X[I]<0

THEN S:=S+X[I]

ELSE P:=P*X[I];

WRITELN (‘Количество элементов вектора, равных нулю =’,K:2);

WRITELN (‘Сумма отрицательных элементов вектора =’,S:5:2);

WRITELN (‘Произведение положительных элементов =’,P:5:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

Пример:

Найти максимальный элемент матрицы В(N,M) и номер строки и столбца, на пересечении которых он находится.

PROGRAM PRIMER7;

USES CRT;

LABEL

1;

VAR

B:ARRAY [1..50, 1..50] OF REAL;

MAX:REAL;

NST,NSTR,N,M,I,J:INTEGER;

OTV:CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите количество строк матрицы’);

READLN (N);

WRITELN (‘Введите количество столбцов матрицы’);

READLN (M);

(*ввод матрицы*)

WRITELN (‘Введите матрицу В’);

FOR I:=1 TO N DO

FOR J:=1 TO M DO

BEGIN

WRITE (‘B[‘,I:2,‘,’,J:2,’]=>’);

READLN (B[I,J])

END;

(*вывод матрицы*)

WRITELN (‘Исходная матрица В’);

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO M DO

WRITE (B[I,J]:5:2,‘ _ ’);

WRITELN

END;

MAX:=B[1,1];

NSTR:=1;

NST:=1;

FOR I:=1 TO N DO

FOR J:=1 TO M DO

IF MAX<=B[I,J]

THEN BEGIN

MAX:=B[I,J];

NSTR:=I;

NST:=J

 END;

WRITELN (‘Максимальный элемент матрицы=’,MAX:5:2);

WRITELN (‘Номер строки=’,NSTR:2);

WRITELN (‘Номер столбца=’,NST:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

 

УПАКОВАННЫЕ МАССИВЫ

 

Элементы массива запоминаются в последовательно расположенных ячейках памяти. Такой способ расположения эффективен для запоминания целых и вещественных чисел. При работе с другими типами элементов такой способ недостаточно экономен.

Для экономии памяти в языке Паскаль существуют средства, позволяющие более компактно расположить данные в памяти. Это делается с помощью упаковки данных. Например, массивы символьной информации упаковываются по два символа в одну ячейку. Компилятор делает это, если при описании массива указать ключевое слово PACKED перед ключевым словом ARRAY.

Синтаксис описания упакованного массива:

TYPE

имя типа= PACKED ARRAY [тип индекса] OF тип элементов;

VAR

      имя массива: имя типа;

       

 

СТРОКОВЫЙ ТИП ДАННЫХ (STRING)

Строковый тип обобщает понятие символьных массивов, позволяя изменять длину строки. Данный тип определяет множество символьных цепочек произвольной длины (от нуля символов до заданного их числа).

Для определения строкового типа используется служебное слово STRING, вслед за которым в квадратных скобках указывается максимальная длина строки. Максимальная длина строки может быть задана целым числом или константой целого типа. Это число находится в пределах от 1 до 255. Указание максимальной длины строки может быть опущено, в этом случае подразумевается число 255.

Т.о. важнейшее отличие строк от обычных символьных массивов заключается в том, что строки могут динамически изменять свою длину.

Синтаксис описания строковых констант:

CONST

идентификатор=‘значение’;

Например:               CONST

 STR1=‘ABCD’;

 STR2=‘123’;

Синтаксис описания строковых переменных:

VAR

идентификатор:STRING [длина строки];

Например:           VAR

S1:STRING [80];

S2:STRING;

 

Строковые переменные занимают в памяти ПК на 1 байт больше, чем указанная в описании длина. Число введенных символов строки может динамически меняться до заданного максимального значения. К отдельным символам строки можно обращаться с помощью индексов, которые записываются в квадратных скобках. Нулевой индекс содержит текущую длину строки.

Символьные константы и переменные можно использовать в выражениях. Строковые выражения строятся из строковых констант, переменных типа STRING и CHAR, функций и знаков операций.

Над строковыми переменными выполняются следующие операции: присваивание, сцепление (сложение), отношение.

1. Операция присваивания имеет вид:

   имя строковой переменной:= строковое выражение;

В операциях присваивания можно использовать переменные типа CHAR.

Если длина строки выражения превышает максимально допустимую длину строки, то лишние символы отбрасываются.

2. Операция сцепления (сложения, +) объединяет несколько символьных строк в одну строку.

3. Операции отношения (сравнения) применяются для сравнения двух строк и имеют более низкий приоритет, чем операция сцепления.

При выполнении операций отношения действуют следующие правила:

- если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка всегда меньше более длинной строки;

- если длины сравниваемых строк равны, то происходит поэлементное сравнение символов до первого несовпадающего символа и, та строка считается большей, в которой первый несовпадающий символ имеет наибольший код;

- строки считаются равными, если они совпадают по текущей, а не по объявленной длине, и содержат одни и те же символы.

Результат выполнения операций отношения всегда имеет логический тип.


Дата добавления: 2021-07-19; просмотров: 184; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!