Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

End enum




End enum

Пример.

enum spectr

Red

Orange

Yellow

Green

Blue

Violet

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

dim color1 as spectr, color2 as spectr

Правила объявления и использования переменных этого типа полностью совпадают с правилами языка C. Имеются только 2 отличия:

- значения переменных и перечисляемых констант относятся к типу long;

- при присвоении переменной значения не из списка констант ошибки не возникает.

10.2. Тип currency (B)

Данные этого типа представляют собой десятичные значения с фиксированной точкой с 15 цифрами в целой части и 4 цифрами – в дробной. Элемент данных занимает в памяти 8 байтов. Диапазон представления:

-922,337,203,685,477.5808 - 922,337,203,685,477.5807.

Литералы данного типа не определены.

Пример объявления переменных.

dim sum1 as currency, TotalSum as currency

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

10.3. Тип date (B)

Данные этого типа в памяти представляются специальным форматом с плавающей точкой, точно знать который нет необходимости. Каждый элемент занимает в памяти 8 байтов. Целая часть значения хранит дату, дробная – время. Диапазон представления дат от 1 января 100 года до 31 декабря 9999 года, времени – от 0:00:00 до 23:59:59.

Литералы данного типа заключаются между символами #. Они могут записываться в различных форматах, однако после окончания ввода среда преобразует введенный формат даты/времени в формат, принятый в USA: m/d/yyyy h:mm:ss {AM|PM}, где m - № месяца (1 или 2 цифры в зависимости от значения), d - № дня в месяце (аналогично), yyyy – год, h – час (1 или 2 цифры), mm – минуты, ss – секунды, AM (ante meridiem – до полудня), PM (post meridiem – после полудня) – указатели 12-часовой шкалы.


Пример.

#01 Jan 2001# à #1/1/2001#

#13:03:03# à #1:03:03 PM #

#13/11/2001 5:54:56# à #11/13/2001 5:54:56 AM #

Подобное преобразование может привести к ошибке. Например, запись вида #9/3/2001# будет интерпретироваться как: 3 сентября 2001 года, тогда как, возможно, имелось в виду 9 марта 2001 года (принятый в России краткий формат даты). Поэтому разумно записывать литералы даты/времени как строки. При этом преобразования формата в среде не будет.

Пример.

"09/03/2001 18:34:30" à 9 марта 2001 года 6 часов 34 минут 30 секунд вечера

При выводе значений (печать, экран) используются установленные в пункте НастройкаàПанель управленияàЯзык и стандарты форматы (для даты – краткий, например, 11/03/2001).

Пример объявления переменных.

dim BirthDay as date

С данными этого типа можно манипулировать непосредственно. Например, разницу в датах можно получить так:

dim day1 as date, day2 as date, day3 as integer

day1 = #3/9/1999#

day2 = #3/10/2001#

day3 = day2 - day1

Получим 732 дня.

К дате можно прибавлять дни. Им соответствуют целые значения. Прибавление 1 часа – 1/24, 1 минуты – 1/(24*60), 1 секунды – 1/(24*3600).

Пример.

day2=day1+2 à #3/11/1999#

При преобразовании данных различных типов в тип date значение слева от десятичной точки представляет дату, справа – время. 0 означает полночь, 0.5 – полдень. Отрицательные целые числа представляют даты до 30 декабря 1899 года.

Для облегчения манипуляций с данными типа date имеются следующие библиотечные функции:

Date – возвращает системную дату;

Time – возвращает системное время;

Now – возвращает системные дату и время.

DateAdd (интервал, число, дата) – возвращает дату, отстоящую от дата на число интервалов. Возможные значения аргумента интервал:

- yyyy – год,

- q – квартал,

- m – месяц,

- ww – неделя,

- d – день,

- h – час,

- n – минута,

- s – секунда.

Пример.

DateAdd (" m ", 1, #1/31/2000#) à #02/29/2000#

DateDiff (интервал, дата1, дата2) – возвращает число интервалов между дата2 и дата1. Если дата1 > дата2, возвращается число < 0. Функция имеет 2 необязательных аргумента: первый день недели и первая неделя года и значение интервала = " w – день недели. Употребление этих значений изучить самостоятельно.

Пример.

DateDiff( " d ", #3/9/2000#, #3/10/2001#) à 366

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

Пример.

DatePart (" yyyy ", #3/9/2003#, vbMonday) à 2003 ' vbMonday=2

DatePart (" q ", #3/9/2003#, vbMonday) à 1

DatePart (" m ", #3/9/2003#, vbMonday) à 3

DatePart (" d ", #3/9/2003#, vbMonday) à 9

DatePart (" ww ", #3/9/2003#, vbMonday) à 10

DatePart (" w ", #3/9/2003#, vbMonday) à 7

Day (дата) – возвращает день месяца.

Weekday (дата[, 1-й день недели]) – возвращает порядковый № дня недели.

Month (дата) – возвращает № месяца.

Year (дата) – возвращает год.

Пример.

Day (#3/9/2003#) à 9

WeekDay (#3/9/2003#, 2) à 7

Month (#3/9/2003#) à 3

Year (#3/9/2003#) à 2003

Hour (время) – возвращает целое от 0 до 23 (час аргумента).

Minute (время) – возвращает минуты (0 – 59).

Second (время) – возвращает секунды (0 – 59).

Пример.

Hour (#6:34:30 PM) à 18

Minute (#6:34:30 PM) à 34

Second (#6:34:30 PM) à 30

10.4. Тип void (С)

Так называемый "пустой" тип. Служит для согласования синтаксиса функций, не возвращающих значений или не имеющих аргументов.

Пример.

void putmsg(void){

printf ("Hello, world!\n");

} /* End putmsg */

Этот тип также используется для формирования "универсальных" указателей void *, о которых пойдет речь в другом разделе.

10.5. Подмассивы (сечения) (C)

В языке С можно рассматривать многомерный массив как одномерный, элементами которого являются массивы на 1 меньшей размерности.

Пример.

float sales[3][4][5];

Такой объект можно трактовать как массив с плавающей точкой, состоящий из 3 элементов, каждый из которых является двумерным массивом размером 4*5.

Допустимы следующие обращения к содержимому этого массива:

sales – массив целиком,

sales[ i ] – к i -му подмассиву 4*5,

sales[ i ][ j ] – к элементу с индексами i и j: массив из 5 элементов,

sales[ i ][ j ][ k ] – скалярная величина: собственно элемент массива sales.

Использование сечений иногда весьма удобно, особенно при обращении к процедуре.

Пример. Найти индексы максимальных элементов каждой строки матрицы.

#define M 10

#define N 10

void main(void){

float a[M][N]; int s[M], ind(float [ ], int);

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

for (i=0; i<M; i++){

s[ i ]=ind(a[ i ], N);// Аргументом функции ind является i -я строка

}

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

}//End main

int ind(float x[ ], int n){// Параметр есть одномерный массив длиной в строку

int i, k; float y;

y=x[0];

k=0;

for (i=1; i<n; i++){

if (y<x[ i ]){

y=x[ i ]; k=i;

}

}

return k;

} //End ind

10.6. Динамические массивы (B)

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

Динамический массив объявляется обычным образом, но без указания границ индексов и числа измерений.

Пример.

dim DinArray() as single

Задание размерности и границ индексов такого массива производится во время выполнения программы инструкцией вида:

redim [ preserve ] <имя_массива>(<выражение>[, <выражение>]...)

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

Пример.

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

redim DinArray(1 to 10, 4)

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

redim DinArray(5,5)

При выполнении инструкции redim все значения элементов, которые были заданы ранее, теряются. При этом числовые значения заменяется нулями, строки – пустыми строками (""). Однако, имеется возможность сохранить "старые" значения элементов массива. Это особенно полезно, когда после переопределения размер массива увеличивается. Для этого в инструкции redim необходимо употребить ключевое слово preserve (сохранить). При использовании опции preserve можно изменять только верхнюю границу последнего измерения.

Пример.

redim preserve DinArray(5, 10)

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

Lbound (<имя_массива>[, <№ измерения>]) – нижняя граница,

UBound (<имя_массива>[, <№ измерения>]) – верхняя граница.

Пример. Увеличить на 1 границы массива DinArray.

redim DinArray(Ubound(DinArray)+1, Ubound(DinArray, 2)+1)

10.7. Структуры и объединения (C)




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


Дата добавления: 2014-12-27; Просмотров: 328; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.03 сек.