Примеры использования функций СИ
|
|
haav | Дата: Понедельник, 01.10.2012, 21:22 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Примеры использования функций СИ
В данной теме будут пополняться примеры с использованием стандартной библиотеки языка СИ
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Понедельник, 01.10.2012, 21:23 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Сортировка массивов с помощью функции QSORT
Code #Include "crt/stdlib.bi"
Dim iArray(100) As Integer
For i As Integer = 0 To 100 iArray(i) = Rnd*10000 Next
Function Compare Cdecl( iFirstarg As Any ptr, iSecondarg As Any Ptr) As Integer Dim As Integer iFirst = *Cast(Integer Ptr , iFirstarg) Dim As Integer iSecond = *Cast(Integer Ptr , iSecondarg) If iFirst < iSecond Then Return -1 If iFirst > iSecond Then Return 1 If iFirst = iSecond Then Return 0 End Function
qsort(@iArray(0),UBound(iArray)+1,4,@Compare())
For i As Integer = 0 To 100 ? i,iArray(i) Next
sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Понедельник, 01.10.2012, 21:30 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Пример вывода и ввода русских символов в консоль.
Работает на Linux и Windows. Используются функции GETCHAR и PUTCHAR
Code #Define Unicode #INCLUDE "crt/stdio.bi" DIM AS ZSTRING*100 S DIM AS UBYTE c VAR i = 0 print "введите строку" WHILE (c <> ASC(!"\n")) c = getchar() putchar(c) S[i] = c i += 1 : IF i > 98 THEN EXIT WHILE WEND : S[i] = 0
print "Вы ввели " ;S sleep
Если только для Windows, то прекраcно работает такой код (сохранять в UNICODE):
Code #Define Unicode #Include "crt/stdio.bi" Dim As ZString*100 S Print "Введите что хотите:" gets(@S) Print S Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 02.10.2012, 08:13 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Поиск в массиве с помощью bsearch
Code #Include "crt/stdlib.bi" Dim As ZString Ptr sBuf = @"ABCD" Dim As UByte bKey = Asc("D") Dim As Ubyte Ptr pSearch Function Compare Cdecl(pAnyFirst As Any Ptr, pAnySecond As Any Ptr) As Integer return *cast(ubyte Ptr,pAnyFirst) - *cast(ubyte Ptr,pAnySecond) End Function
pSearch = Cast(UByte Ptr,bsearch(@bKey, sBuf, 4, 1, @Compare)) ? Chr(*pSearch) sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 02.10.2012, 08:15 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Преобразование строк в числа
Code #Include "crt/stdlib.bi" Dim As String sValue = "523232.384992927"
? atof(sValue) ' DOUBLE ? atoi(sValue) ' Integer Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Четверг, 04.10.2012, 07:30 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Регистрация функции, которая вызывается при завершении программы
Code #Include "crt/stdlib.bi"
Sub myexit Print "End program" Sleep End Sub
atexit(Cast(Any Ptr,@myexit))
Dim a As Integer = 55 a+=100 Print a
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Четверг, 04.10.2012, 07:33 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Округление чисел
Code #Include "crt/math.bi"
Const PI = Atn(1) * 4
? PI ' само значение ? ceil(pi)' до ближайшего большего ? floor(pi) ' до ближайшего меньшего sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Четверг, 04.10.2012, 07:35 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Время выполнения программы
Code #Include "crt/time.bi" #define CLOCKS_PER_SEC 91.02
For i As Integer = 1 To 10000000 Next
? "Process returned 0 (0x0) execution time: " ;clock/CLOCKS_PER_SEC sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Пятница, 05.10.2012, 09:10 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Копирование массивов с помощью memcpy
Code #Include "crt.bi"
Dim As Byte bArrayFrom(100), bArrayTo(100)
'Заносим случайные данные в первый массив For i As Integer = 0 To 100 bArrayFrom(i) = Rnd*255 Next
' Копируем данные из массива bArrayFrom в массив bArrayTo memcpy(@bArrayTo(0),@bArrayFrom(0), 101)
' Считываем данные обоих массивов For i As Integer = 0 To 100 ? bArrayFrom(i), bArrayTo(i) Next Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Суббота, 06.10.2012, 15:34 | Сообщение # 10 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Использование функции форматированного вывода printf за подробным описанием идем: http://www.realcoding.net/article/view/1633
Code #include "crt.bi" printf(!"Hello world\n") dim myage as integer = 31 printf(!"Age %d\n",myage) dim myname as string myname="Sergey" dim nickname as string nickname="Electrik" printf (!"My name is %s, nickname is %s, age %d\n",myname,nickname,myage) ' символ '!' перед кавычками, нужен для включения режима управляющих символов. sleep Добавлено (06.10.2012, 15:34) --------------------------------------------- использование функций fopen, fclose, fprintf функция fopen открывает файл. функция fclose закрывает файл. функция fprintf предназначена для вывода в поток форматированных данных. у функции fprintf правила форматирования такие же как и у printf. различие лишь в том, что первым параметром функции является указатель на поток в который мы хотим выводить форматированные данные.
Code #include "crt.bi" ' программа выводит в поток stderr строку функцией fprintf открывает файл функцией fopen, выводит в поток открытого файла тестовую строку функцией fprintf. ' закрывает файл функцией fclose fprintf(stderr,!"Please find and open file test.txt\n") dim as file ptr fp fp = fopen("test.txt", "wb") if fp = null then print "error open file" end 1 end if fprintf(fp, !"this is test %d %f", 28, 04.06) fclose(fp) sleep 5
рекомендую почитать: "Герберт Шилдт - полный справочник по C"
|
|
| |
haav | Дата: Среда, 10.10.2012, 07:00 | Сообщение # 11 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Деление с помощью DIV
Очень часто нужно при делении получить как частное так и остаток, но средствами Freebasic одной командой это сделать нельзя. А вот средствами стандартной библиотеки СИ пожалуйста:
Code #Include "crt.bi"
Dim As Integer numerator = 100 Dim As Integer denominator = 12 Dim As DIV_T div_t
div_t = div(numerator,denominator)
Print div_t.quot 'частное Print div_t.rem_ 'остаток Sleep
Работает только с целыми числами
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Четверг, 11.10.2012, 07:44 | Сообщение # 12 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Определение символа
Code #Include "crt.bi"
Shell "chcp 1251" Cls
Dim As String sBuf = "String - 5500"
Print "Функция ISALNUM" If isalnum(sBuf[2]) Then Print "3 символ в слове ""String - 5500"" является буквой или цифрой" Else Print "3 символ в слове ""String - 5500"" не является буквой или цифрой" EndIf Print Print
Print "Функция ISALPHA" If isalpha(sBuf[11]) Then Print "12 символ в слове ""String - 5500"" является буквой" Else Print "12 символ в слове ""String - 5500"" не является буквой" EndIf Print Print
Print "Функция ISDIGIT" If isdigit(sBuf[11]) Then Print "12 символ в слове ""String - 5500"" является цифрой" Else Print "12 символ в слове ""String - 5500"" не является цифрой" EndIf Print Print
Print "Функция ISGRAPH" If isgraph(sBuf[6]) Then Print "7 символ в слове ""String - 5500"" является видимым" Else Print "7 символ в слове ""String - 5500"" не является видимым, возможно это пробел, табуляция..." EndIf Print Print
Print "Функция ISLOWER" If islower(sBuf[0]) Then Print "1 символ в слове ""String - 5500"" является буквой нижнего регистра" Else Print "1 символ в слове ""String - 5500"" не является буквой нижнего регистра" EndIf Print Print
Print "Функция ISUPPER" If isupper(sBuf[0]) Then Print "1 символ в слове ""String - 5500"" является буквой верхнего регистра" Else Print "1 символ в слове ""String - 5500"" не является буквой верхнего регистра" EndIf Print Print
Print "Функция ISPRINT" If isprint(sBuf[0]) Then Print "1 символ в слове ""String - 5500"" является печатаемым" Else Print "1 символ в слове ""String - 5500"" не является печатаемым" EndIf Print Print
sBuf = "Казнить нельзя,помиловать!!" Print "Функция ISPUNCT" If ispunct(sBuf[14]) Then Print "15 символ в слове ""Казнить нельзя,помиловать!!"" является пунктуационным" Else Print "15 символ в слове ""Казнить нельзя,помиловать!!"" не является пунктуационным" EndIf Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Вторник, 23.10.2012, 09:38 | Сообщение # 13 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Сравнение блоков памяти
Code #Include "crt.bi"
Dim As UByte bArray(10), bArray2(10),bArray3(10) Dim As Integer iResult
For i As Integer = 0 To 10 bArray(i) = Rnd*255 bArray2(i) = bArray(i) bArray3(i) = 255 Next
Print "Comparing: bArray and bArray2"
iResult = memcmp(@bArray(0),@bArray2(0),UBound(bArray))
Select Case iResult Case 0 Print "Arrays equal" Case Else Print "Arrays not equal" End Select
Print "Comparing: bArray and bArray3"
iResult = memcmp(@bArray(0),@bArray3(0),UBound(bArray))
Select Case iResult Case 0 Print "Arrays equal" Case Else Print "Arrays not equal" End Select
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |