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

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

Содержание:

Введение

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

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

Глава 1. Переменные

Переменная в математике - это, значение, известность которого не сдержано каким-либо числом. Такой подход схож с тем, что обозначает переменная в системе Си. В математике для утверждения переменной часто используют разные буквы, на подобие x или y, а в Си постоянно используется слово, которое описывает переменную, например, temperature и Number of samples. Так же имеют место быть такие моменты, в которых для определения величины используется переменная Си, которая является заведомо известной и не подходящей под отличие исходного вида.

Основными процессорами под работу разработчиков чаще всего попадают 8-разрядные. В таких устройствах главный размер данных всегда состоит из одного байта[1]. Организация памяти создана по типу байтов, размер одного из регистров будет составлять один байт, в то время как сам процессор нужен для работы над 8-разрядными данными. Такое разграничение является очень неудобным для работы программиста, так как он сталкивается с максимальным превышением значения переменной 8-разрядного числа.

Размер одной переменной в языке Си не останавливается на 8 битах и в то время, когда программист трудится с 8-разрядным процессором. Таким образом получается, что всего одна переменная в пользовательской прошивке будет подходить сразу нескольким регистрам[2] или ячейкам памяти[3]. Непосредственный контроль над многобайтовыми переменными, используя ассемблер, не является чем-то особенным.

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

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

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

  1. Именем [4]
  2. Значением [5]
  3. Имена и типы переменных [6]

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

Отличным стилем является осмысленное именование переменных. Можно использовать строчные и прописные буквы, цифры и символ подчёркивания, который в Си считается буквой. Начальным символом обязательно нужно сделать букву, в имени переменной не должно быть пропусков. В новых версиях компиляторов длина имени почти не ограничена. Имя переменной не должно совпадать с занятыми главными словами. Заглавные и строчные буквы в именах переменных отличаются, переменные a и A - разные переменные.

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

При объявлении переменной компилятор оставляет ей место в памяти, смотря какой у неё типа. Обычными средствами AVR GCC работает с типами данных char (символьный тип) и int (целочисленный тип). [2, c.15]

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

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

Простые типы[7];

Дискретные -можно перечислить возможные значения:

целые - integer, lоngint

символьный - char

логический - bооlean

диапазон - часть значений обычного дискретного типа, 1..100

перечисляемый

вещественные - real, dоuble, extended. Используются для представления действительных чисел с малой точностью.

Структурированные типы[8];

По наличию внутренней структуры, переменные могут быть простыми или сложными. [3 c.98, с.102]

Массив[9] и запись являются тем, что указывает на сложность типа. Нужно отметить относительность данного разделения для отдельных программ, так как одна переменная может включать в себя разные строения. Например, компилятор будет различать внутри переменной вещественного типа всего 4 поля: знаки мантиссы и порядка, к ним прибавится их значение, но для пользователя, компилирующего данную программу, вещественная переменная – это общая ячейка памяти, которая хранит вещественное число. Мономерный массив можно выявить как итог абстрактного вида данных- вектор.

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

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

В простейшем случае массив имеет константную длину по всем размерностям и может хранить данные только одного, заданного при описании, типа. Ряд языков поддерживает также динамические массивы, длина которых может изменяться по ходу работы программы, и гетерогенные массивы, которые могут в разных элементах хранить данные различных типов. [2 c.98]

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

Машинный код, компьютерный язык - комплект команд определенной вычислительной машины, которая представляется конкретным процессором либо микропрограммами данной вычислительной машины. [5 c. 12]

Компьютерная программа, которая написана на машинном языке и создана из машинных руководств, любая из них показана в машинном коде в облике опкода[10]. Для более удобного программирования вместо числовых опкодов, которые в свою очередь только воспринимает процессор, обычно используют их относительные буквенные мнемоники. Комплект таковых мнемоник, совместно с разными другими способностями, такими как макрокоманды, именуется языком ассемблера.

Любая модель процессора владеет собственным комплект команд, хотя почти во всех моделях данные комплекты команд легко заменяются. Возможно такое что, процессор A имеет совместимость с процессором B, если же все-таки процессор A вполне «понимает» механический код процессора B. Так же, если процессоры A и B могут иметь возможное подмножество правил, с помощью которых они могут быть совместимы, в таких случаях можно сказать, что они одной «архитектуры» набора команд.

Абсолютный код - программный код, используемый для непосредственной работы над процессором, это значит, что код не требует лишних действий со стороны пользователя. Как пример такого кода можно привести - исполнимые файлы, которые должны быть в формате, COM и загрузчик ОС, находящийся в MBR, зачастую такой код бывает воспринят в меньшей степени, как позиционно-зависимый код[11]. Это значит, что его можно привязать к адресам памяти.

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

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

Метка записывается следующим образом:

С самого начала идет название метки, затем двоеточие ( : ), затем данные, доступ к которым будет осуществляться с помощью названия метки.

Ассемблеры[12], как и сам язык, будут особенны для определенного строения, ОС и варианта синтаксиса языка. Так же существуют многозадачные и межплатформенные ассемблеры. Они имеют свойство работать на различных платформах. Из межплатформенных можно выделить несколько кросс-ассемблеров, которые могут компьютерный код и исполняемые файлы для разных архитектур и операционных систем.

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

Языки программирования, которые преподносятся, как низкоуровневые, это те языки, которые стоят рядом с программированием в самом машинном коде, который может использоваться как для реального, так и для виртуального процессора. Чаще всего для того, чтобы назначить машинные команды, используют мнемоническое обозначение. Что дает возможность сохранять команды в виде уже понятных нам сокращений, на английском языке. Бывает так, что одно мнемоническое значение сопоставляется одной группе машинных команд, которые обязаны сделать одно и то же действие по отношению к различным ячейкам памяти. Помимо этих команд низкоуровневые языки предоставляют еще некоторые возможности, например, макросы[13]. Используя некоторые директивы, появляется возможность для управления процессом передачи машинных кодов, давая шанс записывать константы и литеральные строки, запасать память для переменных и размещать выполняемый код по назначенным адресам. В менее редких случаях такие дают возможность работать не с ячейками памяти для переменных. [1, с.405]

Зачастую, используются специальности определенных видов процессоров. Всем знакомый пример низкоуровневого языка – это язык, на ассемблере, но более правильно будет говорить о целой группе таких языков. Так же для одного процессора разработаны разные виды ассемблера. Они будут одинаковы в машинных командах, но различны в наборе новых функций. Еще к таким языкам, относятся CIL, применяемый в платформе Microsoft.

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

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

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

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

В языке Лисп[14], благодаря хорошо развитой макросистеме, макропрограммирование, дает возможность разнообразить этот язык совершенно новыми для него функциями. Так получается, что макросы помогают оператору распознать предметно-ориентированный язык как раз для задачи решаемой в данный момент времени и процессор для него. Процессор в этом случае имеет смысл программы, которая создает типы данных другого языка на его языке. При помощи такого программирования появляется возможность запустить работу компилятора. Вместе с языком создатель прошёл полный процесс фундаментальной стандартизации, чтобы для использования военного дела и промышленности, после чего создался диалект Common Lisp, затем поставленный в стандарт ANSI. Он создан для большого количества платформ. [3 c.188]

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

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

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

Так же служит языком системного программирования для так Лисп-машин, которые производились в 1980-е годы.

Тип char

char – это самый экономичный тип. char может быть знаковым и не использовать их вовсе. Обозначается, как "signed char" и "unsigned char", соответственно. Знаковый тип должен содержать значения от -128 до +127. Без знаковый - от 0 до 255. Для переменной char выделяют 1 байт памяти.

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

Тип int

Цельная величина int может быть shоrt или lоng .

Основное слово shоrt ставится после основных слов signed или unsigned. Таким образом, имеют различие такие типы, как: signed shоrt int, unsigned shоrt int, signed lоng int, unsigned lоng int.

Переменная типа signed shоrt int может принять значение от -32768 до +32767, unsigned shоrt int (без знаковая короткая целая) - от 0 до 65535. Для каждой из них выделяется по два байта памяти (16 бит).

При объявлении переменной signed shоrt int основные слова signed и shоrt могут быть убраны, и данная переменная может быть объявлена, как int. Можно допустить и объявление этого типа основным словом shоrt.

Переменная unsigned shоrt int может быть объявлена как unsigned int или unsigned shоrt.

Для каждой величины signed lоng int или unsigned lоng int выделяется 4 байта памяти. Значения переменных данного типа будут находиться в интервалах от -2147483648 до 2147483647 и от 0 до 4294967295.

По типу переменных, существуют такие как: lоng lоng int, для них выделяется 8 байт памяти. Они могут быть как знаковыми, так и без знаковыми. Для знакового типа разница значений находится от -9223372036854775808 до 9223372036854775807, для без знакового - от 0 до 18446744073709551615. Знаковый тип может быть объявлен и просто двумя ключевыми словами lоng lоng.

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

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

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

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

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

1.2 Локальные и глобальные переменные. Области видимости

По области видимости различают: локальные и глобальные переменные. Первые, разрешаются только назначенной подпрограмме, вторые - полностью всей программе. С разрастанием модульного и объектного программирования, создались ещё и общие переменные (открытые для заданных уровней иерархии подпрограмм). Область видимости задаётся классном памяти. Ограничение видимости может быть сделана путём проставления пространств имен.

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

Auto - это автоматическая переменная. Они создаются только непосредственно перед входом в функцию и удаляются только при выходе. Их можно распознать исключительно внутри функции, в которых они являются определенными.

Static - это статическая переменная. Если static находится внутри функции. Такие переменные используют внутреннюю область видимости, но время жизни постоянное. Так же, static находящийся не в функции будет иметь отличающиеся значение.

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

Register – это регистровая переменная. Она нужна для подсказывания компилятору переносить много используемую переменную в регистры данного процессора, чтобы приобрести программе большую скорость. [4 c.238]

Если класс памяти все же не будет указан, то начнут действовать эти настройки:

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

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

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

Ограничение зоны видимости[15] создали для того чтобы использовать общие имена переменных (что выгодно, когда в различных подпрограммах от переменных требуются похожие функции), так и для сохранения от ошибок, вызванных из-за неправомерного использования переменных (только, для этого программист вынужден обладать и использовать подходящую логику при структуризации данных).

Область видимости в программировании - является частью программы, в рамках которой определитель, названный как имя одной программной сущности, остаётся объединенным с данной сущностью, то есть создает возможность, с помощью себя обратиться к ней. Бывает, что идентификатор объекта «виден» в каком-то одном месте программы, если в этом месте с помощью него можно обратиться к этому объекту. За границами области видимости этот самый определитель возможно будет связан с новой переменной или функцией, или будет свободным (не соединенным ни с какой из них). Область видимости может, но как правило не обязана повторяться с границей существования объекта, с которым связано имя.

Соединение идентификатора в некоторых языках программирования - процесс выяснения программного объекта, вход к которому позволяет идентификатору в данном месте программы и в определенное время её выполнения. Данное понятие похоже на область видимости, но возможно более комфортно при оценивании определенных вариантов выполнения программ.

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

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

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

  1. Статические типы указывают на то, что в работе будет задействован самый простой код. Из этого следует вывод, что они подходят для языков, которые предоставляют исполняемые файлы операционной системы и компилируемых байт-кодов.
  2. Они позволяют избежать большое количество ошибок уже в самом начале, на этапе компиляции и благодаря этой типизации можно написать быстрый код.
  3. Если выполняемый проект будет сложным и масштабным, эта типизация откроет большее преимущество и наоборот.

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

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

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

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

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

1.4 Объектно-ориентированное программирование

Объектно-ориентированное программирование [21]способ, который создан на воссоздании программы в целом виде объектов, где каждый из них является разно классовым, а классы создают иерархию наследования.

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

Управляемость для иерархических систем дает уменьшение лишней информации и их структуру, таким образом сделанное удобно контролируемым - будет и удобно восприниматься. Поэтому, сквозь главную задачу управляемости решается и вторая задача - передавать восприятие задачи пользователем в наилучшую для следующего использования вид. [2 c. 192]

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

Абстракция для выделения в моделируемом предмете необходимого для выполнения нужной задачи по предмету, в итоге - контекстное восприятие предмета, составляемое как класс;

Инкапсуляция[22] для своевременного и безопасного составления своей иерархической управляемости: чтобы сделать так, что хватит обычной простой команды «что делать», не включая множественного уточнения что делать, так как это совершенно другой уровень управления;

Наследование[23] для своевременной и безопасной организации похожих понятий: так чтобы хватило в каждом иерархическом действии просчитывать исключительно изменения, не повторяя всё остальное, записанное в предыдущих действиях;

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

Так, речь идёт о развивающейся организации информации из начальных, семантическим требований: «важное/неважное», «ключевое/подробности», «родительское/дочернее», «единое/множественное». Развитие, скорее всего, на заключительном шаге имеет шанс переноса на следующий уровень детализации, что замыкает общий процесс.

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

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

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

В программировании локальной переменной называют ту переменную, которая объявлена внутри блока кода. Ее области видимости идет с точки появления и оканчивается в финале данного блока. Например, в языке Си локальные это те переменные, которые объявлены внутри я функции или блока (ограничитель блоков в Си {и}).

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

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

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

Алгол[24] – это языки, где нет ограничения на вложенность блоков и в каждом из них будут содержаться уникальные локальные переменные.

Локальные переменные делают возможной рекурсию.

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

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

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

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

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

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

Чтобы переносить данные, не участвующие в отношениях вызовов между блоками кода, используются глобальные переменные. Если не использовать надежную блокировку, код с глобальной переменной, останется небезопасным, помимо тех переменных, которые доступны лишь для чтения, находясь в защищенной зоне памяти. Если увеличить количество переменных, а также их блокировок, то мы получаем высокую вероятность взаимных блокировок [1, с. 234].

1.5 Описание переменных

Во время начала работы программы для всех переменных, кроме динамических, необходимо выделить место в памяти ЭВМ. То есть все переменные, используемые в программе, должны быть описаны и транслятор «должен знать» о них.

Имя присваивается переменной в разделе описания переменных, например,

Var x1,x2 : Double; s2,s3 : String;

Double, String – тип переменных, x1,x2,s2,s3 – имена переменных. Имена дают возможность задать действия над переменными, например,

x2 := x1 + 10;

То, что стоит справа от :=, называется выражение. Оно вычисляется. В данном примере к значению переменной х1 прибавляется 10. Получается какой-то результат. Далее выполняется присваивание, то есть переменная х2 будет иметь значение, равное этому результату.

Элементы объектов имеют составные имена, например, Label1.Caption ;

Мы можем присвоить этому свойству некоторое значение, например: Label1.Caption := ‘Это моя ’+’программа номер ’+’5’; Label1.Caption := ‘Это моя ’+’программа номер ’+IntToStr(5);

Результат в обоих случаях одинаковый – текст метки (Label1) расположенной на форме, будет такой: Это моя программа номер 5

Апострофы здесь обозначают, что в них записано символьное (текстовое) выражение и в результате не содержатся. В первой из этих строк 5 – символьное (текстовое), а во второй – 5 – это целое число. Так как Caption хранит только символьные значения, функция IntToStr( ) преобразует это число с символьное представление.

1.6 Ввод и вывод

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

read[25](переменные);

или

readln(переменные);

При выполнении оператора программа будет остановлена, пока пользователь не введет нужное значение и не восстановит работу «Enter». После чего, эти значения будут перемещены в переменные, которые были помечены как параметры процедуры ввода. Например, во время выполнения оператора

read(a, b);

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

Операторы read и readln различны тем, что после второго ввода данных будет перемещена строка, т.е. все следующие сообщения и команды компьютера станут выводиться с новой строки. [2 c. 50]

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

write[26];

или

writeln;

Во время работы оператора высчитываются значения выражений, потом эти значения визуализируются на экран монитора. Например, во время работы оператора

write(a + b, c);

на экране можно будет увидеть сумму переменных a и b и конечно же значение переменной c. Если стоит задача вывести на экран любое сообщение, его потребуется заключить в одиночные кавычки:

write('Нет решения');

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

Глава 2. Типы области видимости

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

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

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

Локальная область видимости - опознаватель разрешен исключительно в отдельной функции (процедуры).

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

Пакет или пространство имен. В глобальной области видимости искусственно выделяется поименованная подобласть. Имя «привязывается» к этой части программы и существует только внутри неё. Вне данной области имя либо вообще недоступно, либо доступно ограниченно.

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

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

Защищённая область видимости означает, что имя доступно исключительно внутри данного класса и классов-потомков.

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

2.1 Способы задания области видимости

Область видимости переменной может зависеть только от двух нераздельных пунктов:

  • места объявления переменной;
  • ключевого слова, использованного во время объявления переменной.

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

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

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

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

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

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

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

Данный перечень не заканчивается всеми нюансами определения области видимости, которые имеются в данном языке. Так, например, можно записать разные объяснения связки модульной области видимости и объявленной видимости членов ООП-класса. В некоторых языках программирования (например, C++) объявление личной или защищённой области видимости для члена класса закрывает доступ к нему для всех кодов, не имеющих отношения к методам своего класса. В других (Оbject Pascal) все члены класса, а также личные и защищённые, полностью открыты в пределах данного модуля, в котором объявлен класс, а ограничения области видимости действуют только в модулях, переносящих данные.

Глава 3. Арифметические операции

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

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

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

Вот список всех бинарных вычислений, который расположен в порядке снижения приоритета:

* — умножение;

  • / — деление;
  • + — сложение;
  • — — вычитание;
  • % — остаток от целочисленного деления.

Основные унарные операции:

  • ++ — инкрементирование (увеличение на 1);
  • –– — декрементирование (уменьшение на 1);
  • — — изменение знака.

Например,

x = 3, переменной x будет присвоено значение 3

y = x + 5, к значению x, прибавить 5,

получившаяся сумма будет в переменной y

z = x * y; перемножить x и y,

получившиеся значение будет в переменной z

z = z - 1; отнять от значения z, 1

получившуюся разницу записать в переменную z

С помощью такого способа можно почитать, что переменная z будет ровняться 23.

Например,

x++; в этом случае значение x увеличится на 1.

Декремент – это операция в которой будет уменьшено значение, находящиеся в переменной, на 1.

Например,

x--; в этом случае значение x уменьшится на 1.

Инкремент и декремент подходят для операций присваивания. В тот момент, когда используется декремент и инкремент вместе с оператором "=" применяется постфиксная (x++) или префиксная (++x) запись. Сначала выполняется префиксная запись.

Например,

y = x++;

Если, в переменной x находилось значение 5. То в y будет записано значение 5, после этого действия переменная x увеличится на 1. Таким образом, в y будет 5, а в x - 6.

y = --x;

В том случае, когда в x было записано значение 5, то в начале будет совершено уменьшение x до 4, а только после этого, значение присвоится y. Таким образом, x и y будет присвоено значение 4.

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

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

Объявление переменной будет выглядеть так:

[модификаторы] спецификатор типа

идентификатор [, идентификатор] ...

Модификаторы - основные слова: signed, unsigned, shоrt, lоng.

Спецификатор типа - ключевое слово char или int, которое выявляет тип объявляемой переменной.

Идентификатор - имя переменной.

Пример:

char x;

int a, b, c;

unsigned lоng lоng y;

С помощью данного выражения, будут объявлены переменные x, a, b, c, y. В переменную x мы в состоянии поместить от -128 до 127. В переменные a, b, c - от -32768 до 32767. А в переменную y - от 0 до 18446744073709551615.

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

int x = 100;

Таким образом, Число 100 будет сразу помещено в переменную x при ее объявлении.

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

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

3.2 Константы

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

Переменная разного типа может быть объявлена как не улучшаемая. Это приходит с добавлением главного слова cоnst к спецификатору типа. Переменные с таким типом воплощают из себя данные, которые используются для чтения, без возможности присваивания нового значения. В случае, когда после слова cоnst не находится спецификатор типа, то в этом случае константы будут рассматриваться как величины со знаком, и им будет приписан тип int или lоng int, смотря какое значение имеет константа: в том случае, если константа имеет значение меньше 32768, то ей приписывается тип int, в ином случае lоng int.

Например,

cоnst lоng int k = 25;

cоnst m = -50; // подразумевается cоnst int m=-50

cоnst n = 100000; // подразумевается cоnst lоng int n=100000

Для того чтобы присвоить значение в Си существует знак “=”. Выражение, которое находится по правой стороне от этого знака присваивания, вычисляется, и получившиеся значение присваивается переменной, которая стоит по левую сторону от знака” =”. Так же прошлое значение, которое находится в этой переменной удаляется и меняется на новое. Оператор присваивания не воспринимается как равенство.

Например, такое выражение как: a = 5; будет читаться как присвоить переменной a значение 5".

x = 5 + 3; сложить значения 5 и 3,

результат присвоить переменной x

b = a + 4; прибавить 4 к значению, хранящемуся в переменной a,

посчитанное число присвоить переменной b

b = b + 2; // прибавить 2 к значению, хранящемуся в переменной b,

// полученный результат присвоить переменной b

В правой части значение переменной можно использоваться несколько раз: c = b * b + 3 * b.

Помимо обычного оператора "=", в системе Си, так же создано еще комбинированные операторы присваивания, такие как: "+=", "-=", "*=<", "/=", "%=".

Например,

x += y; // то же, что и x = x + y; - сложить x и y,

результат поместить в переменную x

x -= y; то же, что и x = x - y; - отнять от x значение y,

результат поместить в переменную x

x *= y; то же, что и x = x * y; - умножить x на y,

результат поместить в переменную x

x /= y; то же, что и x = x / y; - разделить x на y,

результат поместить в переменную x

x %= y; то же, что и x = x % y;

посчитать цельный остаток после деления x на y

результат поместить в переменную x.

Заключение

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

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

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

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

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

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

Список источников

  1. Automate the Boring Stuff with Python - Аль Свейгарт
  2. Основы программирования. Учебник и практикум для прикладного бакалавриата - Черпаков Игорь Владимирович
  3. Практическое использование Common Lisp - Сайбель П.
  4. Совершенный код: Практическое руководство по разработке программного обеспечения - Макконнелл С.
  5. Технологии и методы программирования - Н.В. Анашкина, Н.Н. Петухова, В.Ю. Смольянинов.
  1.  Единица хранения и обработки цифровой информации. В современных вычислительных системах байт состоит из 8 бит и, соответственно, может принимать одно из 256 различных значений.

  2. Устройство для записи, хранения и считывания n-разрядных двоичных данных и выполнения других операций над ними.

  3. Минимальный адресуемый элемент запоминающего устройства ЭВМ.

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

  5. Это те данные, которые в настоящий момент присутствуют в переменной.

  6. Они записаны в разделе описаний и не могут меняться во время выполнения программы.

  7. Работа с объектами осуществляется с помощью конструкций языка; внутреннее представление значений объектов может зависеть от реализации транслятора и от платформы;

  8. Типы компонент образуются из других типов (простых, структурированных).

  9. Массив – строение данных, где находятся некоторые элементы массива, которые размеченных по заданному числу или набору заданных чисел, которые могут принимать целые значения из неопределенно заданного не имеющего конца диапазона.

  10. Двоичный код другой операции из компиляции команд машины.

  11. Ассемблер-передатчик начального текста программы, перенесенного с языка ассемблера, в программу на компьютерном языке.

  12. Макрос – это алгоритм программных действий, который записан программистом. В большинстве случаев, их, чтобы не заниматься простыми и рутинными задачами.

  13. Язык обработки списков; современное - Lisp - вид языков для программирования, а также данные в которых являющиеся системами линейных списков. Он был разработан Джоном Маккарти, чтобы облегчить труды с ИИ и по сей день он остался одним из главных инструментальных средств в этой области.

  14. Область видимости определяет, есть ли у вас доступ к переменной в данном контексте выполнения

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

  16.  Динамическая переменная — переменная в программе, место в оперативной памяти под которую выделяется во время выполнения программы.

  17.  Абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO.

  18. это специализированная структура данных типа дерево, которая удовлетворяет свойству кучи: если B является узлом-потомком узла A, то ключ A ≥ ключ B. Из этого следует, что элемент с наибольшим ключом всегда является корневым узлом кучи, поэтому иногда такие кучи называют max-кучами

  19. Никлаус Вирт - швейцарский учёный, специалист в области информатики, один из известнейших теоретиков в области разработки языков программирования, профессор компьютерных наук Швейцарской высшей технической школы Цюриха, лауреат премии Тьюринга 1984 года.

    Родился: 15 февраля 1934 г. Винтертур, Швейцария

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

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

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

  23. Название ряда языков программирования, применяемых при составлении программ для решения научно-технических задач на ЭВМ.

  24. Считывает все символы до (но не включая) следующего маркера конца строки или пока Eof(F) станет равным True.

  25. Служит для вывода на экран каких-либо данных.