Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Правила преобразования типов

В языке Паскаль существует 2 варианта преобразования типов:

1. Автоматическое преобразование. Для его выполнения два типа должны быть совместимы, т.е. быть одинаковыми или тип назначения по количеству отводимой ему памяти больше исходного типа. При выполнении второго из этих условий происходит расширяющее преобразование, которое не может привести к потере информации, например переменной типа longint присвоить значение переменной типа integer или переменной типа Real может быть присвоено значение выражения типа Integer.

Пример 1.

Var

a:byte;

b:integer;

c:real;

Begin

b:=a;

c:=b;

b:=c; - ошибка!

b:=a/2; - ошибка, т.к. деление дает результат типа real!

 

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

Функции преобразования типов:

Имя функции Тип аргумента Тип результата Назначение
Trunc(x) вещественный целый целый Преобразует вещественное значение x в целочисленное представление путем отбрасывания дробной части значения x
Round(x) вещественный целый целый Преобразует вещественное значение x в целочисленное представление путем округления x до ближайшего целого

 

Пример 2. Устраним ошибки в примере 1. Для этого используем функции округления round и отбрасывания дробной части trunc.

b:=a;

c:=b;

b:=round(c);

b:=trunc(a/2);

Основные операторы языка

Оператор присваивания

Оператор присваивания вычисляет значение выражения, стоящего справа от знака “ := “ и присваивает его переменной, указанной слева. Его общий вид:

<имя переменной> := <выражение>;

Тип переменной и тип значения выражения должны быть совместимы (см.правила преобразования типов) совпадать.

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

Заданы действительные числа a, b и c. Вычислить значение выражения:

.

Program primer;

Var a,b,c,y:real;

Begin

Writeln (‘Введите a ’); readln(a);

Writeln (‘Введите b ’); readln(b);

Writeln (‘Введите c ’); readln(c);

Y:=(-b+sqrt(sqr(b)-4*a*c))/(2*a);

Writeln(‘Результат Y = ’,Y:0:3);

End.

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

С помощью условного оператора можно организовать разветвление вычислительного процесса, т.е. выбрать и выполнить одну или другую последовательность операторов.

Условный оператор в Паскале имеет два варианта записи. Полная форма:

If <логическое выражение> Then <оператор1>

Else <оператор2>;

Порядок работы:

1. Вычисляется логическое выражение.

2. При получении значения «Истина» (True) выбирается для выполнения записанный послеThen оператор1, а оператор2 пропускается.

3. При получении значения «Ложь» (False) выполняется записанный послеElse оператор2, а оператор1 пропускается.

На блок-схеме такой вариант оператора изображается следующим образом:

Неполная форма:

If <логическое выражение> Then <оператор>;

В этом случае при получении значения True выполняется записанный послеThenоператор, а при получении значения False не производится никаких действий.

На блок-схеме такой вариант оператора изображается следующим образом:

 

Особенности оператора:

1. Перед словом Else не должно быть “; ”, так как она ставится только в конце оператора. Если “; ” присутствует, то компилятор выдает ошибку.

2. Если после Thenили Else необходимо выполнить несколько операторов, то эти операторы должны быть заключены в операторные скобки Begin - End. Такая конструкция называется составным оператором. Оператор, в котором после слов Thenи Else выполняются по несколько действий, выглядит следующим образом:

If <логическое выражение>

Then

Begin

Оператор1;

Оператор2;

операторN;

End

Else

Begin

Оператор1;

Оператор2;

операторN;

 

End;

Цепочка if-else-if

Одна из распространенных программных конструкций, основанных на последовательности вложенных операторов IF – это цепочка if-else-if. Выглядит она так:

IF <логическое выражение>

Then оператор;

else if <логическое выражение>

Then оператор1;

Else if <логическое выражение>

Then оператор2;

……

else операторN;

Порядок работы:

Логические выражения вычисляются сверху вниз. Как только одно из условий, управляющих таким if, оказывается равным true, тогда выполняется связанный с ним оператор, а оставшаяся часть цепочки пропускается. Если все логические выражения = false, то выполнятся операторN. Если конечный операторN отсутствует, то не выполняется никаких действий.

Пример: Задано целое число Y. Вычислить новое значение Y по правилу:

Y =

Решение. Сначала составим программу без использования цепочки if-else-if. Попробуем реализовать правило вычисления Y «в лоб»:

Program myif;

Var y:real;

Begin

Writeln (‘Введите y ’); readln(y);

If Y>2 then Y:=Y/10;

If y<0 then Y:=sqr(Y)

Else Y:=-10*Y;

Writeln(‘Результат Y = ’,Y:0:3);

End.

Проанализируем работу программы при:

1) Y = -1.

В первом операторе IF выражение Y>2 дает значение false, поэтому ветка Then пропускается. Второй оператор If при вычислении выражения Y<0 получает значение True и результирующее значение Y вычисляется в операторе Y:=sqr(Y). Ветка Else этого оператора IF пропускается. Ответ соответствует условию.

2) Y=10.

В первом операторе IF выражение Y>2 дает значение True, происходит переход к оператору, относящемуся к ветке Then. Вычисляется выражение 10/10 и Y:= 1, т.е. ответ уже получен. Далее по правилам выполнения программ происходит переход к следующему после IF оператору – второму оператору If. При вычислении выражения Y<0 (1<0) получается значение False и происходит переход на ветку Else. Выполняется оператор Y:=-10*Y (Y:=-10*1) и Y:= -10. Т.о., вторично изменяется значение Y, что не соответствует условию.

Исправить эту ошибку можно, применив цепочку if-else-if. Тогда текст программы будет следующий:

Program myif;

Var y:real;

Begin

Writeln (‘Введите y ’); readln(y);

If Y>2 then Y:=Y/10

Else If y<0 then Y:=sqr(Y)

Else Y:=-10*Y;

Writeln(‘Результат Y = ’,Y:0:3);

End.

Теперь при Y=0 выражение Y>2 дает True, выполняется оператор, стоящий на ветке Then: Y:=10/10 (=1). Второй оператор If теперь относится к ветке Else и пропускается. Т.о., результат соответствует условию.


Операторы повторений

В языке Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты алгоритмов:

1. Счетный цикл (цикл с параметром) – FOR

2. Цикл с предусловием (цикл «пока»)– WHILE

3. Цикл с постусловием (цикл «до»)– REPEAT

Счетный цикл

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

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

For <имя переменной> := <выражение1> To <выражение2> Do <оператор>;

Здесь:

<имя переменной> - параметр цикла

<выражение1> - начальное значение параметра цикла

<выражение2> - конечное значение параметра цикла

Все три эти объекта должны быть одного порядкового типа.

<оператор> - тело цикла.

Пример написания оператора:

For I:= 1 to 10 do writeln(I); - выполняет повторение вывода на экран значения параметра цикла с переводом строки.

Правила работы:

1. Вычисляются значения выражения 1 и выражения 2.

2. Параметру цикла присваивается начальное значение (в примере I:=1).

3. Параметр цикла сравнивается с конечным значением (10). Если параметр цикла меньше или равен конечному значению, то перейти к п.4, иначе - конец цикла (переход на следующий оператор после оператора цикла).

4. Выполняется тело цикла (итерация).

5. Параметр цикла принимает следующее значение, которое вычисляется с помощью функции Succ (шаг переменной цикла “+1”)

6. Выполняется переход к п.3.

Второй вариант записи этого оператора:

For <имя переменной> := <выражение1> DownTo <выражение2> Do <оператор>;

Отличия от первого варианта:

1. Повторение работы цикла происходит, если значение параметра цикла больше или равно конечному значению.

2. Параметр цикла после каждой итерации цикла принимает следующее значение, полученное с помощью функции Pred (шаг переменной цикла “-1”).

Особенности оператора FOR:

1. После слова DO тело цикла составляет только один оператор. Если нужно включить в тело цикла два и более оператора, то используется составной оператор – группа операторов, заключенная в операторные скобки Begin и End.

2. Шаг переменной цикла может быть только +1 (DO) или -1 (DOWNTO).

3. Если в начале работы цикла начальное значение больше конечного (вариант c TO) или начальное значение меньше конечного (вариант с DOWNTO), то оператор тела цикла не будет выполнен ни разу.

4. Изменять в теле цикла значение параметра цикла не рекомендуется.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...