FreeBasic
Главная
Вход
Регистрация
Среда, 16.10.2024, 07:23Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Примеры использования функций СИ
haavДата: Понедельник, 01.10.2012, 21:22 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Примеры использования функций СИ


В данной теме будут пополняться примеры с использованием стандартной библиотеки языка СИ


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Понедельник, 01.10.2012, 21:23 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Округление чисел


Code
#Include "crt/math.bi"

Const PI = Atn(1) * 4

? PI ' само значение
? ceil(pi)' до ближайшего большего
? floor(pi) ' до ближайшего меньшего
sleep


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Четверг, 04.10.2012, 07:35 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Репутация: 3
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 1 из 1
  • 1
Поиск: