русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функции и процедуры


Дата добавления: 2015-06-12; просмотров: 651; Нарушение авторских прав


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

Если подпрограмма реализуется как функция, то она при завершении должна возвращать значение определенного типа (например, return 0;). Подпрограмма-функция может указываться в выражениях.

Подпрограмма-функция также может быть передана подпрограмме в качестве фактического параметра, например,

(procedure P1 (i: integer;

function P2(j:integer):integer);).

Помимо использования глобальных переменных, некоторые языки программирования позволяют делать локальные переменные подпрограмм доступными для других подпрограмм, выполняющихся вне текущей записи активации данной подпрограммы. Это может быть реализовано как экспорт данных (externs в языке С, uses в языке Pascal), и в таком случае экспортируемая локальная переменная должна быть доступна вне записи активации. Поэтому ее, как правило, размещают в сегменте кода подпрограммы.

К способам реализации совместного использования данных относится и механизм явно организуемой общей среды. Все объекты данных, которые предполагается использовать в ряде подпрограмм, могут быть помещены в такую общую среду. Этот механизм реализуется в таких языках программирования, как С (переменные помечаются как extern), Ada (переменные указываются в пакете), FORTRAN (переменные задаются в блоке COMMON). В объектно-ориентированных языках программирования совместное использование данных может быть реализовано через модификаторы доступа переменных членов классов.

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



 


 

Лекция #6: Простые типы данных Рассматривается понятие объекта данных. Анализируется реализация простых типов данных в различных языках программирования. Описывается представления целых и вещественных типов в памяти компьютера.
Переменные и константы Будем называть объектом данных один или несколько однотипных элементов данных, рассматриваемых программой как одно простое или составное целое. Объекту данных присущи такие атрибуты, как тип, адрес памяти, присвоенное значение, имя. Переменные и константы - это объекты данных. При создании переменной или константы им назначается имя, называемое иногда идентификатором. В отличие от переменной, атрибут "значение" объекта данных "константа" не может быть изменен в процессе выполнения программы. Объявление объектов данных Перед использованием в программе любой объект данных должен быть объявлен. Однако некоторые языки допускают неявное объявление. Так, в языке FORTRAN компилятор определяет тип используемой, но предварительно не объявленной переменной по первому символу имени, а в языке Perl неявное объявление переменной происходит при присваивании ей начального значения. Некоторые языки выполняют неявное объявление переменных, используемых в качестве счетчиков циклов. Оператор объявления сообщает компилятору информацию об идентификаторах и типах данных, назначаемых объектам данных, и о предполагаемом времени жизни этих объектов (глобальная или локальная переменная, переменная - член класса, статическая переменная и т.п.). При объявлении объекта данных в зависимости от типа этого объекта и языка программирования возможно выделение памяти под этот объект при объявлении или при последующем создании этого объекта. В языке C++ для объявления новых имен в текущей области видимости предназначаются операторы объявления. Например: int i, j; float m, n; Оператор объявления в языке C++ может указываться в любом допустимом месте программы. В языке C++ каждый оператор объявления завершается символом конца оператора (точка с запятой). В операторе объявления может объявляться несколько объектов данных одного типа, перечисляемых через запятую. Любой оператор объявления начинается с ключевого слова или идентификатора, указывающего тип объявляемого объекта. Объявляемыми объектами данных могут быть названия типов и имена объектов. Объявление определяет имя внутри области видимости. Имя, объявляемое внутри блока, класса, функции или пространства имен, является локальным. Блок в языке C++ заключается в фигурные скобки. Если вне блока существуют глобальные имена, обозначаемые теми же идентификаторами, то они становятся скрыты внутри блока и к ним следует обращаться, используя оператор разрешения области видимости ::. Например: int i1; // Объявление глобальной // переменнойvoid metod1() { int i1; // Объявление локальной // переменной i1=22; // Доступ к локальной // переменной метода ::i1=44; // Доступ к глобальной // переменной { int i1; // Объявление локальной // переменной i1=33; // Доступ к локальной // переменной блока }i1=44; // Доступ к глобальной // переменной В языке C++ объявления применяются для создания нового имени, используемого в приложении (имя может указывать не только объект данных). Объявления позволяют:
  • специфицировать класс памяти, тип и область действия объекта;
  • инициализировать объект начальным значением;
  • назначать имена константе (при объявлении перечислимого типа);
  • объявлять новый тип (class, struct и union);
  • определять синоним существующего типа (typedef);
  • специфицировать шаблон классов или функций (template);
  • специфицировать пространство имен (namespace);
  • специфицировать класс памяти, тип и область действия подпрограммы.
Отметим, что термин объявление означает только указание, каким образом объявляемое имя будет интерпретироваться компилятором. В языке C++ при каждом объявлении локального объекта под него выделяется память. Например: // Объявление и инициализация // локального объекта в цикле do { char char1 = _getch(); if( (char1 == NULL ) continue; return (char1);} while( 1 ); Удаление объекта, который был объявлен в цикле, происходит после каждой итерации, при выходе из блока или при передаче управления в точку, расположенную выше объявления этого объекта. Процедура удаления объекта в языке C++ может включать не только удаление объекта из памяти (освобождение памяти), но и выполнение деструкторов (для объектов типа класса). В языке Java объявления переменной могут указываться в любом допустимом месте программы. Например: boolean b1=true; // Оператор присваивания // задается символом =char c1='N';int int1=123; Имена могут иметь следующие элементы языка Java:
  • пакет, определяемый оператором package;
  • тип, вводимый определением класса или интерфейса;
  • поле, являющееся переменной типа класса или типа интерфейса;
  • группа методов типа класса или типа интерфейса;
  • переменная, являющаяся формальным параметром метода;
  • переменная, являющаяся локальной переменной блока;
  • метка оператора.
Если имя или выражение означает переменную или значение простого типа, тогда тип этой переменной или значения называется типом имени или выражения. В языке Object Pascal оператор объявления может указываться только в области объявлений, определяемой ключевым словом var. Например: var ch1: Char; {Оператор объявления в языке Object Pascal}beginch1 := Chr(65); { Оператор присваивания задается символами :=}end; Типы данных Тип данных назначается объекту данных при его объявлении и определяет: значения, которые может принимать объект данного типа; операции, которые используются для манипуляции над объектами заданного типа. Современные языки программирования, как правило, могут иметь набор простых типов, являющихся встроенными в данный язык программирования, и средства для создания производных типов. Объектно-ориентированные языки программирования позволяют определять типы класса. Реализация простых типов данных заключается в способе представления значений данного типа в компьютере и в наборе операций, поддерживаемых для данного типа. Типы данных языка C++ Тип данных определяет размер памяти, выделяемой под переменную данного типа при ее создании. C++ поддерживает следующие типы данных:
  • базовые типы. Базовые типы указываются зарезервированными ключевыми словами, и их не надо определять.
  • производные типы. Переменные этих типов создаются как с использованием базовых типов, так и типов классов. Это структуры, объединения, указатели, массивы.
  • типы класса. Экземпляры этих типов называются объектами.
Базовые типы языка C++ можно подразделить на две группы: целочисленные и вещественные. Существует еще ключевое слово void, которое используется для описания типа подпрограмм, не имеющих возвращаемого значения, или при указании параметров подпрограмм неизвестного типа.
char signed char Символьный тип. Диапазон значений от -128 до 127. Содержит один символ или строку символов. Каждый символ представляется одним байтом. Компилятор различает как отдельные следующие типы: char, signed char и unsigned char.
unsigned char Символьный тип. Диапазон значений от 0 до 255. Каждый символ представляется одним байтом (значение в диапазоне от 0 до 255).
short signed short Целый тип. Диапазон значений от -32768 до 32767. Сокращенное обозначение типа short int. Длина этого типа вне зависимости от используемого компилятора всегда больше или равна длине значения типа char и меньше или равна длине значения типа int.
unsigned short Беззнаковый целый тип. Диапазон значений от 0 до 65535.
int signed int Целый тип. Диапазон значений от -2147483648 до 2147483647. Длина этого типа вне зависимости от используемого компилятора всегда больше или равна длине значения типа short int. В общем случае размер типа int языка C++ зависит от конкретной реализации.
unsigned int Беззнаковый целый тип. Диапазон значений от 0 до 4294967259.
__intn Целый тип, размер в битах которого определяется значением n, и может быть равным 8, 16, 32 или 64 битам.
long signed long Целый тип. Диапазон значений от -2147483648 до 2147483647. Сокращенное обозначение типа long int.
unsigned long Беззнаковый целый тип. Диапазон значений от 0 до 4294967259
float Тип данных с плавающей точкой. Диапазон значений от 3.4Е-38 до 3.4Е+38.
double Тип данных с плавающей точкой двойной точности. Диапазон значений от 1.7Е-308 до 1.7Е+308. Длина типа double вне зависимости от используемого компилятора всегда больше или равна длине типа float и короче или равна длине типа long double.
long double Тип данных с плавающей точкой двойной точности, длина которого равна длине значений типа double. Типы double и long double имеют одинаковое представление, но компилятор трактует их как различные типы.

Размер памяти, выделяемой под каждый тип данных языка C\C++, в некотором смысле зависит от используемой платформы и компилятора. Однако все компиляторы гарантируют, что для типа short памяти всегда выделяется меньше или столько же, сколько и для типа int, а тип long всегда "длиннее" или равен типу int.

Символьные типы char и unsigned char представляют значение символа, реализуемое одним байтом. Для использования символов в кодировке Unicode язык C++ предоставляет тип wchar_t, в котором под каждый символ отводятся два байта.

Ключевое слово typedef языка C++ позволяет объявить новое имя существующего типа.

Например:

typedef int my_integer;my_integer i1=0;

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

Символьным литералом или символьной константой называется символ, заключенный в одинарные кавычки. Целые литералы представляют целочисленные константы в десятичном, восьмеричном или шестнадцатеричном виде.

Восьмеричные литералы начинаются с символа 0, а шестнадцатеричные - с символов 0x.

После литерала может быть указан суффикс, определяющий его тип: U - unsigned int, L - long int.

Например:

00 // Восьмеричное значение, равное 0oxffff // Шестнадцатеричное значение, // равное 6553510L // Значение типа long int

При записи шестнадцатеричных литералов каждый знак может принимать значение от 0 до 15. Для записи значений от 10 до 15 принято использовать следующие символы: a - 10, b - 11, c - 12, d - 13, e - 14 и f - 15.

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

Например:

1.5332.24e-12 // Экспоненциальная форма записи литерала

Литералы с плавающей точкой могут использоваться для инициализации значений переменных вещественного типа (float, double или long double).

Преобразование типов в языке C++

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

Для явного приведения типов можно использовать две формы записи:

· без указания дополнительной информации для преобразования типа (перед преобразуемой переменной в скобках указывается имя типа, к которому она приводится).

Например:

std::cout <<"strlen="<<(long)strlen(pArr1);

· с указанием дополнительной информации для преобразования типа (используются операторы static_cast, dynamic_cast, reinterpret_cast и const_cast).

Например:

std::cout <<"strlen="<<static_cast<long>( strlen(pArr2));

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

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

  • static_cast - выполняет преобразование родственных типов;
  • const_cast - выполняет приведение константных выражений;
  • dynamic_cast - используется для динамического преобразования типа, реализуемого на этапе выполнения;
  • reinterpret_cast - выполняет преобразование не связанных между собой типов.

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



<== предыдущая лекция | следующая лекция ==>
Операторы исключений | Типы данных языка Object Pascal


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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