Нельзя считывать или печатать значения перечисляемого типа




Заведующий кафедрой

Н. Сапожников

“ ” 2012 г.

Методические указания

На Практическое занятие № 3

по Алгоритмизации и Программированию

Класс ________ Дата и время

Место проведения: класс ПК

Тема: Структура программы. Типы данных и их описание в программе.

Цели:

Закрепление и углубление теоретических знаний.

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

Развитие и закрепление интереса у обучаемых к преподаваемому предмету.

 

План проведения

Практического занятия № 4

по дисциплине «Программирование»

 

Вводная теоретическая часть

Основная часть

а) тренинг по определению типов различных данных;

б) оператор присваивания;

в) правила записи выражений на Паскале

г) функции преобразования типов

д) сохранение проекта в Delphi

Заключительная часть

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

ЗНАТЬ:

- правила записи выражений на Паскале

- функции преобразования типов

- приоритеты операций

УМЕТЬ:

- правильно выбирать типы для различных величин

- использовать функции преобразования типов

- сохранять проекты в Delphi

 

Организационно-методические указания

По проведению

Практического занятия № 4

Вводная теоретическая часть

Тип - это множество значений, которые могут принимать объекты программы, и совокупность операций, допустимых над этими значениями.

Тип любого программного объекта определяет:

1) множество допустимых значений, которые может иметь объект;

2) множество допустимых операций, которые применимы к объекту;

3) формат внутреннего представления значения объекта (т.е. сколько байт ОП представляется данной переменной).

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

+ сложение

- вычитание

* умножение

div деление и отсечение дробной части

mod (modulo - определение остатка) взятие остатка при делении.

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

7 div 2 = 3; 3 div 5 = 0; (-7) div 2 = -3; (-7) div (-2) =3;

Вещественный тип данных описывается стандартным идентификатором REAL - это числа с дробной частью. Вещественное число может быть отрицательным, нулем или положительным в диапазоне от 1Е-38 до 1Е+38. Мантисса может содержать до 11 значащих цифр.

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

Вещественные десятичные числа в форме с плавающей точкой представлены в экспоненциальном виде mЕр, где

m - мантисса (целое или дробное число с десятичной точкой)

Е - означает "10 в степени"

р - порядок (целое число).

Выражение, присваиваемое вещественной переменной, может принимать целое или вещественное значение; перед присваиванием целые значения автоматически преобразуются в вещественные.

Литерный тип данных описывается стандартным идентификатором CHAR (character - символ, печатный знак, литера). Значениями литерного типа являются элементы из набора литер клавиатуры ЭВМ. Каждая переменная литерного типа может принимать значение только одной литеры.

Значения литерных переменных заключаются в апострофы: x:='L'; naam:= '8';

Логический тип описывается стандартным идентификатором BOOLEAN. Этим названием он обязан английскому математику Джоржу Булю (Bool). Он первым начал в середине прошлого века изучение логики с формальных позиций. В честь него исчисление высказываний называют иначе "булевой алгеброй", а логические значения - булевскими.

Под высказыванием понимается любое предложение, в отношении которого можно однозначно сказать, истинно оно или ложно, например,"3>2", "Осло - столица Кубы" и т.д.

Значение истинности некоторых высказываний может изменяться в зависимости от обстоятельств, при которых сделаны эти высказывания. Например, истинность высказывания "сегодня - среда" зависит от того, в какой день недели оно сделано, а высказывания"х<0" - от конкретного значения числовой переменной х. В связи с этим возникает понятие логической иди булевской переменной, которая может принимать одно из двух возможных логических значений истина - true или ложь - false, подобно тому, как в математике имеется понятие переменной, принимающей числовые значения. В частности, каждому высказыванию можно сопоставить определенную логическую переменную.

Логические выражения очень часто используются в программах. Без них невозможно обойтись при записи условных операторов, а также циклов WHILE и REPEAT. В языке Паскаль используются следующие знаки операций сравнения <, <=, >, >=, =, <>. Все эти операции дают результат типа Boolean.

Значения булевым переменным могут присваиваться или непосредственно bl:=true; b2:=false; или путем рассмотрения логических выражений Операции в языке Паскаль подразделяются на арифметические, отношения, логические (булевские), строковые и др. Выражения соответственно называются арифметическими, отношения, булевскими и т.д. в зависимости от того, какого типа операнды и операции в них используются.

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

Таблица 1. Арифметические операции.

Операция Действие   Типы операндов   Тип результата   Выражение   Результат  
Бинарные        
+ Сложение integer integer 2+3  
real real 2.4+5E1 52.4
- Вычитание integer integer 10-7  
real real 15.76-6.13 9.63
* Умножение integer integer 4*6  
real real 3.3*1.5 4.95
/ Деление integer real 6/2  
real real    
div Целочислен-ное деление Integer Integer 7 div 2  
mod Остаток Integer Integer 7 mod 2  
Унарные        
- Отрицание Знака Integer Integer   -17
real Real -3.6 3.6
             

 

Таблица 2 Операции отношения

Операция Название Выражение Результат
= <> > < >= <= IN   Равно Не равно Больше Меньше Больше или равно Меньше или равно Принадлежность   А=В а<>В А>В А<В А>=В А<=В A in M   TRUE, если А=В TRUE, если а<>В TRUE, если А>В TRUE, если А<В TRUE, если А>=В TRUE, если А<=В TRUE, если А находится в списке М

Сравниваемые величины могут принадлежать к любому скалярному (integer, real, char, boolean) или перечисляемому типу данных. Результат всегда имеет булевский тип и принимает одно из двух значений: TRUE или FALSE.

Над аргументом логического типа определены следующие операции (по старшинству): NOT (не) - отрицание; AND (и) - конъюнкция;OR (или) - дизъюнкция.

Стандартные математические функции могут быть исполь­зованы в любой программе безо всяких дополнительных описаний, т.к. они описаны в модуле System, который автоматически подклю­чается к любому проекту. Для того чтобы воспользоваться процедурами и функциями, на­ходящимися в других модулях, необходимо эти модули подключить к нашему приложению, т.е. указать имя модуля в операторе uses. Так, например, в состав пакета Delphi входит модуль Math, содержащий ши­рокий набор математических, тригонометрических, статистических и других функций. Некоторые часто используемые функции из этого модуля приведены в таблице 3.

 

Таблица 3. Математические функции из модуля Math
Функция Описание   Тип аргумента(ов) Тип результата
Power(a,b) Вычисляет a b; при а<0 степень b должна быть целой Extended Extended
LogN(a,b) вычисляет loga(b) то же то же
Tan(x) вычисляет tg(x) то же то же
CoTan(x) вычисляет ctg(x) то же то же
ArcSin(x) вычисляет arcsin(x) то же то же
ArcCos(x) вычисляет arccos(x) то же то же

Заметим, что для вычисления можно воспользоваться функцией Power с показате­лем степени 1 /п:

Power(a, 1 /п)

 

Таблица 4 Порядок выполнения операций

Операция Приоритет Вид операции
NOT * / div mod and + - OR XOR = <> > < >= <= IN   I(высший) II III IV(низший)   Унарная операция Операция типа умножения Операция типа сложения Операция отношения  

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

• операнд, находящийся между двумя операциями с различными приоритетами, свя­зывается с операцией, имеющей более высокий приоритет;

• операция, находящаяся между двумя операциями с равными приоритетами, связы­вается с той операцией, которая находится слева от него;

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

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

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

В арифметическом выражении арифметические операции применяются к веществен­ным и целым числам.

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

• Результат выражения А/В всегда имеет тип Extended, независимо от того, имеют операнды А и В целый или вещественный тип.

• Если в выражениях А*В, А+В, А-В хотя бы один операнд является веществен­ным, то результат имеет тип Extended.

• Если в выражениях А*В, А+В, А-В оба операнда целые и один из них имеет тип Int64, то результат тоже будет иметь тип Int64. Для всех других целых типов ре­зультат будет иметь тип Integer.

• Операции div и mod применяются к целочисленным операндам, и результат их вы­полнения имеет тип Integer.

Порядок вычислений в арифметическом выражении такой же, как и в математике. Сначала вычисляются значения стандартных функций, затем операции умножения и де­ления (*, /, div, mod), потом операции сложения и вычитания (+, -). Если в выражении имеется несколько операции с одним приоритетом, то они выполняются слева направо. Если нужно изменить порядок выполнения операций, то следует использовать круглые скобки.

Рассмотрим некоторые примеры арифметических выражений.

Пример 1.4

Определить значение выражения

150 div 25 mod 5.

Решение

Целочисленные операции div и mod имеют одинаковый приоритет выполнения. Опе­рации одного приоритета выполняются слева направо в порядке их появления в вы­ражении, поэтому первой выполнится операция 150 div 25 (результат: 6), второй 6 mod 5 (результат: 1).

Ответ: 1.

Пример 1.5

Определить значение выражения:

pred(succ(trunc(2.7)+round(3.4))).

Решение

Согласно правилам вычисления арифметических выражений, в первую очередь вычис­ляются выражения в самых внутренних круглых скобках, поэтому порядок вычисле­ний следующий:

trunc(2.7) 2

round(3.4) 3

2+3 5

succ(5) 6

pred(6) 5

Ответ: 5.

Пример 1.6

Записать по правилам языка Object Pascal выражение

Решение

При решении этой задачи следует воспользоваться функциями Power и Tan, описание которых содержится в модуле Math:

(power(sin(a),5)-b)/(abs(b)+tan(b))+le-5.

 

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

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

TYPE days=(sun, mоn, tue, wed, thu, fri, sat);

season=(wnt, spr, sum, aut);

Можно поступить иначе, убрав определение типа из раздела TYPE и включив его в раздел VAR

VAR today: sun, mon, tue, wed, thu, fri, sat;

color: yel, red, wht, blc, grn, blue;

Ниже даны определения двух перечисляемых типов и соответствующих переменных

TYPE days=(sun, mon, tue, wed, thu, fri, sat);

status=(wedded, unwed);

{Во втором случае использовано слово wedded, а не wed, поскольку все имена в перечислении должны быть различны}

VAR today, tomorrow: days;

Переменные today, tomorrow могут принимать только одно из перечисленных значений (sun, mon, tue, wed, thu, fri, sat). Попытка присвоить им любое другое значение вызовет программное прерывание.

Нельзя считывать или печатать значения перечисляемого типа

READ(today, tomorrow); WRITE (fri, today);

Можно присваивать значения переменным перечисляемого типа

today:=mon; tomorrow:=today;

но только в том случае, когда переменная и значение относятся к одному перечислению.

today:=unwed;

К перечисляемому типу неприменимы арифметические действия;

today:=sat+sun;

Константы перечисляемого типа имеют порядковые значения, начинающиеся c нуля

writeln(ord(mon), ord(tue), ord(sun)); 120

Следовательно, можно вычислять предшествующий и последующий элементы

today:=pred(mon);

tomorrow:=succ(today);

writeln(ord(today), ord(tomorrow)); 5 6

Оператор присваивания состоит из идентификатора переменной или пользовательской функции, символа присваивания “:=” и выражения. Выполнение оператора присваивания приводит к вычислению значения, определяемого выражением, и присваиванию этого значения переменной, идентифицируемой именем, стоящим слева от символа присваивания.

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

Формат: <идентификатор>:= <выражение>;

Пример: pr:= 1;

Ruh:= 1.72;

A:=sin(b) + cos(c);

 

Основная часть

2.1

а) Записать на Паскале следующие формулы:

· a+bx+cyz;

· [(ax-b)x+c]x-d;

· ;

· ;

· 104a-3 b;

б) вычислить: 24/(3*4)-24/3/4+24/3*4

в) Записать на Паскале следующие формулы:

· (1+x)2;

· ;

· |a+bx|;

· cos2 x3;

· tg x;

г) вычислить значения выражений:

succ(round(5/2)-pred(3))

д) определить тип выражения:

1+0.0; 20/4; sqr(4); sqr(5.0); sqrt(16); sin(0); succ(-2); trunс(-3.14);

е) вычислить значения выражений:

trunc(6.9); round(6.9); trunc(6.2); round(6.2); trunc(-1.8); round(-1.8); round(0.5); round(-0.5);

ж) вычислить значения выражений:

20 div 6; 20 mod 6; 20 div 4; 20 mod 4; 2 div 5; 2 mod 5; 123 div 0; 3.0 mod 3;

з) определить операцию div через другие операции и стандартные функции.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: