Переменные в borland С++ 3.1

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

В программировании существует понятие Переменная. Я как-то очень долго не мог понять суть этого определения. Но будем разбираться.

  • Переменная — это нечто такое, что способно изменять свое значение в ходе выполнения программы

Чтобы было проще, вспоминая школьные уроки, вспомним арифметические уравнения. x = a + b. Вот в этом выражении присутствуют три значения (x,a,b), каждое из которых может принимать любое значение. Это — три переменные. В компьютере почти все то же самое.

  • Переменная в языке C++ представляет собой название неизвестного, такого неизвестного, которое мы сможем задавать в ходе работы программы

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

Вот простой пример кода, с использованием переменной

Если временно не обращать внимание на int, то видите, как это похоже на школьную алгебру. Здесь и x и y — это названия. Это просто названия. Это названия ячеек памяти. У ячейки памяти есть свой собственный адрес. У этих названий есть этот же самый адрес. Просто потому что эти названия фактически и есть ячейки памяти. Переменными они называются потому что они могут изменяться в ходе работы программы. В начале работы программы в x присвоится 2, дальше пока программа работает, это значение поменяется, согласно коду программы. Так как значение в ячейке изменчивое, то отсюда и название — переменные. (перемена значений). Т.е. в одной ячейке памяти в разные моменты времени могут лежать разные значения. —> ячейка памяти хранит переменную. Вот такой вот "заворот" Но в ячейке памяти может быть и такое значение, которое в ходе работы программы не изменяется. Это уже будет константа. Но речь о переменных. Надеюсь, хоть немного понятно.

В C++ для объявления переменной, нужно указать тип переменной.

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

Это причина того, что для создания переменной нужно указывать тип создаваемой переменной. Когда программист указывает тип, то компилятор обращается к памяти и формирует некоторый блок памяти для хранения указанной переменной. Он забирает столько ячеек памяти, сколько подходит под выбранную единицу информации. В начале можно считать, что указание типа — это указание минимума необходимой памяти. Так, выше в примере перед переменными был указан тип int. Он обозначет целое число. На большинстве компьютеров он занимает 4 байта памяти. Но это не фиксированное значение, он может занимать и больше байтов и меньше байтов. Тип int из С++ — это фундаментальный тип данных. В C++ не очень много фундаментальных типов. Фундаментальные типы можно назвать встроенными или примитивными типами.

целочисленные типы
char — Это тип. Указывается перед переменной, которая хранит символ (числовой номер символа). Символьный тип переменной. Программист обозначает, что он работает с символами. char — Это единственный тип переменной, про который можно с уверенностью говорить, что он занимает столько-то памяти. Он занимает столько байт, сколько соответствует минимально адресуемой ячейке. Обычно это один байт. Сколько на компьютере байтов занимает минимально адресуемая ячейка, столько в этом char и будет занято байтов. (т.е. не обязательно 1 байт).

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

  • short <= int <= long

Типы могут быть знаковыми и беззнаковыми. Обозначается это signed и unsigned. Такие обозначения означают, что для работы программист выбрал определенный диапазон чисел. Знаковые обозначают, что есть как положительные, так и отрицательные числа, беззнаковые означают, что отрицательные числа не имеют значения и не будут использованы. Так, например, у человека не может быть отрицательное число лет, в наборах данных, в списках не может быть отрицательного номера выбираемого элемента. При работе с русской кодировкой часто применяется тип беззнаковый символ (unsigned char)

Как уже говорилось, тип — это обозначение того сколько байт в памяти занять. Но кроме этого, тип — это указание диапазонов выбираемых значений. Так, например в один байт влезает диапазон в 256 значений. Таких диапазонов существует два [-128;127],[0;255],Всегда два диапазона, а программист выбирает один из них. Когда программист указывает о том, что диапазон беззнаковый, он может зацепить большее число положительных чисел, чем если бы работал как со знаковым. где 127 и где 255. Только не путайтесь, количество элементов от указания знаковости не изменяется. Это всего-лишь сдвиг. Это выбор одного из двух абсолютно одинаковых по количеству чисел диапазонов.
Посчитать диапазоны можно по формулам:
Левый (знаковый) -2n-1 … 2n-1 — 1
Правый (беззнаковый) 0 … 2n — 1
n — количество бит. один байт = 8 бит.

Кроме целочисленных типов данных, существуют два типа для работы с не целыми числами.
float — 4 байта, 7 значащих цифр
double — 8 байтов, 15 значащих цифр
значащие цифры — это цифры, которые точно отображаются после запятой в числе. После этих цифер могут отображаться другие цифры, которы делают вид, что являются частью числа, хотя это неправда. Так можно попробовать вывести любое число с более чем из 15 цифер на экран.

___________________
Существует 5 знаковых целочисленных типов.
"signed char", "short int", "int", "long int", and "long long int"
Каждый из них можно указать как беззнаковый.
"unsigned char", "unsigned short int", " int", " long int" и "unsigned long long int"

___________________

  • Примеры Объявления переменной в программе:

  • При объявлении переменной можно указывать её значение

  • Переменные в borland c++ 3.1 обозначются буквой, либо словом, состощим из букв Латинского алфавита, например можно написать: int itog; – (Целочисленная переменная итог)

Если у нас несколько однотипных переменных, то их можно разделять через запятую, после указания нужного нам типа: int a,b; (Две различные целочисленные переменные)

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

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

например объявили a=5; b=10. Сделать чтоб при выводе b выводилось 5, а при выводе a выводилось 10

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

Хотя, спустя некоторое время, я описал (не все, но кое что о переменных)
Что такое переменные в С++. Помню, как еще в самом самом первом начинаниия долго не мог понять что же это такое. Думаю, я не первый, я не последий испытал такую трудность.
Переменные в C++ — это такие именованные данные, которые могут изменять свои значения в любое время работы программы. Чтобы было конкретнее, я поясняю. Чтобы программа могла что-то сделать, программе нужно место в памяти. Например, чтобы выполнить простой расчет из двух слагаемых, программе нужно место для первого и второго слагаемого, а также для суммы. Иногда требуется запомнить такую сумму для дальнейшего вычисления. (Запоминать промежуточные вычисления). Один из вариантов написать простую программу

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

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

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

Фактически получается, что есть некоторое Название ячейки памяти и у этого названия есть значение. Т.к. значение в любое время может изменяться, получается своего рода переменчивость значений внутри ячейки памяти путем использования названия этой самой ячейки памяти. Отсюда идет название: "Переменная"
У переменной обязательно должен быть определен тип. Язык С++ строго типизируемый, поэтому нужен тип. Тип переменной определяет что именно в ней будет храниться. Это может быть число, это может быть строка, это может быть какой-то свой тип данных. Все эти типы различны друг от друга и имеют различные представления внутри памяти, поэтому у разных типов переменных могут быть различны операции, которые можно к ним применять. Так, например, если переменная имеет целочисленный тип, то для нее определен оператор (operator) сложения +, а для массива символов такого оператора не определено. Т.е. если попробовать сложить СИ строки (не путайте со string) плюсом, то ничего из этого не получится. В дальнейшем можно использовать знак + для сложения строк, т.к. С++ позволяет определять свое поведение для операторов, но изначально нельзя. Так же и с другими типами. Каждый тип имеет свои особенности. Поэтому при создании переменных вы должны правильно выбирать соответствующий ей тип.

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

В С++ наиболее часто используют следующие типы переменных:
int //для целых чисел
double //для не целых чисел.
char //для символов
string //для строк. В C++3.1 этого типа нет!
bool //для логических переменных //В C++ 3.1 этого типа нет!

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

Иногда хочется узнать предельное значение переменой
На практике предельные значения числовых типов зависят от платформы. В стандартной библиотеке C++ они реализованы в шаблоне numeric_limits. Числовые пределы заменяют и дополняют обычные препроцессорные константы языка С. Впрочем, эти константы по-прежнему доступны для целочисленных типов в заголовочный файлах <climits> и <limits.h>, а для вещественных типов — в заголовочный файлах <float> и <float.h>

В Borland C++ 3.1 эти файлы можно увидеть в папке где установлен Borland C++3.1 (У меня C:\Borland\BORLANDC\INCLUDE)
В CodeBlock с MinGW (если ставили сразу такое) там где установлен компилятор MinGW (У меня S:\Program Files\CodeBlocks\MinGW\include)
и по аналогии где компилятор..

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

(я открывал для MinGW)
Это означает, что внутри вашей программы можно использовать INT_MAX вместо того, чтобы определять свою переменную (или константу) равную 2147483647

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

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

Еще мне не давали покоя ключевые слова signed и unsigned. У кого не спросишь, вс говорят знаковое и беззнаковое. Иногда не имеет смысла использовать знаковые переменные. Знаковая переменная обозначает, что значение переменной может быть и положительным и отрицательным. Беззнаковая обозначает, что только положительным. Взять, например количество лет, которые м прожили. Не бывает отрицательного числа. Всегда только положительное. Взять количество машин в автопарке. Только положительное, не может быть со знаком минус. Взять количество жителей в доме. Всегда только положительное либо ноль. Но иногда бывает переменная, способная быть и положительной и отрицательной. Финансы (долги или выгода), температура и другие данные. В зависимости от информации имеет смысл использовать либо знаковую переменную, либо беззнаковую. Если вы точно знаете, что переменная не будет иметь отрицательных значений (т.к. по природе своей не может), то используя ее как беззнаковую, вы можете получить преимущество в допустимом предельном значении. При использовании переменной как беззнаковой произойдет что-то типа сдвига всех тех значений, которые использоваться не будут (все что с минусом сдвинется к плюсовой части). Посмотрите сами.

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

Объявлять беззнаковые переменные можно двумя способами. Либо явно писать ключевые слова signed (unsigned), либо с помощью специально суффикса u

Подводим итоги

  • Переменная — это именованный участок памяти, значение в котором может изменяться в любое время. (ввод с клавиатуры, считывание с файла, вычислением и др. способами)
  • У каждой переменной определен свой тип. В зависимости от типа зависит то, какие операции можно проводить с такой переменной
  • Размер памяти, который выделяется для хранения переменной зависит и от типа переменной и от компилятора (В разных компиляторах могут быть различные реализации)
  • Узнать размер, выделенный в памяти для переменной можно операцией sizeof
  • Предельные значения основных типов данных хранятся в файлах limits.h (для целых) и float.h (для не целых)
  • Переменные могут быть знаковыми и беззнаковыми
  • Размеры, выделяемые памятью для знаковых и беззнаковых переменных одинаковые, но тем не менее беззнаковые переменные иногда позволяют использовать немного больше, т.к. увеличивается максимальное предельное значение

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

4 комментария: Переменные в borland С++ 3.1

  • Anonymous говорит:

    А разве double не 8 байт…?

    Автор сайта отвечает:
    8 байт.моя ошибка. Спасибо, что подсказали

    😀 😀 😀

  • Николай говорит:

    Спасибо за уроки, насколько я понял,  объект   cin.get() в конце программы должен дождаться нажатия ENTER, для окончания работы программы, но у меня для просмотра вывода работы программы её нужно продублировать, не могли бы Вы объяснить, почему?

     

    • admin говорит:

      Такое происходит из-за оставления символа ‘\n’ в потоке ввода.
      Происходит из-за смешения ввода: в поток ввода вводятся числа, потом туда запихивается символ. Нажатие Enter туда и влезает, поток съедает нажатие Enter. Т. е. Enter съелся = Enter нажат. То же, что дождался.

      Я не могу это хорошо объяснить. Как сумел. Вот некоторые решения такой проблемы:
      http://www.cyberforum.ru/cpp-beginners/thread1260162.html#post6641410

  • Николай говорит:

    Спасибо за помощь, разобрался.

    Вместо  cin.get(); cin.ignore(2);

    2 — количество игнорируемых символов.

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- У меня компьютер сам выключается... че делать? - У тебя системник внизу стоит? - Да. - Поменяй носки... он сознание теряет.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок