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

Понятие переменной в программировании. Виды и типы переменных (Классификация переменных)

Содержание:

Введение

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

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

1. Классификация переменных

1.2. Статические и динамические переменные

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

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

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

1.3. Локальные и глобальные переменные.

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

Локальные переменные создаются при вызове функции и разрушаются при выходе из неё. То же самое можно сказать и о памяти, выделяемой для локальных переменных: при вызове функции в неё записываются соответствующие значения, а при выходе из функции память освобождается. Это означает что локальные переменные не поддерживают своих значений между вызовами функций. (Другими словами, значение локальной переменной теряется при каждом возврате из функции.)

Глобальные переменные известны всей программе.

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

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

1.4. Простые и сложные переменные

По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).

Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».

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

Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).

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

Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная — единая ячейка памяти, хранящая вещественное число.

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

работа с объектами осуществляется с помощью конструкций языка;

внутреннее представление значений объектов может зависеть от реализации транслятора (компилятора или интерпретатора) и от платформы;

объекты не включают в себя другие объекты и служат основой для построения других объектов (см. составной (сложный) тип).

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

Как правило, к простым относятся числовые типы:

целочисленные типы:

типы для хранения целых чисел с разной точностью;

типы для хранения символов строк;

тип для хранения значений true и false;

тип для хранения одного значения из конечного множества;

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

типы для хранения вещественных чисел с разной точностью;

и другие.

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

Введение простых типов преследовало несколько целей:

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

предотвращение логических ошибок (ошибок программиста), связанных с применением к данным несвойственных им команд;

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

Большинство языков программирования содержат предопределённые функции для работы с простыми типами:

функция для получения знака числа;

функция для получения модуля числа;

функция для проверки чётности/нечётности числа;

функции для получения целой и дробной частей вещественного числа;

функции для приведения типов с округлением или без.

Некоторые языки (например, C и C++) не ограничивают программиста в выборе способа обработки значений простых типов, даже позволяют определить поля для простого типа.

Сложный (составной) тип — тип данных, объекты (переменные или постоянные) которого имеют внутреннюю структуру, доступную программисту.

В разных языках программирования набор базовых сложных типов может несколько отличаться (чаще по названию и деталям реализации). Есть, однако, объективные критерии — однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов (названия приводятся на примере Pascal, в котором Н.Вирт наиболее чётко сформулировал эти идеи).

Массив (array) — элементы только однотипные, доступ произвольный;

Запись (record) — элементы возможно разных типов, доступ произвольный;

Файл (file) — элементы однотипные, доступ последовательный (примечание: не путать с дисковым файлом!).

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

Очень важной идеей, также родившейся на границе 60-70-х годов XX века, является возможность произвольного конструирования нужных структур из небольшого набора предопределённых типов. Чем адекватнее программист смоделировал обрабатываемые данные в рамках такого «конструктора», тем без ошибочнее и долговечнее будет разработанная программа.

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

Определенно семь основных типов данных: целочисленный, символьный, символьный двубайтовый, с плавающей точкой, с плавающей точкой двойной точности, логический. Для объявления переменных этих типов используется: int, char, wchar_i, int, float, double, bool и void. Типичный размеры значений в битах и диапазоны представления для каждого типа приведены в табл. 1

табл 1.

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

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

Переменные типа char используются для хранения 8-разрядных ASCII-символов (например, букв A, B или C) либо любых других 8-разрядных значений. Чтобы задать символ, необходимо заключить его в одинарные кавычки. Тип wchar_t (используется только для C++ и C) предназначен для хранения символов, входящих в состав больших символьных наборов. Вероятно, вам известно, что в некоторых естественных языках (например, китайском) определено очень большое количество символов, для которых 8-разрядное представление (обеспечиваемое типом char) весьма недостаточно. Для решения проблем такого рода в язык C++ и был добавлен тип wchar_t.

Переменные типа int позволяют хранить целые числа (не содержащие дробных компонентов). Такие переменные часто используются для управления циклами и в условных инструкциях. К переменным типа float и double обращаются либо для обработки чисел с дробной частью, либо при необходимости выполнения операций над очень большими или очень малыми числами. Типы float и double различаются значением наибольшего и наименьшего числа, которые можно хранить с помощью переменных этих типов. Как показано в табл. 1, тип double в C++ позволяет хранить число, приблизительно в десять раз превышающее значение типа float из-за чего double более точно считает математические примеры.

Тип bool предназначен для хранения булевых значений. В программирование определены две булевы константы: true и false, являющиеся единственными значениями, которые могут иметь переменные типа bool.

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

Общий формат инструкции объявления переменных выглядит так:

Тип переменная (через запятую);

Здесь тип означает допустимый тип данных, а элемент переменная может состоять как из одного, так и из нескольких имен, на основе C++ пример представление переменных

int a, b, c, d;

char ch, sad, dsa;

float x, e, t, y;

double d;

Модификаторы типов

Перед такими типами данных, как char, int, и double, разрешается использовать модификаторы. Модификатор служит для изменения значения базового типа, чтобы он более точно соответствовал конкретной ситуации. Перечислим возможные модификаторы типов.

signed, unsigned, long, short. Модификаторы signed, unsigned, long и short можно применять к целочисленным базовым типам. Кроме того, модификаторы sighed и unsigned можно использовать с типом char, а модификатор long с типом double. Все допустимые комбинации базовых типов и модификаторов для 16- и 32-разрядных сред приведен в табл 2. и в табл 3. В этих таблицах также указаны типичные размеры значений в битах и диапазоны представления для каждого типа.

Табл 2.

Изучая эти таблицы, обратите внимание на количество битов, выделяемых для хранения коротких, длинных и обычных целочисленных значений. Заметьте: что в большинстве 16-разрядных сред размер (в битах) обычного целочисленного значения совпадает с размером короткого целого. Также отметьте, что в большинстве 32-разрядных сред размер (в битах) обычно целочисленного значения совпадает с размером длинного целого.

Табл 3.

Различие между целочисленным значением со знаком и без него заключается в старшем разряде.

Инициализация переменной

Инициализация проходит с помощью оператора (присваивания) “=” затем можно вручную задать константную переменную или же сделать её динамической.

Массива

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

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

Одномерный массив

Одномерный массив представляет собой совокупность однотипных элементов, доступ к которым определяется одним индексом. Все элементы массива сохраняются в памяти последовательно, первый элемент имеет нулевой индекс (далее 1, 2, и т.д.). Индекс – это порядковый номер элемента в массиве.

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

тип_элементов имя_массива[размер_массива];

где тип_элементов – допустимый в С++ тип элементов массива;

имя_массива – идентификатор, задаваемый по тем же правилам, что и имена обычных переменных;

размер_массива – это количество элементов массива.

Примеры объявления одномерных массивов различных типов:

int a[10]; // массив из 10 элементов типа int

float array[3]; // массив из 3 элементов типа float

char mas[40]; // массив из 40 элементов типа char

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

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

int maxY, maxZ, ar[10], mas[5];

При объявлении массивов необходимо помнить, что индекс первого элемента всегда равен нулю. Допустимыми считаются значения индексов, находящиеся в диапазоне от 0 до размер_массива - 1. Например, объявление

int mas[10];

предполагает наличие десяти индексированных переменных:

mas[0] mas[1] ... mas[9]

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

Двумерные массивы

В соответствии с синтаксисом С++ в языке существуют только одномерные массивы. Однако элементами одномерного массива могут, в свою очередь, быть одномерные массивы.

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

тип_элементов имя_массива[размер1][размер2]; где

тип_элементов – допустимый в С++ тип данных;

имя_массива – идентификатор, задаваемый правилами языка;

размер1 – количество строк; размер2 – количество столбцов.

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

float b[4][3];

определяет двумерный массив (матрицу), первый индекс которого изменяется от 0 до 3, второй – от 0 до 2. Элементы этого массива можно перечислить следующим образом:

b[0][0], b[0][1], b[0][2], b[1][0],...,b[1][2],…,b[3][0], …,b[3][2]

Отметим ещё раз, что нумерация элементов по каждому из индексов начинается с нуля.

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

Заключение

Переменные в программирование используются для расчетов или введение числа, или значения в программу. Одинаковые переменные по типу, можно “собрать” в массив, тем самых увеличить их размер. Под каждый тип переменной выделяется свой объем памяти для кого-то больше для кого-то меньше, если разложить их в двух разных порядках, например: struct a{ char a; long int b; int c;}; такая структура кода с переменными займет 24 байта, на первый взгляд не особо много, но этот код нигде не используется, а вот другой пример кода схожим по смыслу, struct b{ char a; int c; long int b;}; такой код уже займет 16 байт, почему же так произошло? Дело в том что современные компьютерные операционные системы работают на базе 64 бит и память в них считывается кусками по 8 байт, такой способ экономии памяти можно уже считать оптимизацией кода, если использовать переменные правильно то код программы уже может работать лучше.

Список литературы

Переменные [https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)#%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B8_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5]

Простые переменные

[https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9_%D1%82%D0%B8%D0%BF]

Сложные переменные

[https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF]

Массивы Описание массивов [https://studfiles.net/preview/4614176/]

Двумерные массивы [https://studfiles.net/preview/5622471/page:3/]

Одномерные массивы [https://studfiles.net/preview/5622471/]