Программирование в среде 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! Спасибо за внимание!