"Программирование в среде Gambas".

advertisement
Программирование
в среде Gambas.
Нужно взять
только идею
и воплотить
ее в жизнь.
(ГВИ)
Глезденев В.И. – учитель информатики высшей квалификационной категории
Запускаем Gambas и выбираем «Новый проект»
«Консольное приложение»
Указываем, где будет располагаться наш проект
Указываем имя программы, заголовок и
нажимаем на «ОК»
Консольный режим Gambas полностью
соответствует модульному режиму в VB
Набираем программу и нажимаем F5, как
это обычно в Basic_е
Результат
выводится в
специальное
«консольное
окно»
Типы переменных в
Gambas
Dim [список переменных] As [тип]
Диапазо
Название н
типа
значени
й
Boolean
Byte
True or
False
0 ... 255
-32768 ...
Память
Пример
использования
1 byte
dim p as boolean
a=10: b=20
p=a>b
If p Then Print "a>b" Else
Print "a<b"
1 byte
dim a1,a2 as Byte
a1=rnd(255)
a2=10
If a2>a1 Then Print
"больше"
If a2<a1 Then Print
"меньше"
If a2=a1 Then Print
"угадано"
dim a,k as Short
k=0
For i=1 to 100
4 byte
dim x,y,b as Integer
x=2
y=30
b=x^y
Print "2 в 30-й степени =";b
вещественн
ый
8 byte
с двойной
точностью
dim b as Float
dim x,y as Short
x=2
y=30
b=x^y
Print "2 в 30-й степени =";b
-2147483648 ...
Integer +2147483647
Float
Date
String
дата и
время
строковый
PRINT Now; " -> "; Date(Now)
8 byte
4 byte
05/16/2009 15:10:59 ->
05/16/2009
dim b as String
b="Gambas" PRINT
Mid$("Gambas", 2, 4)
amba
Математические
функции в Gambas
[переменная] = [функция][параметры]
Функция Назначение
Пример
использования
Вычисляется
абсолютное
значение числа
PRINT Abs(-2) --> 2
PRINT Abs(0) --> 0
Вычисляет арккосинус числа
PRINT Acs(0.5) -->
1.047197551197
PRINT ACos(-1) -->
3.14159265359
Asn/ASin
Вычисляет арксинус числа
PRINT Asn(0.5) -->
0.523598775598
PRINT ASin(-1) -->
1.570796326795
Atn/ATan
Вычисляет арктангенс числа
PRINT Atn(0.5) -->
0.463647609001
Cos
Вычисляет косинус
угла
Угол задается в
радианах
PRINT Cos(Pi) --> -1
Abs
Acs/ACos
Exp
Вычисляет экспоненту
числа
PRINT Exp(1) -->
2.718281828459
Fix
Возвращает целую
часть числа
PRINT Fix(Pi) --> 3
PRINT Fix(-Pi) --> -3
Frac
Вычисляет дробную
часть числа
PRINT Frac(Pi) -->
0.14159265359
Int
Возвращает
математическую
целую часть числа, то
есть, большее целое,
меньшее, чем это
число.
PRINT Int(Pi) --> 3
PRINT Int(-Pi) --> -4
Log
Вычисляет логарифм
числа.
PRINT Log(2.71828) -->
0.999999327347
PRINT Log(1) --> 0
Log10
Вычисляет десятичный
логарифм числа.
PRINT Log10(10) --> 1
Log10(x) =
Log(x)/Log(10).
Возвращает большее
выражение из списка.
Выражение должно быть
Max
числом
или значением
дата/время.
PRINT Max(6, 4, 7, 1, 3) --> 7
PRINT Max(Now,
CDate("01/01/1900"),
CDate("01/01/2100")) -->
01/01/2100
Min
Возвращает меньшее
выражение из списка.
Выражение должно быть
числом или значением
дата/время.
PRINT Min(6, 4, 7, 1, 3) --> 1
PRINT Min(Now,
CDate("01/01/1900"),
CDate("01/01/2100")) -->
01/01/1900
Pi
Result = Pi([ Number ])
Возвращает Pi * Number. PRINT Pi --> 3.14159265359
Если Number не задано,
PRINT Pi(0.5) -->
подразумевается, что это 1.570796326795
единица.
Rad
Конвертирует градусы в
радианы.
PRINT Rad(90) -->
1.570796326795
PRINT Rad(180) - Pi --> 0
Dec
Уменьшение значения
переменной на 1
Эквивалентно i=i-1
Инициализрует генератор
Rando
псевдо-случайных чисел из
mize
текущей даты и времени.
Rnd
Round
- Если параметры не заданы,
возвращает псевдо-случайное
число в интервале [0,1].
- Если один из параметров
задан, возвращает псевдослучайное число в интервале
[0,Min].
- Если оба параметра заданы,
возвращает псевдо-случайное
число в интервале [Min,Max].
Value = Round(Number [,Digits] )
Округляет число до его
ближайшего целого, если
Digits не задано.
Если Digits задано,
округляется до 10 ^ Digits .
Randomize ( )
PRINT Rnd -->
0.019539254718
PRINT Rnd(2) -->
1.040205506608
PRINT Rnd(10, 100) -->
43.204108046818
PRINT Round(Pi, -2) -->
3.14
PRINT Round(1972, 2) -> 2000
Использование функции Rnd
Rnd( [Min], [Max] )
Вычисляет псевдо-случайное число с
плавающей точкой, используя алгоритм Lehmer.
-Если параметры не заданы, возвращает
псевдо-случайное число в интервале [ 0 , 1 ].
-Если один из параметров задан, возвращает
псевдо-случайное число в интервале [ 0 , Min ].
-Если оба параметра заданы, возвращает
псевдо-случайное число в интервале
[ Min , Max ].
Использование функции Rnd
' между 0 и 1
PRINT Rnd --> 0.019539254718
' между 0 и 2
PRINT Rnd(2) --> 0.040205506608
' между Pi и Pi*2
PRINT Rnd(Pi, Pi(2)) --> 3.204108046818
' или
PRINT Rnd(Pi, Pi*2) --> 3.464108046818
STATIC PUBLIC SUB Main()
DIM Dice AS Integer
Randomize
Dice = Int(Rnd(1,7))
PRINT "Случайное число между 1 и 6 =" & dice
END
Sgn
Возвращает знак числа.
Если число ноль,
возвращается ноль.
Если число строго
положительно,
возвращается целое число
+1.
Если число строго
отрицательно,
возвращается целое число
-1.
PRINT Sgn(Pi) --> 1
PRINT Sgn(-Pi) --> -1
PRINT Sgn(0) --> 0
Sin
Вычисляет синус угла.
Угол задается в радианах.
PRINT Sin(Pi/2) --> 1
^
Степень числа.
PRINT 4^2 --> 16
Sqr
Вычисляет квадратный
корень числа.
PRINT Sqr(2) -->
1.414213562373
Вычисляет тангенс угла.
Функции преобразования
Asc
Code = Asc ( String [ , Position ] )
Возвращает ASCII код символа в позиции Position
строки. Если Position не задано, возвращается
ASCII код первого символа.
Будьте внимательны ! Gambas использует UTF-8 кодировку
внутренне, так что код символа больше, чем 128 не имеет
значения, это используется в кодировках типа ISO8859-1.
Пример:
PRINT Asc("Gambas")-->71
PRINT Asc("Gambas", 3)-->109
Функции преобразования
Chr$
Character = Chr$ ( Code )
Возвращает символ, чей ASCII код - это Code.
Пример:
PRINT Chr$(65) --> A
PUBLIC SUB Button1_Click()
DIM X AS Integer
FOR X = 32 TO 127
PRINT Chr$(X);
NEXT
END
Замечание:
В Gambas имеют
смысл только 128
первых символов, так
что данный пример
неслучаен.
Функции преобразования
Val
Expression=Val(String)
Конвертирует строку в булево значение, число или дату,
согласно содержимому строки.
 Если строка - дата и время (с даты и времени
разделителями), тогда возвращается дата и время.
 Если строка число с плавающей точкой, тогда
возвращается число с плавающей точкой.
 Если строка - целое число, тогда возвращается это целое
число.
 Если строка - это TRUE или FALSE , тогда возвращается
соответствующее булево значение.
 В противном случае возвращается NULL. Пример:
PRINT
PRINT
PRINT
PRINT
Val("09/06/72 01:00") ---> 09/06/72 01:00:00
Val("3.1415") ---> 3.1415
Val("-25") ---> -25
Val("True") ---> True
Функции преобразования
Str$
String = Str$ ( Expression )
Конвертирует выражение в представление
выводимой строки. Это точно противоположно Val() .
Текущая локализация используется для
конвертации чисел и дат. Пример:
PRINT Str$(10)+Str&(-10) -->10-10
' Print on standard output or in a message
PUBLIC CONST ON_STDOUT AS Integer = 1
PUBLIC CONST ON_MESSAGE AS Integer = 2
SUB PrintOn(Where AS Integer, What AS Variant)
IF Where = ON_STDOUT THEN PRINT What
ELSE
IF Where = ON_MESSAGE THEN Message(Str$(What))
END IF
END
Функции преобразования
Hex$
String=Hex$(Number[,Digits])
Шестнадцатеричное представление десятичного числа.
Digits - количество цифр в шестнадцатеричном
представлении. Пример:
PRINT Hex$(1972) --> 7B4
PRINT Hex$(1972, 8) --> 000007B4
Bin$
String=Bin$(Number[,Digits])
Двоичное представление десятичного числа. Digits количество цифр в двоичном представлении. Пример:
PRINT Bin$(77) --> 1001101
PRINT Bin$(77, 16) --> 0000000001001101
Операторы в Gambas
Краткая форма условного оператора:
Запись в одну строку, если нужно выполнить одно действие
по условию:
IF <условие> THEN <действие>
Запись в одну строку, если нужно выполнить несколько
действие по условию:
IF <условие> THEN <действие_1>:<действие_2>
Запись, если действий много и их желательно
записать каждое в отдельной строке:
IF <условие> THEN
<действие_1>
<действие_2>
…
<действие_N>
END IF
Условием может выступать любая
арифметическая операция сравнения:
> - больше; < - меньше; = - равно;
>= - больше или равно; <= - меньше или равно;
<> - неравно;
Графическое представление:
Полная форма условного оператора:
Запись в одну строку, если нужно выполнить одно
из двух действий
IF <условие> THEN <дейст_1> ELSE <дейст_2>
Запись, если действий много:
IF <условие> THEN
<действие_1_1>
…
<действие_1_N>
ELSE
Графическое
<действие_2_1>
представление :
…
<действие_2_N>
END IF
Использование логических функций
NOT
Result = NOT Expression
Вычисляет логическое not от выражения, т.е.
обратное значение логического выражения. Если
Expression=TRUE, то функция NOT выдает False и
наоборот.
Пример:
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
NOT
NOT
NOT
NOT
NOT
NOT
TRUE --> False
FALSE --> True
11 --> -12
CByte(11) --> 244
"Gambas" --> False
"" --> True
1
0
Использование логических функций
AND
Result = Expression1 AND Expression2
Вычисляет логическое and двух булевых
выражений, или численное and двух целых
чисел.
Пример:
PRINT TRUE AND FALSE --> False
PRINT TRUE AND TRUE --> True
PRINT 7 AND 11 --> 3
1
1
1
Использование логических функций
OR
Result = Expression1 OR Expression2
Вычисляет логическое or двух выражений.
Пример:
PRINT TRUE OR FALSE --> True
PRINT FALSE OR FALSE --> False
PRINT 7 OR 11 --> 15
XOR
1
Result = Expression XOR Expression
1
0
Вычисляет логическое exclusive or двух
выражений. Примеры
PRINT TRUE XOR FALSE --> True
PRINT TRUE XOR TRUE --> False
PRINT 7 XOR 11 --> 12
Потоковое вычисление функции IF:
Value = If ( Boolean , True value [ , False value ] )
Вычисляется Boolean выражение и возвращается
True value , если выражение истнно, или False
value , если выражение ложно.
Если False value не задано, ему присваивается
NULL . Пример:
X=7
PRINT If((X MOD 2) = 0, "Pair", "Impair")
-->Impair
X=X+1
PRINT If((X MOD 2) = 1, "Impair", 1 / 0)
--> ** Division by zero **
Оператор выбора Select Case
SELECT Psel
[ CASE Zsel_a1 [ , Zsel_a2 ... ]
действие_1 ]
[ CASE Zsel_b1 [ , Zsel_b2 ... ]
действие_2]
…
END SELECT
Выбирает выражение для сравнения и выполняет код, заключенный в
соответствующий совпадению с CASE заявлением.
Оператор выбора Select Case
с альтернативой
SELECT Psel
[ CASE Zsel_a1 [ , Zsel_a2 ... ]
действие_1]
[ CASE Zsel_b1 [ , Zsel_b2 ... ]
действие_2]
…
[ ( CASE ELSE | DEFAULT )
действие_N+1]
END SELECT
Выбирает выражение для сравнения
и выполняет код, заключенный в
соответствующий совпадению с
CASE заявлением. Если нет
совпадений с CASE заявлением,
выполняется DEFAULT или CASE
ELSE заявление.
Оператор цикла FOR
FOR i=1 TO 20 STEP 0.5 (заголовок)
команды цикла (тело цикла)
NEXT i (конец цикла)
i - переменная цикла, которая будет изменять свое
значение по мере выполнения цикла от начального
значения (нз=1) до конечного значения (кз=20) с шагом 0.5
(шп=0.5).Если шаг изменения переменной цикла равен 1, то
он не указывается.
Графическое представление цикла FOR:
PUBLIC SUB Form_Open()
DIM x,w,a,b,c,d,e,f AS Integer
FOR x = 1 TO 1000
w = Int(Rnd(6) + 1)
SELECT CASE w
Пример:
CASE 1
Смоделировать случайную функцию
a=a+1
игральной кости, Так что, т.е. нужно
CASE 2
задать повторение случайной функции
b=b+1
тысячу раз, подсчитывая сколько
выпадений 1, 2, 3, 4, 5 или 6 было.
CASE 3
c=c+1
Замечание:
CASE 4
Обратите внимание, что Select Case
d=d+1
может выполнить не более одной из
CASE 5
содержащихся в ней
e=e+1
последовательностей конструкций.
CASE 6
После того как одно из условий
оказалось равно True, и была
f=f+1
выполнена соответствующая
END SELECT
последовательность конструкций, Select
NEXT x
Case завершит свою работу. Остальные
PRINT a, b, c, d, e, f
условия проверяться не будут.
END
Оператор цикла While
Цикл выполнения по условию, т.е. цикл
повторяется до тех пор, пока
действительно условие, как только
условие становится ложным, так цикл
завершает выполнение команд,
находящихся в теле цикла:
WHILE условие
[тело цикла]
WEND
Если условие ложно, цикл
никогда не выполняется совсем.
Цикл WHILE ... WEND эквивалентен
циклу DO WHILE ... LOOP.
Использование цикла DO
Бесконечный цикл
DO
тело цикла
LOOP
Если задано WHILE, цикл завершается, когда условие
(логическое выражение) становится ложно (false). Если
условие ложно в начале цикла, цикл не выполняется
совсем.
DO [WHILE] [условие]
тело цикла
LOOP
Цикл Repeat ... Until
Repeat
тело цикла
Until условие
Цикл повторяется до тех пор, пока условие не станет
истинным. Заметьте, что цикл repeat (повторять) всегда
выполняется хотя бы раз, даже если значение UNTIL
инициализируется, как ложное – true (условие
истинно). Пример:
PUBLIC SUB Form_Open()
DIM i AS Integer
i=11
REPEAT
Inc(i)
PRINT i;
UNTIL i > 10
END
Использование функций работы со строкой
Len
Length = Len(String)
Возвращает длину строки. Примеры:
PRINT Len("Gambas") --> 6
PRINT Len("") --> 0
Left$
Result = Left$(String [,Length])
Возвращает Length первых символов строки.
Если Length не задана, возвращается первый
символ строки.
Если Length отрицательна, возвращается вся
строка за исключением (- Length) последних
символов. Примеры:
PRINT Left$("Gambas", 4) --> Gamb
PRINT Left$("Gambas") --> G
PRINT Left$("Gambas", -1) --> Gamba
Использование функций работы со строкой
Right$
Result = Right$(String[,Length])
Возвращает Length последних символов строки.
Если Length не задано, возвращаются последний
символ строки.
Если Length отрицательно, возвращается вся
строка, исключая (- Length ) первых символов.
Примеры:
PRINT Right$("Gambas", 4) --> mbas
PRINT Right$("Gambas") --> s
PRINT Right$("Gambas", -1) --> ambas
Использование функций работы со строкой
Mid$
Result=Mid$(String,Start[,Length])
Возвращает подстроку, содержащую Length
символов с позиции Start.
Если Length не задано, возвращается все с
позиции Start.
Если Length отрицательно, возвращается все с
позиции Start, исключая (- Length ) последних
символов. Примеры:
PRINT Mid$("Gambas", 3, 2) --> mb
PRINT Mid$("Gambas", 4) --> bas
PRINT Mid$("Gambas", 2, -1) --> amba
Использование функций работы со строкой
InStr
Position=InStr(String,Substring[,Start])
Возвращает позицию первого обнаружения
подстроки Substring в String.
Если Start задано, поиск начинается с позиции
Start.
Если подстрока не находится, InStr() возвращает
ноль. Примеры:
PRINT Instr("Gambas is basic", "bas") --> 4
PRINT Instr("Gambas is basic", "bas", 5) --> 11
PRINT Instr("Gambas is basic", "not") --> 0
Использование функций работы со строкой
RInStr
Position=RInStr(String,Substring[,Start])
Возвращает позицию последнего обнаружения
Substring в String. Если Start задано, поиск
останавливается у позиции Start.
Если подстрока не находится, RInStr()
возвращает ноль. Примеры:
PRINT RInStr("Gambas is basic", "bas") --> 11
PRINT RInStr("Gambas is basic", "not") --> 0
Использование функций работы со строкой
Replace$
Result = Replace$ ( String , Pattern , ReplaceString )
Замещает каждое обнаружение строки Pattern в строке
String строкой ReplaceString , и возвращает результат.
Если String - это нуль, тогда возвращается нулевая строка.
Если Pattern - это нуль, тогда возвращается строка String.
Примеры:
PRINT Replace$("Gambas is basic", "bas", "BAS") --> GamBAS
is BASic
PRINT Replace$("Gambas is basic", "a", "") --> Gmbs is bsic
PRINT Replace$("Gambas is basic", " ", "--") --> Gambas--is-basic
Массивы.
Массив – это ряд переменных, объединенных одним
именем. Каждая переменная в данном ряду имеет свой
порядковый номер и значение. Переменную массива
называют элементом массива. Все элементы массива –
однотипны. Массив с именем А можно изобразить
следующей таблицей:
Для определения массива необходимо использовать
команду:
Dim A[20]
т.е. определен массив A в 20 элементов.
Array
array1 = Array ( Expression , ... )
Создает массив и возвращает его. Тип массива
- это тип первого выражения. Другое
выражение автоматически конвертируется.
Вы можете использовать синтаксис
квадратных скобок, как альтернативу Array()
подпрограмме.
Пример:
a = Array (“000”,”010”,”020”,”030”)
PRINT a(2) --> 020
Использование графических методов.
С помощью методов графики можно рисовать
графические примитивы: линии,
прямоугольники, многоугольники и эллипсы на
поверхности формы или в области для
рисования, а также выводить текст в нужном
месте.
DRAW.BEGIN(DRAWAREA1)
К объекту DRAWAREA1 применить метод
НАЧАТЬ РИСОВАНИЕ.
Параметром может выступить и форма,
например: DRAW.BEGIN(Form1)
DRAW.LINE (X1,Y1,X2,Y2)
Рисовать линию(отрезок) от (x1,y1) до (x2,y2).
Использование графических методов.
DRAW.RECT(X,Y, ширина, высота)
Нарисовать прямоугольник. Левый верхний угол
(X,Y). Ширина и высота заданы.
DRAW.ELLIPSE(X,Y, ширина, высота, начало
дуги, длина дуги)
Нарисовать эллипс. Первые 4 параметра – это
параметры описанного прямоугольника. Два
последних – параметры дуги в градусах,
задаются если нужна дуга, а не целый эллипс.
DRAW.POLYLINE(ОБЪЕКТ МАССИВ ТОЧЕК)
Нарисовать ломаную по заданным точкам. До
этой команды нужно определить объект и
присвоить значения координатам точек.
DRAW.POLYGON(ОБЪЕКТ МАССИВ ТОЧЕК)
Нарисовать многоугольник по заданным
точкам.
DRAW.PICTURE(ПУТЬ К ФАЙЛУ)
Нарисовать картинку из файла.
DRAW.TEXT(“Hello”,100,120)
Вывести текст на картинке в заданной точке.
DRAW.END()
Применить метод окончить рисование.
Перед рисунком фигуры нужно задать свойства
объекта рисунок:
FORECOLOR – цвет контура,
FILLCOLOR – цвет заливки,
FILLSTYLE – Стиль заливки:
0 - нет заливки,
1 – сплошная заливка,
2 – 14 – штриховки.
ПРИМЕР:
DRAW.FORECOLOR(255) ‘Задать голубой цвет контура
DRAW.FILLCOLOR(16711680) ‘Задать красный цвет заливки.
DRAW.FILLSTYLE(1) ‘Установить заливку сплошным цветом.
DRAW.RECT(10,10,100,50) ‘Нарисовать закрашенный
прямоугольник. Контур голубой. Внутри красный.
НОМЕРА ЦВЕТОВ:
0 - черный
16777215 - белый
16711680 - красный
16778060 - желтый
8388863 - фиолетовый
65280 - зеленый
255 - голубой
65525 - темно-синий
16711935 - пурпурный
16744448 - оранжевый
Остальные номера дают миллионы
различных оттенков цветов.
dim a[21] as integer
dim i,x,y as integer
for i=1 to 20
a[i]=int(rnd(10,200))
next
draw.begin(FMain)
x=40
y=300
for i=1 to 20
draw.rect(x,y,17,-a[i])
x=x+20
next
draw.end
Пример
программы
с графикой
Гистограмма
массива
Приглашаю всех вас
программировать под
Linux на Gambas!
Спасибо за внимание!
Download