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

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 06.04.2023

Просмотров: 142

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

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

Глава 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]