Основные типы данных. Ввод-вывод 


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



ЗНАЕТЕ ЛИ ВЫ?

Основные типы данных. Ввод-вывод



 

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

Операции языка Pascal и их приоритеты

На этом рисунке приведены группы операций в порядке убывания их приоритетов. Внутри группы приоритет операций одинаков.

Объявление переменных

 

var

<имя переменной>:<имя типа1>;

<имя1>[,<имя2>,…]:<тип2>;

 

var

a,b:integer;

ch:char;

Типы данных

Турбо Паскаль характеризуется разветвленной структурой типов данных.

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

 

 

Простые типы

К простым типам относятся порядковые и вещественные типы.

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

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

Порядковые типы

К порядковым типам относятся целые, логические, символьный, перечисляемый и тип-диапазон. К любому из них применима функция ORD(X), которая возвращает порядковый номер значения выражения Х. Для целых типов функция ORD(X) возвращает само значение Х, т.е. ORD(X)=X для Х, принадлежащего любому целому типу. Применение ORD(X) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1(логический тип), от 0 до 255(символьный), от 0 до 65535(перечисляемый). Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ORD(X) зависит от свойств этого типа.

К порядковым типам можно также применять функции:

PRED (X) – возвращает предыдущее значение порядкового типа(значение которое соответствует порядковому номеру ORD (X)-1 то есть

ORD(PRED(X))=ORD(X)-1

SUCC (X) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ORD (X)+1 т.е.

ОRD(SUCC(X)=ORD(X)+1.

Например, если в программе определена переменная

 

Var

C: Char;

.........

с:=’5’;

 

то функция PRED(C) вернет значение ‘4’, а функция SUCC(C) значение ‘6’.

Если представить себе любой порядковый тип как упорядоченное множество значений, возрастающих слева направо и занимающих на числовой оси некоторый отрезок, то функция PRED(C) не определена для левого, а SUCC(X) для правого конца отрезка.

Целые типы.

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

 

Таблица 5.

Длина, байт Название типа Диапазон значений
  Byte 0..255
  Shorting -128.127
  Word 0...65535
  Integer -32768...32767
  longint -2147483648... 2147483647

 

При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью типов», т.е. везде, где может использоваться WORD, допускается использование BYTE (но не наоборот), в LONGINT «входит» INTEGER, который, в свою очередь включает в себя SHORTINT.

Перечень процедур и функций, применимых к целочисленным типам приведен в таблице 2. Буквами b, s, w, i, l обозначены выражения соответственно типа BYTE, SHORTINT, WORD, INTEGER, LONGINT, x – выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках – необязательный параметр.

 

Таблица 6.

Обращение Тип результата Действие
Abs (x) X Возвращает модуль х
Chr (b) Char Возвращает символ по его коду
Dec(vx[,i]) Процедура Уменьшает значение vx на i, при отсутствии i -на 1
Inc(vx,[i]) Процедура Увеличивает значение vx на i, при отсутствии i -на 1
Hi(i) Byte Возвращает старший байт аргумента
Hi(w) Byte То же
Lo (i) Byte Возвращает младший байт аргумента
Lo(w) Byte То же
Odd(l) Boolean Возвращает TRUE, если аргумент нечетное число, False – если четное
Random(w) Как у параметра Возвращает псевдослучайное число, равномерно распределенное на интервале 0 <= х <w
Sqr(X) То же Возвращает квадрат аргумента
Swap(i) Integer Меняет местами байты в слове
Swap(w) Word То же

 

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

 

Var

A: integer;

X, y: real;

Begin

A:=32767;

X:= a+2;

Y:=longint (a)+2;

Writeln (x:10:0,y:10:0);

End.

 

В результате прогона получим

-32677 32769

Логический тип

Значениями логического типа может быть одна из предварительно объявленных констант FALSE(ложь) или TRUE (истина). Для них справедливы правила:

Ord (false) = 0;

Ord (true)=1;

False<True;

Succ (False)=True;

Pred (true)=False;

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

...............

Var

i: Boolean;

....

for i:=false to true do...

 

Логические операции

Таблица 7.

A Not A
False True
True False

Таблица 8.

A B A and B
False False False
False True False
True False False
True True True

Таблица 9.

A B A or B
False False False
False True True
True False True
True True True

Таблица 10.

A B A xor B
False False False
False True True
True False True
True True False

 

Пример

 

if I mod 7 = 0 then

if I mod 13 = 0 then

writeln(I);

 

if (I mod 7 = 0) and (I mod 13 = 0) then

writeln(I);

 

 

Символьный тип

Значением символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0..255. Это число служит кодом внутреннего представления символа, его возвращает функция ORD.

Для кодировки используется код ASCII. Это 7-битный код, т.е. с его помощью можно закодировать лишь 128 символов в диапазоне от 0 до 127. В то же время в 8-битном байте, отведенном для хранения символов в Турбо Паскале, можно закодировать в два раза больше символов в диапазоне 0..255. Первая половина символов ПК с кодами 0..127 соответствует стандарту ASCII. Вторая половина с кодами 128-255 не ограничена жесткими рамками стандарта и может меняться на ПК разных типов.

Символы с кодами 0…31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами. При использовании их в операциях ввода - вывода они могут иметь следующее самостоятельное значение:

Таблица 11.

Символ Код Значение
Bel   Звонок: вывод на экран этого символа сопровождается звуковым сигналом
Ht   Горизонтальная табуляция: при выводе на экран смещает курсор в позицию кратную 8, плюс 1
Lf   Перевод строки: при выводе на экран все последующие символы будут выводиться, начиная с той же позиции, но на следующей строке.
VT   Вертикальная табуляция: при выводе на экран заменяется спец.символом
FF   Прогон страницы: при выводе на принтер формирует страницу, при выводе на экран заменяется спец. символом
Cr   Возврат каретки: водится нажатием на клавишу enter (при вводе с помощью read или readln означает команду “ввод” и в буфер ввода не помещается; при выводе означает команду “продолжить вывод с начала текущей строки”)
Sub   Конец файла: вводится с клавиатуры нажатием ctrl+Z; при выводе заменяется спец. знаком
Esc   Конец работы: вводится с клавиатуры нажатием на клавишу esc; при выводе заменяется спец.символом

 

К типу CHAR применимы операции отношения, а также встроенные функции:

CHR (B) – функция типа CHAR преобразует выражение В типа BYTE в символ и возвращает его своим значением;

UPCASE (CH) – функция типа CHAR; возвращает символ в верхнем регистре, если он определен для аргумента CH типа CHAR, в противном случае возвращает сам символ Ch:

 

Var c1,c2:char;

Begin

C1:=upcase (‘s’);

C2:=upcase (‘ ф ’);

Writeln (c1,’ ‘, c2);

End.

 

В результате прогона программы на экран будет выдано

S ф

Так как функция UPCASE не обрабатывает кириллицу.

 

Раздел описания типов

Раздел описания типов начинается ключевым словом Type и содержит описания новых типов данных, созданных программистом:

 

Type

<Имя типа1>=<Описание1>;

<Имя типа2>=<Описание2>;

...

 

Перечисляемый тип

Задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленным круглыми скобками:

 

Type

Colors = (red, white, blue);

 

Применение перечисляемых типов делает программы нагляднее.

Если, например, в программе используются данные, связанные с месяцами года то:

 

Type

Тип месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);

Var

Месяц:ТипМесяц;

..........

If месяц= авг then writeln(‘Море!!!’);

 

Этот фрагмент программы был бы очень наглядным. Увы! В Паскале нельзя использовать кириллицу в идентификаторах, поэтому мы вынуждены писать так:

 

tуре

TypeMonth=(jan, feb, mar, may, apr, jun, jul, aug, sep, oct, nov, dec);

Var

Month:TypeMonth;

..........

If Month = aug then writeln(‘Хорошо бы поехать к морю!’);

 

Соответствия между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает значение 0, второе – 1 и т.д. Максимальная мощность перечисляемого типа составляет 65535 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа WORD и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0,1 и т.д.

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

 

Type

Colors =(black, red, white);

Ordenal = (one, two, three);

Days = (monday, tuesday, wednesday);

 

С точки зрения мощности и внутреннего представления все три типа эквивалентны:

Ord (black)=0,…, ord (white)=2,

Ord (one)=0,..., ord (three)=2,

Ord (monday)=0,..., ord (wednesday)=2,

Однако если определены переменные

 

Var

col: colors;

Num:ordenal;

Day:days;

 

То допустимы операторы

 

Col:=black;

Num:=succ (two);

Day:=pred (tuesday);

 

но недопустимы

 

Col:=one;

Day:=black;

 

и т.д.

Как уже упоминалось, между значениями перечисляемого типа и множеством целых чисел существует однозначное соответствие, задаваемое функцией ord(x). В Турбо Паскале допускается и обратное преобразование: любое выражение типа WORD можно преобразовать в значения перечисляемого типа, если только значение целочисленного выражения не превышает мощности перечисляемого типа.

Например, для рассмотренного выше объявления типов эквивалентны следующие присваивания:

 

Col:=one;

Col:=colors (0);

 

Разумеется присваивание

 

Col:=0;

 

Будет недопустимым.

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

 

Var col: (black, white);

 

Тип диапазон

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

Тип-диапазон задается границами своих значений внутри базового типа:

<мин. знач.>..<макс. знач.>

Например:

 

Type

Digit = ‘0’.. '9';

Dig2 = 48..57;

 

Тип диапазон не обязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной:

 

Var

Date: 1..31;

Month: 1.. 12;

Lchr:’A’..’Z’;

 

При объявлении типа диапазона нужно руководствоваться следующими правилами:

1. Два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;

2. Левая граница диапазона не может превышать правую границу.

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

 

Type

Days = (mo, tu, we, th, fr, sut, sa);

Weekend = sa.. su;

Var

w: Weekend;

...................

W:=sa;

 

то ord(w) вернет значение 5, в то время как PRED(W) приведет к ошибке.

Вещественные типы

В отличие от порядковых типов, значения которых всегда сопоставляется с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.

Таблица 12.

Длина, байты Название типа Мантисса Диапазон десятичного порядка
  Single 7...8 -45...+38
  Real 11...12 -39...+38
  Double 15...16 -324...+308
  Extended 19...20 -4951...+4932
  Comp 19...20 -2^63+1... +2^63-1

 

Как видно из таблицы вещественное число в Паскале занимает от 4-х до 10 смежных байт и имеет следующую структуру в памяти ПК.

 

S E M

 

Здесь s-знаковый разряд числа; е – экспоненциальная часть, содержит двоичный порядок.m- мантисса числа.

Мантисса имеет длину от 23 до 63 двоичных разрядов, что и обеспечивает точность 7..8 для single и 19..20 для extended десятичных цифр.

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

Паскаль характеризуется богатой гаммой вещественных типов, однако доступ к типам single, double, extended возможен только при особых режимах компиляции. Дело в том, что эти типы рассчитаны на аппаратную поддержку арифметики с плавающей точкой и для их эффективного использования в состав ПК должен входить арифметический сопроцессор 8087, 80287 или их отечественный аналог К1810ВМ87.

Компилятор позволяет создавать программы, работающие на любых ПК и использующие любые вещественные типы. В процессе запуска Турбо Паскаль проверяет состав аппаратных средств и выявляет наличие или отсутствие сопроцессора.

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

Например:

 

{$N+, E+}

Type

RealType= real;

Var

Epsilon:= realtype;

Begin

Epsilon:=1;

while 1+epsilon/2>1 do

Epsilon:=epsilon/2;

Writeln (epsilon);

End.

 

Независимо от объявления типа REALTYPE на печать будет выдан рез-т: 1.08420217248550Е-0019,что соответствует типу extended.

Чтобы получить правильный результат программу необходимо изменить следующим образом:

 

{$N+, E+}

Type

Realtype = real;

Var

epsilon, eps1: realtype;

Begin

Epsilon:=1;

Repeat

Epsilon:=epsilon/2;

Eps1:=epsilon+1;

Until eps1>1;

Writeln (2*epsilon)

End.

 

Следует учесть, что тип REAL оптимизирован для работы без сопроцессора. Если ваш ПК оснащен сопроцессором, использование типа REAL приведет к дополнительным затратам времени на преобразование REAL к EXTENDED. Поэтому никогда не используйте REAL на ПК с сопроцессором, т.к. дополнительные затраты времени на преобразование типов могут свести на нет все преимущества сопроцессора. При разработке программ, критичных ко времени счета, следует заменять его типами SINGLE или DOUBLE: по сравнению с типом REAL скорость вычислений на машинах с сопроцессором в этом случае увеличивается в 2-3 раза. Если в ПК нет арифметического сопроцессора, скорость обработки данных всех вещественных типов приблизительно одинакова.

Особое положение в Паскале занимает тип COMP, который трактуется как вещественное число без экспоненциальной и дробной части. COMP- это "большое" целое число со знаком, сохраняющее 19.. 20 значащих десятичных цифр. В то же время в выражениях COMP полностью совместим с любыми другими вещественными типами: над ними определены все вещественные операции, он может использоваться как аргумент математических функций и т.д. Наиболее подходящей областью применения типа COMP являются бухгалтерские расчеты: денежные суммы выражаются в копейках и действия над ними сводятся к операциям с достаточно длинными целыми числами.

Для работы с вещественными данными могут использоваться встроенные математические функции, представленные в таблице 3. В этой таблице REAL означает любой вещественный тип, INTEGER - любой целый тип.

Таблица 13.

Обращение Тип параметра Тип результата Примечание
Abs(x) Real, integer Тип аргумента Модуль аргумента
ArcTan(x) Real Real Арктангенс (радианы)
Cos (x) Косинус (радианы)
Exp (x) Экспонента
Frac (x) Дробная часть числа
Int (x) Целая часть числа
Ln (x) Логарифм натуральный
Pi - Real П = 3.141592653...
Random - Real Равномерное псевдослучайное число 0<=x<1
Random(i) Integer Integer Равномерное псевдослучайное целое число 0<=i<1
Randomize - - Инициация датчика случайных чисел
Sin(x) Real Real Синус (радианы)
Sqr(x) Real, integer Тип аргумента Квадрат аргумента
Sqrt (x) real Real Корень квадратный

 

 

Операторы языка Паскаль

Составной оператор

Составной оператор – это последовательность произвольных операторов программы, заключенная в операторные скобки – зарезервированные слова begin…end. Составные операторы – важный инструмент Турбо Паскаля, дающий возможность писать программы по современной технологии структурного программирования (без операторов перехода goto).

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

 

Begin

.......

Begin

.......

Begin

.......

End;

.......

End;

.......

End;

 

Фактически, весь раздел операторов, обрамленный словами begin…end, представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставить перед ним символ «;» необязательно. Однако, в процессе работы над программой перед словом end могут появиться новые операторы. В этом случае часто возникает ошибка из-за отсутствия символа «;» после предпоследнего оператора (программист добавляет новый оператор, после которого символ «;» не нужен, а поставить его там где он теперь необходим забывает). С этой точки зрения символ «;» лучше ставить и перед словом end. Это будет означать, что между последним оператором и операторной скобкой end располагается пустой оператор. Пустой оператор не содержит ни каких действий, просто в программу добавляется лишняя точка с запятой.

Условный оператор

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор – это средство ветвления вычислительного процесса.

Структура условного оператора имеет следующий вид:

 

if <условие> then <оператор1> else <оператор2>;

 

где if, then, else – зарезервированные слова (если, то, иначе);

<условие> – произвольное выражение логического типа;

<оператор1>, <оператор2>, – любые операторы языка Турбо Паскаль.

Условный оператор работает по следующему алгоритму. Сначала вычисляется условное выражение <условие>. Если результат есть true (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть false (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>. Например:

 

var

x, y, max: real;

.......

if x>max then y:=max

else y:=x;

 

При выполнении этого фрагмента переменная y получит значение переменной x, если только это значение не превышает max, в противном случае y станет равным max.

Часть else <оператор2> условного оператора может быть опущена. Тогда при значении true условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается:

 

var

x, y, max: real;

.......

if x>max then max:=x;

y:=x;

 

В этом примере переменная y всегда будет иметь значение переменной x, а в max запоминается значение x если оно больше значения max.

Поскольку любой из операторов <оператор1> и <оператор2> может быть любого типа, в том числе и условным, а в то же время не каждый из «вложенных» условных операторов может иметь часть else <оператор2>, то возникает неоднозначность трактовки условий, т.е. непонятно какой else к какому if…then относится. Эта неоднозначность в Турбо Паскале решается следующим образом: любая встретившаяся часть else соответствует ближайшей к ней «сверху» части if…then условного оператора. Например:

 

var

a, b, c, d: integer;

 

a:=1;

b:=2;

c:=3;

d:=4;

if a>b then

if c<d then

if c<0 then c:=0

else a:=b; {a=1}

 

if a>b then

if c<d then

if c<0 then c:=0

else

else

else a:=b; {a=2}

 

Обратите внимание на то, что перед else точка с запятой не ставится. Символ «;» в Паскале означает конец оператора, а оператор if заканчивается там где заканчивается <оператор2> (если есть часть else).

В случае, когда необходимо выполнить несколько операторов, а не один (<оператор1> или <оператор2>) их необходимо заключить в операторные скобки begin … end, получив, тем самым, составной оператор.

Рассмотрим программу, которая вводит произвольное целое число в диапазоне 0..15, преобразует его к шестнадцатеричному основанию и выводит на экран полученное.

 

var

n: integer; {Вводимое число}

ch: char; {Результат}

begin

write(‘n= ‘); {Вывести приглашение (подсказку)}

readln(n); {Ввести число}

{Проверить число на принадлежность диапазону 0..15}

if (n>=0) and (n<=15) then

begin {Да, принадлежит}

if n<10 then ch:=chr(ord(‘0’)+n)

else ch:=chr(ord(‘A’)+n-10);

writeln(‘n=’, ch);

end

else writeln(‘Ошибка’);

end.

 

В шестнадцатеричной системе счисления используются 16 цифр в каждом разряде: цифры 0..9 обозначают первые 10 возможных значений разряда, буквы A..F – остальные шесть.

В программе учитывается непрерывность и упорядоченность множества цифр 0..9 и множества букв A..F.

Оператор выбора Case

Если у вас не два возможных варианта выполнения программы, а больше, то может использоваться оператор выбора CASE. Структура этого оператора в Турбо Паскале:

 

CASE <ключ_выбора> OF

C1: <оператор1>;

C2: <оператор2>;

...

CN: <операторN>;

[ELSE <оператор0>;]

END;

 

Здесь <ключ_выбора> - это выражение порядкового типа, в зависимости от значения которого принимается решение; C1,...,CN - значения, с которыми сравнивается значение <ключа>; <оператор1>,..., <операторN> - оператор (возможно составные), из которых выполняется rnr, с константой которого происходит первое совпадение значения <ключа>, <оператор0> выполнится, если значение ключа не совпадает ни с одной из констант C1,...,CN.

Пример

 

Program calc;

Var a,b,rez:real;

oper:char;

Begin

write(‘Введите два числа: ’);

readln(a,b);

write(‘Введите операцию: ‘);

readln(oper);

case oper of

‘+’:rez:=a+b;

‘-’:rez:=a-b;

‘*’:rez:=a*b;

‘/’:rez:=a/b;

end;

writeln(‘Результат=‘,rez);

end.

 

Операторы повтора

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

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

 

while <условие выполнения цикла> do <оператор>;

 

Выполнение цикла начинается с проверки <условия выполнения цикла>. Если оно истинно, то выполняется <оператор> (тело цикла). Потом снова проверяется <условие выполнения цикла> и, если оно истинно, то выполняется <оператор> и т.д. Если на коком-то шаге <условие выполнения цикла> станет ложным, то выполнение цикла будет завершено. Таким образом, пока <условие выполнения цикла> истинно будет выполняться <оператор>. Если <условие выполнения цикла> изначально ложно, то <оператор> ни разу не будет выполнен.

Если в цикле необходимо выполнить несколько операторов, то необходимо воспользоваться составным оператором:

 

while <условие выполнения цикла> do

begin

<операторы>

end;

 

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

 

repeat

<операторы>

until <условие выхода из цикла>;

 

Выполнение цикла начинается с выполнения <операторов> (тела цикла), потом проверяется <условие выхода из цикла>. Если оно ложно, то снова выполняются <операторы>. Потом снова проверяется <условие выхода из цикла> и т.д. Если на коком-то шаге <условие выхода из цикла> станет истинным, то выполнение цикла будет завершено. Таким образом, будут выполняться <операторы> до тех пор, пока <условие выхода из цикла> не станет истинным. Кикам бы ни было <условие выхода из цикла> в начале работы цикла, <операторы> будут выполнены, по крайней мере, один раз.

Тело цикла может содержать несколько операторов, причем нет необходимости использовать составной оператор, поскольку в качестве операторных скобок здесь выступают ключевые слова repeat и until.

Оба оператора цикла предполагают, что

1. на момент начала выполнения цикла определены (имеют начальные значения) все переменные участвующие в вычислении значений условий и

2. тело цикла содержит оператор или операторы, которые изменяют эти переменные таким образом, чтобы условие изменило свое значение и цикл завершил свою работу.

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

 

for <переменная цикла>:=<начальное значение> to <верхняя граница> do

<оператор>;

 

Выполнение цикла начинается с присвоения <переменная цикла> <начального значения>. Далее, если значение <переменная цикла> меньше или равно значению <верхней границы>, то выполняется <оператор>. Потом значение переменной цикла увеличивается на единицу и снова проверяется условие, что значение <переменной цикла> меньше или равно значению <верхней границы>, выполняется <оператор> и т.д.

Есть еще один вариант цикла for:

 

for <переменная цикла>:=<начальное значение> downto <нижняя граница>

do <оператор>;

 

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

Если в теле цикла необходимо выполнить несколько операторов, то снова можно воспользоваться составным оператором.

Следующая маленькая программа выводит на экран кодовую таблицу:

 

Program Str3;

Var
I: Byte;

Begin

For I:=32 to 255 do

Write('VV',I:4, '-',Chr(I))

End.

 

Цикл в программе начинается с 32 потому, что символы с кодами от 0 до 31 являются управляющими и не имеют соответствующего графического представления.

Пример

Совершенными называются числа, равные сумме всех своих делителей, включая 1. Например, 6 – совершенное число, поскольку 6=1+2+3. Требуется найти и вывести на экран все совершенные числа вместе с их делителями, лежащие в диапазоне от 4 до 10000.

 

Var I,sum,del1,n:word;

Begin

for i:=4 to 10000 do

Begin

sum:=1; n:= trunc(sqrt(i));

for del1:=2 to n do

if I mod del1 =0 then

if del1<> I div del1 then

begin

sum:=sum+del1+(I div del1);

end

else

sum:=sum+del1;

if sum=i then

writeln(i);

End;

End.

 

Пример

Вычислить квадратный корень из произвольного вещественного числа, введенного с клавиатуры, используя метод Ньютона:

Здесь A – введенное число, Y 0= A.

Если A – отрицательное число, то необходимо вывести сообщение об ошибке.

Результат должен иметь относительную точность 1·10-6. Как только получено значение Y 0 оно используется для получения следующего приближения Y 0, по которому в свою очередь вычисляется Y 0, и так до тех пор, пока не будет достигнута требуемая точность, то есть, пока не станет

 

Var A,Y1,Y:real;

Begin

write(‘Введите число:’);

readln(A);

Y1:=A;

repeat

Y:=Y1;

Y1:=(Y+A/Y)/2;

until abs(Y1-Y)<0.000001;

writeln(‘Корень из числа=‘,Y1:10:5);

end.

 

Вывод трехзначных чисел из неповторяющихся цифр

 

For i:=0 to 9 do

for j:=0 to 9 do

for k:=0 to 9 do

if (i<>j)and(i<>k)and

(j<>k) then

write(I,j,k,’ ‘);

 

Вывод чисел из нечетных цифр

 

i:=1;

While i<=9 do

begin

J:=1;

while j<=9 do

begin

K:=1;

while k<=9 do

begin

write(I,j,k,’ ‘);

Inc(k,2);

end;

Inc(j,2);

end;

Inc(I,2);

End;

 

Оператор перехода

В языке Турбо-Паскаль имеются различные управляющие операторы, позволяющие написать любую программу. Тем не менее в языке имеется оператор безусловного перехода.

Безусловный переход приводит к передаче управления из одного места в программе в другое. Структура оператора перехода следующая:

goto <метка>

Здесь goto - ключевое слово (англ.: перейти на [метку]).

Метка - это произвольный идентификатор, позволяющий пометить некоторый оператор, чтобы ссылаться на него. Для совместимости со стандартным Паскалем разрешается в качестве метки использовать целые числа. Метка ставится перед оператором получающим управление и отделяется от него двоеточием. Как любой идентификатор метку необходимо описать в разделе описания меток, который начинается с ключевого слова label, за которым следует список меток:

...............

label m,1,loop;

begin

.........

goto 1;

m:.........

goto loop;

1:............

goto m;

 

Метка, описанная в программе, обязательно должна использоваться. Метка, описанная в функции или процедуре, должна использоваться в той функции или процедуре, в которой она описана.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 455; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.156.140 (0.378 с.)