Математический факультет

Вид материалаДокументы

Содержание


Перечислимый тип
Вещественные типы
Тип дата-время
Оператор присваивания
Составной оператор
Оператор выбора CASE
Подобный материал:
1   2   3   4   5   6   7   8

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


Перечислимый тип задаёт упорядоченное множество значений путём перечисления имён, обозначающих эти значения.

Например:

type color = (black, green, yellow, blue, red, white);

var a, b : color;

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

При работе с переменными перечислимого типа можно использовать операторы присваивания, операции отношения, они могут быть параметром цикла for. Так как перечислимый тип является порядковым типом, то к переменным этого типа применимы функции succ, pred, ord. Порядковый номер первой из перечисленных в описании типа констант равен 0. В нашем примере ord(black)=0. Однако в Object Pascal нельзя непосредственно вводить и выводить значения перечислимых типов.

Пример 5.

type color = (black, green, yellow, blue, red, white);

var a, b, c : color; k1, k2 : byte;

begin

a:=blue; b:=pred(a); c:=succ(a);

k1:=ord(b); k2:=ord(c);

writeln(k1:5, k2:5); readln

end.

В результате выполнения данной программы переменная b получит значение yellow, а переменная c – значение red. Поэтому k1=2, k2=4. Числа 2 и 4 будут выведены на экран.


Тип-диапазон


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

type <имя типа> = <минимальная константа>..<максимальная константа>;

Например,

type

digit = 0 .. 9;

symb = A  Z;

К переменным типа-диапазона применимы все операции и стандартные функции, которые допустимы для соответствующего базового типа.

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

type ball = 2..5;

var m1, m2, m3 : ball; sr : real;

begin

readln(m1, m2, m3);

sr:=(m1 + m2 + m3)/3;

writeln(sr:7:2); readln

end.

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


Вещественные типы не являются порядковыми. Поскольку данные в компьютере хранятся в виде двоичных кодов, то действительные числа, в отличие от целых, представляются приближённо, хотя и с большой степенью точности. В Delphi 5 имеется 7 вещественных типов:

Тип

Диапазон значений

Размер (в байтах)

real

5.0*10–324 .. 1.7*10308

8

real48

2.9*10–39 .. 1.7*1038

6

single

1.5*10–45 .. 3.4*1038

4

double

5.0*10–324 .. 1.7*10308

8

extended

3.6*10–4951 .. 1.1*104932

10

comp

–263 +1 .. 263–1

8

currency

–922337203685477.5808 ..

922337203685477.5807

8

Наибольшая производительность процессора достигается при использовании типа real. В Delphi 5 ему эквивалентен тип double.

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

Вещественные значения могут изображаться в форме с фиксированной точкой ( например, 7.32 456.721 0.015), а также в форме с плавающей точкой, т.е. в виде <мантисса>Е<порядок>. Числа 7.32 может быть записано в форме с плавающей точкой следующим образом:

73.2 E -0001 7.32 Е +0000 0.732 Е +0001

Точка в мантиссе плавает – отсюда название. Вещественные числа выводятся на экран в форме с плавающей точкой, если не используется вывод с форматом.


Тип дата-время


Тип дата-время предназначен для одновременного хранения даты и времени. Определяется этот тип с помощью стандартного идентификатора TDateTime. Значения этого типа представляют собой 8-ми байтовые вещественные числа, при этом целая часть позволяет определить дату, а дробная – время. При вводе и выводе дат и времени можно использовать следующие стандартные функции для получения данных в привычном для нас виде:

StrToDateTime – преобразовывает строку в величину типа TDateTime;

StrToTime – преобразовывает строку в величину типа TDateTime;

DateTimeToStr – преобразовывает величину типа TDateTime в строку;

DayOfWeek – возвращает номер дня недели для заданной даты.

Пример 7. Определить дату и день недели, которые наступят через 10000 дней, 13 часов, 15 минут, 6 секунд после заданного момента.

В качестве заданного момента времени возьмём 25 апреля 1973 года, 23 часа 35 минут, 22 секунды.

var d : TDateTime; k:integer;

begin

d:=StrToDateTime('25.04.1973 23:35:22');

d:=d + StrToTime('13:15:6') + 10000;

writeln(DateTimeToStr(d));

k:=DayOfWeek(d);

writeln(k); readln

end.

После запуска программы на экран будет выведено:

11.09.2000 12:50:28

2


1.3 Операторы

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


Оператор присваивания обозначается символом := . Действие его заключается в том, что вычисляется значение выражения, стоящего справа от знака присваивания , и это значение присваивается переменной, стоящей слева от знака присваивания.

Пусть, например, переменной x присвоено значение 13, а переменной y – значение 25. Чтобы x и y поменялись значениями, можно, используя вспомогательную (буферную) переменную t, записать следующую последовательность операторов присваивания:

x:=13; y:=25; t:=x; x:=y; y:=t;

В результате получим x=25 y=13.





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


Составным оператором называется группа операторов, заключённая в операторные скобки begin … end. Составной оператор используется в тех случаях, когда по правилам языка Object Pascal разрешается использовать один оператор, а программисту для решения задачи необходимо выполнить группу операторов. Для разделения операторов предназначена точка с запятой.


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

Оператор if предназначен для реализации разветвляющегося вычислительного процесса. В общем виде условный оператор записывается следующим образом:

if <логическое выражение> then <оператор1> else <оператор2>;

Вначале оператор if вычисляет значение логического выражения. Если значение логического выражения равно true, то выполняется оператор1, в противном случае – оператор2. В качестве оператора1 и оператора2 может быть использован составной оператор (группа операторов, заключённых в операторные скобки begin end) или другой условный оператор (вложенный условный оператор).

Оператор if может быть записан в сокращённой форме:

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

Пример 8. Даны два различных вещественных числа. Вывести на экран большее из них.

var x, y : real;

begin

readln(x, y);

if x>y then writeln(x:7:2) else writeln(y:7:2);

readln

end.


Пример 9. Даны два действительных числа x, y. Если x и y отрицательны, то каждое из чисел заменить его квадратом; если отрицательно только одно из них, то каждое из чисел увеличить в 10 раз; если оба числа неотрицательны, то каждое из них заменить корнем квадратным.

var x, y : real;

begin

readln(x, y);

if (x<0) and (y<0) then begin x:=sqr(x); y:=sqr(y) end

else

if (x<0) xor (y<0) then begin x:=x*10; y:=y*10 end

else begin x:=sqrt(x); y:=sqrt(y) end;

writeln('x=', x:6:2,' y=', y:6:2); readln

end.




да


нет

x10x y10y
да


нет



Пример 10. Даны три различных вещественных числа a, b, c. Найти максимальное из этих чисел.

var a, b, c, max : real;

begin

readln(a, b, c);

if (a>b) and (a>c) then max:=a

else

if b>c then max:=b

else max:=c;

writeln('max= ', max:7:2); readln

end.




да


нет


да


нет


Задачи.

25. Дано натуральное число x. Если оно нечётное, то удвоить его, в противном случае – уменьшить в два раза.

26. Даны целые числа m и n. Если число m делится нацело на число n, то вывести на экран частное от деления. В противном случае вывести два числа: целую часть частного и остаток от деления.

27. Даны вещественные числа a, b, c. Удвоить эти числа, если abc, и заменить их абсолютными значениями, если это не так.

28. Дано вещественное число x. Вычислить значение функции



29. Дано вещественное число x. Вычислить значение функции



30. Дано вещественное число x. Вычислить значение функции



31. Дано вещественное число x. Вычислить значение функции



32. Дано вещественное число x. Вычислить значение функции



33. Даны вещественные числа x, y. Переменной k присвоить номер четверти плоскости, в которой находится точка с координатами (x, y) (x0, y0).

34. Даны вещественные числа x, y (xy). Меньшее из них заменить их полусуммой, а большее – их удвоенным произведением.

35. Даны вещественные положительные числа a, b, c, d. Напечатать сообщение, можно ли прямоугольник со сторонами a, b уместить внутри прямоугольника со сторонами c, d так, чтобы каждая сторона одного прямоугольника была параллельна или перпендикулярна каждой стороне второго прямоугольника.

36. Даны вещественные положительные числа a, b, c. Если существует треугольник со сторонами a, b, c, то определить, является ли он прямоугольным.

37. Даны вещественные ненулевые числа x, y. Если они имеют разные знаки, то отрицательное заменить его абсолютным значением. В противном случае оба числа заменить на число 100.

38. Даны вещественные числа a, b, c (a0). Найти действительные корни уравнения ax2 + bx + c = 0. Если действительных корней нет, то вывести об этом сообщение.

39. Если сумма трёх различных действительных чисел x, y, z меньше единицы, то наименьшее из них заменить полусуммой двух других. В противном случае заменить меньшее из x и y полусуммой двух оставшихся значений.

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

41*. Дано целое число k (1 k 180) . В последовательности цифр

101112131415…979899 ,

в которой выписаны подряд все двузначные числа, определить k-ю цифру.


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

В отличие от оператора if, оператор case позволяет выбрать один оператор не из двух, а из нескольких операторов. В общем виде оператор case может быть записан следующим образом:

case <выражение> of

<список меток 1> : <оператор1>;

<список меток 2> : <оператор2>;

…………………………………..

<список меток N> : <операторN>

else

<оператор>

end;

Здесь <выражение> – это выражение порядкового типа. Вначале вычисляется значение этого выражения. Затем полученное значение последовательно сравнивается с константами из списков меток. Если значение выражения совпадает с какой-нибудь константой, то выполняется соответствующий оператор. Если значение выражения не совпадает ни с одной константой, то выполняется оператор, стоящий за словом else. Если слово else отсутствует, то выполняется оператор, стоящий за словом end.

Пример 11. По номеру дня недели определить название дня недели.

type week=1..7;

var day : week;

begin

readln(day);

case day of

1 : writeln(Понедельник);

2 : writeln(Вторник);

3 : writeln(Среда);

4 : writeln(Четверг);

5 : writeln(Пятница);

6 : writeln(Суббота);

7 : writeln(Воскресенье)

else writeln(Ошибка ввода)

end; readln

end.


Задачи.

42. По номеру месяца определить время года. (Например, 4 – весна).

43. Арифметический калькулятор: написать программу для вычисления суммы, разности, произведения и частного двух действительных чисел. Числа и знак операции вводятся с клавиатуры.

44. Для натурального числа n напечатать фразу n грибов (использовать латиницу – gribov), согласовав окончание слова гриб с числом n.

45. Дано натуральное число n (1.n99), определяющее возраст человека. Напечатать фразу Мне n лет (использовать латиницу), учитывая при этом, что при некоторых значениях n слово лет надо заменить на слово год или года.