Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Понятие переменной в программировании. Виды и типы переменных в разных языках программирования.

Содержание:

Введение.

Существует довольно много различных языков программирования, но не один из них не обходится без переменных. Умение пользоваться переменными очень важно, так как без этого вы не сможете написать даже простейшую программу. Из этой работы вы узнаете, что же такое переменная и как ей пользоваться. Рассмотрим типы и виды переменных в различных популярных языках программирования, а также стековые переменные и использование стеков, структуры данных, которая упрощает работу с программой.

1. Что такое переменная

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

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

Переменная - это своего рода емкость для хранения данных. Когда информация записана в переменной (или по-другому, когда переменной присвоено значение), тогда эту информацию можно изменять, выводить в окне Web-браузера, посылать по электронной почте и т.д.

Переменная гибка:

  • в ней можно хранить информацию;
  • можно из неё извлекать информацию, что не повлияет на значение самой переменной;
  • в неё можно записать новые данные.

Причем, эти действия можно выполнять практически сколько угодно раз. По самому названию ясно, что переменная – вещь непостоянная. К примеру, в языке программирования PHP переменные содержат в себе значение или существуют исключительно во время работы скрипта. Как только завершается исполнение скрипта, так и существование переменных прекращается. То есть при переходе с одной страницы web-сайта на другую, переменных и их значений прежней страницы уже нет. Это кроме случаев, когда нужные значения специально передаются другой странице.

Переменные появились вместе с первыми языками программирования. Результат работы любой программы сводится к выполнению действий над какими-либо данными. Напомним, что память (memory) – это последовательность байтов (byte), каждый из которых принимает значения от 0 до 255. Так как байтов неимоверно много, единственный способ различать их - это присвоение каждому из них порядкового номера. Так и есть. Каждый байт оперативной памяти доступен процессору через его порядковый номер. Этот порядковый номер называется адресом байта.

Во времена, когда программы писались на машинном коде, программист должен был запоминать в какой участок памяти он записал нужное значение. Представьте, как усложнялся процесс написания программы, когда возникала необходимость работы с несколькими значениями. Адрес байта памяти есть число, которое мало о чем говорит. Большой объем памяти создает трудности программисту.

С первыми языками программирования появилась полезная возможность связывания определенного участка оперативной памяти с символьным названием (набором символов). По сравнению с адресом название переменной может отражать содержимое этого участка памяти. Но имя переменной не единственная вещь, которая определяет переменную. Процессор может обрабатывать три вида данных: байт, слово и двойное слово. (?) (Термины «слово» и «двойное слово» здесь используются в узкоспециальном смысле, отражая собой размер участка памяти, выделенного под переменную.) Поэтому определение вида переменной в языках нижнего и среднего уровней происходит обычно указанием типа переменной. Эти два свойства переменной (название и тип) определяют нужный участок памяти и способ его использования. В большинстве случаев именно тип переменной определяет сколько байтов памяти захватит переменная. Например, переменной типа BYTE присвоено имя A. Процессор по названию переменной (А) определяет её место в памяти и при извлечении значения этой переменной воспользуется командой, предназначенной для извлечения байта (не слова и не двойного слова).

В общем случае, переменная – это поименованный участок оперативной памяти, используемый для временного хранения данных. В зависимости от языка программирования, объявление переменной может сопровождаться указанием его типа. Обычно в языках высокого уровня тип не указывается. Синтаксические различия между языками проявляются как раз в объявлении переменных. В C и C++ необходимо указывать тип, в PHP используется префикс $.

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

Вот некоторые требования к имени переменной:

  • Переменная может содержать лишь прописные, заглавные буквы латинского алфавита, цифры и знак подчеркивания: _. Все остальные знаки препинания, включая пробел - запрещены.
  • Имя переменной не может начинаться с цифры.
  • Имя переменной чувствительно к регистру. И поэтому: name, Name, nAme, naMe и т. д. будут расценены программой, как не одна, а несколько переменных.
  • Они не могут писаться так же, как зарезервированные слова языка С++: and, and_eq, asm, auto, bitand, bitor, bool, break, case,catch, char, class,compl, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, not, not_eq, operator, or, or_eq, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while, xor, xor_eq.

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

Если раньше программы были небольшие и их исходный код располагался в одном файле, то сейчас текст кода может состоять из нескольких файлов. И запомнить уникальное имя каждой переменной, использующейся в программе, становится практически невозможным. Поэтому (и не только) было введено понятие области действия (или области существования) переменных. Область действия – понятие абстрактное. Это понятие применяется только в языках среднего и высокого уровней. Целью применения области действия является разделение пространства имен на несколько независимых частей. Так в программе могут существовать несколько переменных с одинаковыми именами и типами, не мешаю друг другу. Начинающему идея разделения области действия в пределах отдельных файлов исходного кода программы должна быть более понятна. Например, этот подход используется в PHP. Это означает, что переменная, объявленная в одном файле, может быть абсолютно недоступна в других файлах. Например, мы можем объявить переменную с именем "VarX" в нескольких файлах проекта, и это не будет ошибкой.

Таким образом, переменная в программировании обладает следующими характеристиками:

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

2. Типы переменных

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

2.1. Типы переменных в языке программирования Pascal

Тип

Структурный

Простой

Порядковый

Вещественный

  • Массив
  • Строка
  • Запись
  • Множества
  • Файл
  • Указатель

Стандартный

  • Перечисление
  • Отрезок
  • Вещественный
  • Одинарной точности
  • Двойной точности
  • Расширенный
  • Большое целое
  • Целое
  • Короткое целое
  • Длинное целое
  • Слово
  • Байт
  • Булевский
  • Символ

На схеме изображена классификация типов переменных в Pascal.

Рассмотрим подробнее каждый из них.

1. Структурные переменные.

2. Простые (скалярные) переменные - описывают упорядоченные наборы значений.

Делятся на:

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

Характеристики вещественных типов переменных в Паскале

Название

Обозначение

Количество десятизначных цифр

Диапазон изменеия порядка

Длина внутреннего представления, байт

Вещественный

Real

11...12

-39...+38

6

Одинарной точности

Single

7...8

-45...+38

4

Двойной точности

Double

15...16

-324...+308

8

Расширенный

Extended

19...20

-4951...+4932

10

"Большое целое"

Comp

19...20

-263+1...263-1

8

б) Порядковые типы переменных - набор значений, имеющий начало и конец. Делятся на:

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

Var X: (Mon, The, Wed, Thu, Fri, Set, Sun);...{переменная X может принимать только указанные значения};

Во внутреннем представлении значения данного типа кодируются целыми числами (начиная с 0). Таким образом, идентификатору Mon будет соответствовать значение 0, The - 1, Wed - 2 и т. д. Объявляя переменную перечисляемого типа сначала описывают новый тип, затем саму переменную. Например:

Type: Day=(Mon, The, Wed, Thu, Fri, Set, Sun); {объявление нового типа}

Var X: Day; ... {объявление переменной данного типа}

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

Type Data=1...31; {диапазон одного из целых типов}

Var DataX: Data;...

Или эту же переменную можно объявить таким образом:

Var DataX:1...31;...

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

Тип

Идентификатор типа

Type

  • Целые типы - в таблице приведены значения целых типов переменных:

Название

Обозначение

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

Длина внутреннего представления, байт

Целое

Integer

-32768...32767

2 (со знаком)

Короткое целое

ShortInt

-128...127

1 (со знаком)

Длинное целое

LongInt

-231...231-1

4 (со знаком)

Байт

Byte

0...255

1 (без знака)

Слово

Word

0...65535

2 (без знака)

  • Булевский тип Boolean включает только два значения - false (0) и true (1), в памяти значения этого типа занимают целый байт;
  • Символ или тип Char определяет набор символов по таблице ASCII (в таблице указаны 255 кодов, для большинства существует символьное представление, например буквы русского и латинского алфавита, специальные знаки - точка, запятая и др.).

2.2. Типы переменных в C/С++

Тип

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

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

Char

1

От -128 до 127

Unsigned char

1

От 0 до 255

Short

2

От -32768 до 32767

Unsigned short

2

От 0 до 65536

Enum

2

От -2147483648 до 2147483647

Long

4

От -2147483648 до 2147483647

Unsigned long

4

От 0 до 4294967295

Int

4

От -2147483648 до 2147483647

Unsigned int

4

От 0 до 4294967295

Float

4

От 3,4*10-38 до 3,4*1038

Long float

8

От 1,7*10-308 до 1,7*10308

Double

8

От 1,7*10-308 до 1,7*10308

Long Double

10

От 3,4*10-4932 до 1,1*104932

Bool

1

true или false

  • Int

Целые числа переменные в C++ обозначают типом int. Из-за того, что INT это целые числа при различных операциях с числами очень часто возникают ошибки.

Переменные типа int имеет ограниченный диапазон возможных ее значений. Максимальным значением обычной целочисленной переменной является число 2 147 483 647, минимальным — -2 147 483 648, т.е. общий диапазон —около 4 млрд. чисел.

  • Float

Как известно переменные типа int делают невозможным их использование приложениями. Но C++ умеет работать и с действительными числами, которые могут иметь ненулевую дробную часть. Используя действительные числа, можно избежать большинства проблем. Заметьте, что десятичные числа могут иметь ненулевую дробную часть, а могут и не иметь, оставаясь действительными.
В C++ число 1.0 является таким же действительным числом, как и 1.5. Эквивалентным им целым числом является просто 1.
В C++ действительные числа определены как числа с плавающей точкой.
Действительные переменные объявляются так же, как и переменные

Тип данных float тоже ограничен, диапазон чисел намного обширнее диапазона целочисленных переменных. Максимальное значение переменной типа float приблизительно равно 1 с 38 нулями.
Представляя переменные в стандартном виде, C++ учитывает после десятичной точки только первые шесть разрядов, а остальные округляются. Поэтому действительная переменная может хранить значение 111 000 000 без потери точности из-за округления, а значение 111 234 532 приведет к ошибке округления.

  • Double

В случае двойной точности, задаваемой с помощью ключевого слова double, для хранения значений используется 64 бита. Все трансцендентные математические функции, такие, как sin, cos, sqrt, возвращают результат типа double.

  • Long

Тип long предназначен для представления 64-битовых чисел со знаком. Его диапазон допустимых значений достаточно велик даже для таких задач, как подсчет числа атомов во вселенной.

  • Short
    Short — это знаковый 16-битовый тип. Его диапазон — от -32768 до 32767. Это, вероятно, наиболее редко используемый в Java тип, поскольку он определен, как тип, в котором старший байт стоит первым.
  • Char

Тип данных char - это целочисленный тип данных, который используется для представления символов. То есть, каждому символу соответствует определённое число. Тип данных char также ещё называют символьным типом данных, так как графическое представление символов в С++ возможно благодаря char. Для представления символов в C++ типу данных char отводится один байт, в одном байте — 8 бит, тогда возведем двойку в степень 8 и получим значение 256 — количество символов, которое можно закодировать. Таким образом, используя тип данных char можно отобразить любой из 256 символов. Все закодированные символы представлены в таблице ASCII. 

  • Enum

Enum - это тип перечисления. В enum записываются константы и каждой новой константе присваивается порядковый номер. Используется в первую очередь для улучшения читаемости кода.

  • Bool

Тип данных bool - логический тип данных. Bool используется исключительно для хранения результатов логических выражений. У логического выражения может быть один из двух результатов true или false. True - если логическое выражение истинно, false - если логическое выражение ложно.

2.3. Типы переменных в PHP

PHP поддерживает восемь простых типов данных (переменных):

Четыре скалярных типа:

  • boolean (двоичные данные)
  • integer (целые числа)
  • float (числа с плавающей точкой или 'double')
  • string (строки)

Два смешанных типа:

  • array (массивы)
  • object (объекты)

Два специальных типа:

  • resource (ресурсы)
  • NULL ("пустой" тип)

Существуют также несколько псевдотипов:

  • mixed (смешанный)
  • number (числовой)
  • callback (обратного вызова)
  • Boolean (двоичные данные)

Это простейший тип. Также как и С++ и Pascal Он выражает истинность значения - это может быть либо TRUE, либо FALSE. Булев тип был введен в PHP 4.

Чтобы определить булев тип, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.

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

  • Integer (целые числа)

Целые числа, обычно длиной 32 бита (от –2 147 483 648 до 2 147 483 647).

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

Если вы используете восьмеричную систему счисления, вы должны предварить число 0 (нулем), для использования шестнадцатеричной системы нужно поставить перед числом 0x.

  • Float (числа с плавающей точкой или 'double')

Double - вещественное число довольно большой точности (ее должно хватить для подавляющего большинства математических вычислений).

  • String (строки)

Строка в PHP - это набор символов любой длины. В отличие от Си, строки могут содержать в себе также и нулевые символы, что никак не повлияет на программу. Иными словами, строки можно использовать для хранения бинарных данных. Длина строки ограничена только размером свободой оперативной памяти.

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

  • Array (массивы)

Массив в PHP - это упорядоченный набор данных, в котором установлено

соответствие между значением и ключом.

Индекс (ключ) служит для однозначной идентификации элемента внутри массива. В одном массиве не может быть двух элементов с одинаковыми индексами.

PHP позволяет создавать массивы любой сложности. Рассмотрим некоторые из них:

  • Простой массив (список)

Массивы, индексами которых являются числа, начинающиеся с нуля.

  • Ассоциативные массивы

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

Массивы, индексами которых являются строки, называются ассоциативными массивами. Индексы ассоциативных массивов называются ключами.

  • Многомерные массивы

Для создания массивов в PHP существует специальная инструкция array(). Ее удобно использовать для создания многомерных массивов. Многомерные массивы похожи на записи в языке Pascal или структуры в языке C.

  • Object (объекты)

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

Для инициализации объекта используется выражение new, создающее в переменной экземпляр объекта.

  • Resource (ресурсы)

Ресурс - это специальная переменная, содержащая ссылку на внешний ресурс. Ресурсы создаются и используются специальными функциями. 

  • NULL ("пустой" тип)

Специальное значение NULL говорит о том, что эта переменная не имеет значения. NULL - это единственно возможное значение типа NULL (пустой тип).

Переменная считается NULL если:

ей была присвоена константа NULL;

ей еще не было присвоено какое-либо значение;

она была удалена с помощью unset().

  • Mixed (смешанный)

mixed говорит о том, что параметр может принимать множество (но не обязательно все) типов.

gettype(), например, принимает все типы PHP, тогда как str_replace() принимает строки и массивы.

  • Number (числовой)

number говорит о том, что параметр может быть либо integer, либо float.

  • Callback (обратного вызова)

PHP-функция передается просто как строка ее имени. Вы можете передать любую встроенную или определенную пользователем функцию за исключением array(), echo(), empty(), eval(), exit(), isset(), list(), print() и unset()

3. Объявление переменных

В разных языках программирования объявление переменных несколько отличается, рассмотрим как объявляются переменные в языке Си

3.1. Объявление простой переменной

Синтаксис:

<спецификация типа> <идентификатор> [,<идентификатор>…];

Объявление простой переменной определяет имя переменной и ее тип. Имя переменной задается <идентификатором>. <Спецификация типа> задает тип переменной. Тип может быть базовым типом, либо типом структура, либо типом объединение. Если спецификация типа опущена, предполагается тип int.

Можно объявить несколько переменных в одном объявлении, задавая список <идентификаторов>, разделенных запятыми. Каждый <идентификатор> в списке именует отдельную переменную. Все переменные, заданные в таком объявлении, имеют одинаковый тип.

3.2. Объявление переменной перечислимого типа

Синтаксис:

enum [<тег>]{<список-перечисления>} <описатель>[,<описатель>…];

enum <тег> <идентификатор> [<идентификатор>…];

Объявление переменной перечислимого типа задает имя переменной и определяет список именованных констант, называемый списком перечисления. Каждому элементу списка перечисления ставится в соответствие целое число. Переменная перечислимого типа может принимать только значения из своего списка перечисления. Элементы списка имеют тип int. Поэтому переменной перечислимого типа выделяется ячейка памяти, необходимая для размещения значения типа int. Перечислимый тип, таким образом, представляет собой подмножество целого типа. Над объектами перечислимого типа определены те же операции, что и над объектами целого типа.

<Описатель> специфицирует либо переменную перечислимого типа, либо указатель на значение перечислимого типа, либо массив элементов перечислимого типа, либо функцию, возвращающую значение перечислимого типа, либо более сложный объект, являющийся комбинацией перечисленных типов.

Объявление переменной перечислимого типа начинается с ключевого слова enum и имеет две формы представления.

В первой форме задается список перечисления, содержащий именованные константы. Необязательный <тег> — это идентификатор, который именует перечислимый тип, специфицированный данным списком перечисления, <идентификатор> — это имя переменной перечислимого типа. В одном объявлении может быть описано более одной переменной данного перечислимого типа.

Во второй форме объявления список перечисления отсутствует, однако используется <тег>, который ссылается на перечислимый тип, объявленный в другом месте программы. Если заданный тег ссылается на неизвестный перечислимый тип либо область действия определения этого перечислимого типа не распространяется на текущий блок, то компилятор языка Си сообщает об ошибке. Допускаются объявление указателя на перечислимый тип и объявление typedef для перечислимого типа, использующие тег ранее не определенного перечислимого типа. Однако этот тип должен быть определен к моменту использования этого тега или типа, объявленного посредством typedef.

<Список-перечисления> содержит одну или более конструкций вида:

<идентификатор> [=<константное-выражение>]

Конструкции в списке разделяются запятыми. Каждый <идентификатор> именует элемент списка перечисления. По умолчанию, если не задано <константное-выражение>, первому элементу присваивается значение 0, следующему элементу—значение 1 и т. д. Элемент списка перечисления является константой.

Запись =<константное-выражение> изменяет умалчиваемую последовательность значений. Элемент, идентификатор которого предшествует записи =<константное-выражение>, принимает значение, задаваемое этим константным выражением. Константное выражение должно иметь тип int и может быть как положительным, так и отрицательным. Следующий элемент списка получает значение, равное <константное-выражение>+1, если только его значение не задается явно другим константным выражением.

В списке перечисления могут содержаться элементы, которым сопоставлены одинаковые значения, однако каждый идентификатор в списке должен быть уникальным. Например, двум различным идентификаторам null и zero может быть задано значение 0 в одном и том же списке перечисления. Кроме того, идентификатор элемента списка перечисления должен быть отличным от идентификаторов элементов всех остальных списков перечислений с той же областью действия, а также от других идентификаторов с той же областью действия. Тег перечислимого типа должен быть отличным от тегов других перечислимых типов, структур и объединений с той же самой областью действия.

3.3. Объявление структуры

Структура позволяет объединить в одном объекте совокупность значений, которые могут иметь различные типы. Однако в языке Си реализован очень ограниченный набор операций над структурами как единым целым: передача функции в качестве аргумента, возврат в качестве значения функции, получение адреса. Можно присваивать одну структуру другой, если они имеют одинаковый тег.

Синтаксис:

struct [<тег>] {<список-объявлений-элементов>} <описатель> [,<описатель>…];

struct <тег> <описатель> [,<описатель>…];

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

Объявление структуры начинается с ключевого слова struct и имеет две формы записи, как показано выше. В первой форме типы и имена элементов структуры специфицируются в списке объявлений элементов. Необязательный в данном случае <тег> — это идентификатор, который именует структурный тип, определенный данным списком объявлений элементов.

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

Вторая синтаксическая форма объявления использует тег структуры для ссылки на структурный тип, определенный где-то в другом месте программы. В этой форме объявления список объявлений элементов отсутствует. Объявление должно находиться в области действия данного тега, т. е. определение структурного типа, именованного тегом, должно предшествовать объявлению, использующему этот тег, за исключением двух случаев: когда тег используется для объявления либо указателя на структуру, либо структурного типа в typedef. Однако при этом определение структурного типа должно предшествовать использованию данного указателя либо типа, объявленного посредством typedef.

Список объявлений элементов представляет собой последовательность из одного или более объявлений переменных. Каждая переменная, объявленная в этом списке, называется элементом структуры. Особенность синтаксиса объявлений переменных в списке состоит в том, что они не могут содержать спецификаций класса памяти и инициализаторов. Элементы структуры могут иметь базовый тип, либо быть массивом, указателем, объединением или, в свою очередь, структурой.

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

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

Элементы структуры запоминаются в памяти последовательно в том порядке, в котором они объявляются: первому элементу соответствует меньший адрес памяти, а последнему — больший.

3.4. Объявление объединения

Объединение позволяет в разные моменты времени хранить в одном объекте значения различного типа. В процессе объявления объединения с ним ассоциируется набор типов значений, которые могут храниться в данном объединении. В каждый момент времени объединение может хранить значение только одного типа из набора. Контроль над тем, какого типа значение хранится в данный момент в объединении, возлагается на программиста. Синтаксис:

union [<тег>] {<список-объявлений-элементов>} <описатель> [,<описатель>…];

union <тег> <описатель> [,<описатель>…];

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

Объявление объединения имеет тот же синтаксис, что и объявление структуры, за исключением того, что оно начинается с ключевого слова union, а не с ключевого слова struct. 

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

3.5. Объявление массива

Синтаксис:

[<спецификация типа]> <описатель> [<константное выражение>];

[<спецификация типа]> <описатель> [];

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

Массив позволяет хранить как единое целое последовательность переменных одинакового типа. Объявление массива определяет тип элементов массива и его имя. Оно может определять также число элементов в массиве. Переменная типа массив участвует в выражениях как константа - указатель на значение заданного спецификацией типа. Если спецификация типа опущена, предполагается тип int.

Объявление массива может иметь одну из двух синтаксических форм, указанных выше. Квадратные скобки, следующие за <описателем>, являются признаком типа массив. Если <описатель> представляет собой идентификатор (имя массива), то объявляется массив элементов специфицированного типа. Если же <описатель> представляет собой более сложную конструкцию, то каждый элемент массива имеет тип, заданный совокупностью <спецификации типа> и оставшейся части описателя. Это может быть любой тип, кроме типов void и функция. Таким образом, элементы массива могут иметь базовый, перечислимый, структурный тип, быть объединением, указателем или, в свою очередь, массивом.

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

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

Многомерный массив, или массив массивов, объявляется путем задания последовательности константных выражений в квадратных скобках, следующей за описателем:

<спецификация типа> <описатель> [<константное выражение>] {<константное выражение>]…;

Каждое константное выражение в квадратных скобках определяет число элементов в данном измерении массива, поэтому объявление двумерного массива содержит два константных выражения, трехмерного — три и т. д.

4. Стек и стековые переменные

Стек характерен тем, что получить доступ к его элементам можно лишь с одного конца, называемого вершиной стека; иначе говоря: стек – структура данных типа «список», функционирующая по принципу LIFO (last in — first out, «последним пришёл — первым вышел»). Графически его удобно изобразить в виде вертикального списка, например, стопки книг, где чтобы воспользоваться одной из них, и не нарушить установленный порядок, нужно поднять все те книги, что лежат выше нее, а положить книгу можно лишь поверх всех остальных.

stek.png

Впервые стек был предложен в 1946 году Аланом Тьюрингом, как средство возвращения из подпрограмм. В 1955 году немцы Клаус Самельсон и Фридрих Бауэр из Технического университета Мюнхена использовали стек для перевода языков программирования и запатентовали идею в 1957 году. Но международное признание пришло к ним лишь в 1988 году.

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

Стек, чаще всего, реализуется на основе обычных массивов, односвязных и двусвязных списков. В зависимости от конкретных условий, выбирается одна из этих структур данных.

Основными операциями над стеками являются:

  • добавление элемента;
  • удаление элемента;
  • чтение верхнего элемента.

В языках программирования эти три операции, обычно дополняются и некоторыми другими. Вот, например, список функций C++ для работы со стеком:

  • push() – добавить элемент;
  • pop() – удалить элемент;
  • top() – получить верхний элемент;
  • size() – размер стека;
  • empty() – проверить стек на наличие элементов.

Данные функции входят в стандартную библиотеку шаблонов C++ – STL, а именно в контейнер stack. Далее будет рассмотрен пример работы с контейнером stack, а пока разберем стек, реализованный на основе массива.

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

  • Creation() – создание пустого стека;
  • Full() – проверка стека на пустоту;
  • Add() – добавление элемента;
  • Delete() – удаление элемента;
  • Top() – вывод верхнего элемента;
  • Size() – вывод размера стека.

Как таковых пользовательских операций тут всего четыре: Add, Delete, Top, Size. Они доступны из консоли. Функция Creation – создает пустой стек сразу после запуска программы, а Full проверяет возможность выполнения пользовательских операций.

Многие языки программирования располагают встроенными средствами организации и обработки стеков. Одним из них, как подчеркивалось ранее, является C++. Разберем принципы функционирования контейнера stack стандартной библиотеки шаблонов STL. Во-первых, stack – контейнер, в котором добавление и удаление элементов осуществляется с одного конца, что свойственно непосредственно стеку. Использование стековых операций не требует их описания в программе, т. е. stack здесь предоставляет набор стандартных функций. Для начала работы со стеком в программе необходимо подключить библиотеку stack:

#include <stack>

и в функции описать его самого:

stack <тип данных> имя стека;

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

ЗАКЛЮЧЕНИЕ

Список использованной литературы

1. Фаронов В.В. Турбо Паскаль 7.0. Учебный курс. Учебное пособие. М., 2009.

2. Березин Б.И., Березин С.Б. Начальный курс С и C++. — М.: ДИАЛОГ-МИФИ, 2005.

3. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник. - М.: Мастерство, НМЦ СПО; Высшая школа, 2004

4. Окулов С.М. Основы программирования. - М.: ЮНИМЕДИАСТАЙЛ, 2002.

5. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования: Учебник для сред. проф. образования / И.Г. Семакин, А.П. Шестаков. - М.: Издательский центр "Академия", 2008

6. Культин Н.Б.: С/С++ в задачах и примерах. - СПб: БХВ-Петербург, 2011

7. Под ред. проф. Н.В. Макаровой: Информатика и ИКТ. . - СПб.: Питер, 2011

8. Кузнецов М.В.: PHP 5/6. - СПб.: БХВ-Петербург, 2010

9. Гуда А.Н.: Информатика и программирование. - М.: Дашков и К, 2010

10. Павловская Т.А. : С/С++. Структурное и объектно-ориентированное программирование. - СПб.: Питер, 2010

11. Павловская Т.А.: Паскаль. Программирование на языке высокого уровня. - СПб.: Питер, 2010

12. Могилев А.В.: Информатика. - М.: Академия, 2008