[FreeBASIC] Переменные в Бейсике
Очень часто результат необходимо сохранять в памяти компьютера, а со временем и изменять его, а на экран не всегда и не всё нужно выводить. В языках программирования для сохранения значений служат переменные.
Переменная это область памяти, где хранится значение, обозначаемая определённым именем. Имя переменной состоит из букв латинского алфавита и цифр. В конце имени переменной иногда добавляют некоторые специальные символы для указания типа значения которое хранится в переменной.
Раньше было ограничение на длины имён переменных, сейчас такого практически нет. В некоторых языках имя переменной записанное символами в другом регистре может означать совсем другую переменную. Бейсик и Паскаль не чувствителен к регистру, т.е. смена регистра написания переменной означает одну и ту же переменную. А вот в языке С/С++ это будут разные переменные, причём в этом языке символ подчёркивания _
"считается" буквой и может быть даже первым символом в имени переменной.
Посмотрим действительно ли регистр написания имени переменной не имеет значения в FreeBASIC. (Первая строчка говорит компилятору FreeBASIC рассматривать текст нашей программы в режиме совместимости со старым очень популярным в своё время вариантом бейсика QuickBasic)
#lang "qb"
Aa=10
aA=12
print Aa, aA
Как видим эти имена обозначают одну и ту же переменную.
Сначала в переменную Aa
заносится значение 10, потом это значение заменяется значением 12, т.к. записи Aa
и aA
обозначают одну и ту же переменную. И в результате мы видим дважды число 12. Если бы это были разные переменные, то значение 10 не затёрлось бы и при выводе мы бы увидели значение и 10 и 12.
Тип переменной
Рассмотрим суффиксы добавляемые к именам переменных для обозначения их типа.
В переменной могут храниться целые числа и вещественные числа. И для целых и для вещественных существует по два типа, т.е всего четыре типа переменных. В переменных можно ещё хранить текст - тогда это текстовая переменная. Итого пять типов. Другие названия для этого типа строковая переменная, или символьная переменная. текстовая, строковая и символьная всё-таки немножко не одно и то же , но не будем сейчас на это обращать внимание
суффикс | тип переменной |
---|---|
% | тип Integer (целый) |
& | тип Long (длинное целое) |
! | тип Single (вещественный одинарной точности) |
# | тип Double (вещественный двойной точности) |
$ | тип String (строковый) |
В советской литературе символ строковых переменных - ¤
вместо доллара, если встретите.
#lang "qb"
a%=8/7
a&=8/7
a!=8/7
a#=8/7
print a%
print a&
print a!
print a#
print a
Как видим из примера a%, a&, a!, a# - это разные переменные, а использование имени переменной без суффикса означает что будет использован вещественный тип одинарной точности, тип по умолчанию. Логика конечно здесь немножко хромает)), а может a! и a это разные переменные? Можете убедиться что всё-таки это одна и та же переменная добавив в текст программы строку a=11/7
. После пятой строки, между блоком вычислений и печатью результатов.
В ранних версиях Бейсика оператор присваивания записывался так let a=10
. Теперь оно "лишнее", но в некоторых диалектах, например Sianclair BASIC оно было обязательно.
А как вы оцените такую запись a=a+1
? Ничего не смущает? Как может быть число рано числу на единицу большему самого себя?))) Это не знак равенства - это оператор присваивания значения. Компьютер, или компилятор FreeBASIC рассматривает вначале правую часть a=a+1
, он берет из памяти обозначенной именем a
значение, прибавляет к нему единицу, а потом этот результат помещает назад в память где хранилось прежнее значение переменной a
. Получается что старое значение затирается(заменяется) новым.
Текстовые переменные
a$="это текстовая строка"
tr12$="$%^&&*($FdFr$%FGzXF-678T%"
вот пример текстовых(строковых, символьных) строк. Как для числовых переменных так и для текстовых есть операции и функции проводимые над ними. Об этом в следующем уроке.
DIM
Использование суффиксов для имён переменных это уже прошлое, но в книгах довольно часто встречается, а их было написано много за время жизни Бейсика.
Согласно новым веяниям и правилам этикета стандартам переменные(их тип) должны быть объявлены и определены в начале программы.
Dim имя_переменной1 As тип_переменной1, имя_переменной2 As тип_переменной2, ...
или
Dim As типпеременной, имяпеременной1, имяпеременной2, имяпеременной3 ...
именно это "требование" и отключает директива #lang "qb"
. Т.е. она позволяет не объявлять переменные заранее.
Если необходимо переменным можно сразу же давать начальные значения:
Dim имя_переменной1 As тип_переменной1=выражение, имя_переменной2 As тип_переменной2=выражение, ...
тип переменной один из встроенных FreeBASIC типов данных: byte, ubyte, short, ushort, integer, uinteger, long, ulong, longint, ulongint, single, double
Тип | Размер(в битах) | Формат | Мин. значение | Макс Значение |
---|---|---|---|---|
byte | 8 | целое число со знаком | -128 | +127 |
ubyte | 8 | целое число без знака | 0 | +255 |
short | 16 | целое число со знаком | -32768 | +32767 |
ushort | 16 | целое число без знака | 0 | 65535 |
integer | 32 | целое число со знаком | -2147483648 | +2147483647 |
uinteger | 32 | целое число без знака | 0 | 4294967395 |
long | 32* | целое число со знаком | -2147483648 | +2147483647 |
ulong | 32* | целое число без знака | 0 | 4294967395 |
longint | 64 | целое число со знаком | -9223372036854775808 | 9223372036854775808 |
ulongint | 64 | целое число без знака | 0 | +18446744073709551615 |
single | 32 | с плавающей точкой | +/-2.802597 E-45 | +/-3.402823 E+38 |
double | 64 | с плавающей точкой | +/-4.490656458412465 E-324 | +-1.797693134862310 E+308 |
Зачем же нужны столько разных типов?
А FreeBASIC же имеет ещё больше типов переменных, чтобы идти в ногу с совремёнными языками. Было бы два: текстовый и числовой
Первые компьютеры были очень ограничены в ресурсах - нужно было экономить на всём и на объёме памяти и на быстродействии. Вещественные переменные занимают в памяти больше места чем целые, переменные двойной точности занимают больше чем одинарной, а длинные целые - больше чем просто целые. И учитывая что переменных в программе может быть очень много это и сейчас большой плюс в экономии, а раньше - тем более. Ещё один аргумент - быстродействие. Операции над целыми числами компьютер производит намного быстрее, чем над вещественными. Да и вы думаю тоже. Разделите 400 на два, и на три, а на полтора?
0. FreeBASIC лучший из диалектов бейсика
1. Начинаем изучать FreeBasic