[FreeBASIC] Переменные в Бейсике

2 месяца назад

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

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

Раньше было ограничение на длины имён переменных, сейчас такого практически нет. В некоторых языках имя переменной записанное символами в другом регистре может означать совсем другую переменную. Бейсик и Паскаль не чувствителен к регистру, т.е. смена регистра написания переменной означает одну и ту же переменную. А вот в языке С/С++ это будут разные переменные, причём в этом языке символ подчёркивания _ "считается" буквой и может быть даже первым символом в имени переменной.

Посмотрим действительно ли регистр написания имени переменной не имеет значения в 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

ТипРазмер(в битах)ФорматМин. значениеМакс Значение
byte8целое число со знаком-128+127
ubyte8целое число без знака0+255
short16целое число со знаком-32768+32767
ushort16целое число без знака065535
integer32целое число со знаком-2147483648+2147483647
uinteger32целое число без знака04294967395
long32*целое число со знаком-2147483648+2147483647
ulong32*целое число без знака04294967395
longint64целое число со знаком-92233720368547758089223372036854775808
ulongint64целое число без знака0+18446744073709551615
single32с плавающей точкой+/-2.802597 E-45+/-3.402823 E+38
double64с плавающей точкой+/-4.490656458412465 E-324+-1.797693134862310 E+308

Зачем же нужны столько разных типов?

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

Первые компьютеры были очень ограничены в ресурсах - нужно было экономить на всём и на объёме памяти и на быстродействии. Вещественные переменные занимают в памяти больше места чем целые, переменные двойной точности занимают больше чем одинарной, а длинные целые - больше чем просто целые. И учитывая что переменных в программе может быть очень много это и сейчас большой плюс в экономии, а раньше - тем более. Ещё один аргумент - быстродействие. Операции над целыми числами компьютер производит намного быстрее, чем над вещественными. Да и вы думаю тоже. Разделите 400 на два, и на три, а на полтора?

0. FreeBASIC лучший из диалектов бейсика
1. Начинаем изучать FreeBasic

@sergiy

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
32
  ·  2 месяца назад

Сюда приплывал Моби Дик

69
  ·  2 месяца назад

@sergiy, поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:

Награда за количество полученных голосов

Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь

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

Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.