forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Циферки числа (http://forum.boolean.name/showthread.php?t=12884)

ELIAS 10.07.2010 19:28

Циферки числа
 
Привет
Помогите из числа выдрать отдельные цифры в блитце.

Я тут подумал перевести число в строку, но из строки мне показалось затруднительным вытаскивать отдельные символы, вот в паскале например так можно обращаться к ним s=string[i]. А тут нет.
И div`а нет нормального.
Вообщем так то:) Спасибо!

SBJoker 10.07.2010 19:35

Ответ: Циферки числа
 
Смотри в хелпе описание функции mid будешь удивлен.

impersonalis 10.07.2010 19:52

Ответ: Циферки числа
 
Цитата:

Я тут подумал перевести число в строку
эээ.. вообще-то решается взятием остатка от деления или делением - реализация зависти от конкретики задачи
Код:

Local V%[6]
        Local S#=value
        For i=6 To 0 Step -1
                Local d#=10^(i-1)
                V[i]=Floor(S/d)
                S=S-V[i]*d
        Next

выше пример, для разложения числа типа хххххх.х (таковы условия) - расширить не сложно.
Если же чисо прнципиально не умещается в разарядной сетке (что - не твой случай) - то да: строки.
Незначащие нули можно обрезать после, или тупо не записывать.
Строки здесь, имхо, индусский код.

Maxim1441 10.07.2010 20:17

Ответ: Циферки числа
 
Хм... Можно так:

Код:

Dim cif(100)
Cls
a=1234
Print "Число: " + a
b$=a
l=Len(b$)
Dim cif(l)

For i=1 To l
Select Mid(b$,i,1)
Case "1"
cif(i)=1
Case "2"
cif(i)=2
Case "3"
cif(i)=3
Case "4"
cif(i)=4
Case "5"
cif(i)=5
Case "6"
cif(i)=6
Case "7"
cif(i)=7
Case "8"
cif(i)=8
Case "9"
cif(i)=9
Case "10"
cif(i)=10
End Select
Print  "Число №" + i + " - " + cif(i)
Next

While Not KeyHit (1)
Wend


is.SarCasm 10.07.2010 20:42

Ответ: Циферки числа
 
что за говнокод.

Maxim1441 10.07.2010 20:47

Ответ: Циферки числа
 
Цитата:

Сообщение от Igorian (Сообщение 154118)
что за говнокод.

Это просто пример, а не готовая ф-я. Со своей задачей справляется.

ELIAS 10.07.2010 21:13

Ответ: Циферки числа
 
impersonalis, твой код очень пригодился!
Но вот прогаю на блитце 2 года, и встретил в коде много нового:)
что такое V[7] (ну я догадваюсь что массив кончено, однако почему скобки квадратные)?
И ещё зачем слово Local перед переменными?

Reks888 10.07.2010 23:36

Ответ: Циферки числа
 
Цитата:

прогаю на блитце 2 года
Не знаю чем ты занимался два года, я знаком с блицем 8 месяцев и 18 дней.
Цитата:

почему скобки квадратные
Потому что блиц решил бы что это функция, если скобки были круглые. Круглые скобки юзай после объявления массива как Dim, если он объявляется как переменная - ставим квадратные скобки(та же проблема если массив в типе).
Цитата:

зачем слово Local перед переменными
Это плохое влияние Pascal, C и других нормальных языков - объявление переменных перед использованием :-D. Приведу псевдокод в пример:
Код:

Объявляем Game
Game увеличить на 1
Если Came=15 то всем хорошо

В Basic-подобных языках нам просто объявят переменную Came, которая как видно никогда не будет равнятся 15, и ты долго будешь искать что в коде не так.
В остальных же - компилятор выдаст ошибку, что переменная Came не инициализирована и ты сможешь исправить код за 5 секунд.
Кроме того если переменные приходится каждый раз объявлять перед исполнением, то(статистика) формируется рациональное мышление и этих переменных используется в разы меньше чем при их автоматическом создании. Думаю преимущества этого метода очевидны.

ELIAS 10.07.2010 23:55

Ответ: Циферки числа
 
Reks888, спасибо, очень познавательно:)

Maxim1441 11.07.2010 00:09

Ответ: Циферки числа
 
Цитата:

Сообщение от Reks888 (Сообщение 154147)
Это плохое влияние Pascal, C и других нормальных языков - объявление переменных перед использованием :-D.

Мне кажется, что преимущество basic-подобных языков именно в том, что они ничего не навязывают: хочешь, объявляй, хочешь - нет. Помню, в VB6 была даже специальная директива, делающая объявление обязательным...

Flash 11.07.2010 00:27

Ответ: Циферки числа
 
Цитата:

Сообщение от Maxim1441 (Сообщение 154113)
Хм... Можно так:

Код:

Dim cif(100)
Cls
a=1234
Print "Число: " + a
b$=a
l=Len(b$)
Dim cif(l)

For i=1 To l
Select Mid(b$,i,1)
Case "1"
cif(i)=1
Case "2"
cif(i)=2
Case "3"
cif(i)=3
Case "4"
cif(i)=4
Case "5"
cif(i)=5
Case "6"
cif(i)=6
Case "7"
cif(i)=7
Case "8"
cif(i)=8
Case "9"
cif(i)=9
Case "10"
cif(i)=10
End Select
Print  "Число №" + i + " - " + cif(i)
Next

While Not KeyHit (1)
Wend


не позорился бы с таким кодом, это код блондинок.

Reks888 11.07.2010 00:32

Ответ: Циферки числа
 
Код Максима кстати можно немного укоротить:
Код:

Function GetDigit$(val%,pos%)
 Return Mid(val%,pos%,1)
End Function

Ну это так, для справки :-D

impersonalis 11.07.2010 01:01

Ответ: Циферки числа
 
Цитата:

Сообщение от Reks888 (Сообщение 154147)

Это плохое влияние Pascal, C и других нормальных языков - объявление переменных перед использованием :-D.

>>:(
нет-с поищи на форуме основное применение (хотя, поначалу, это может быть и влиянием "старших" языков):
У тебя может быть глобальная перменная (global Gravity, например) и локальная (local Gravity) в твоей функции. При помощи идентификатора ты это явно указываешь. По сути - манипулятор области видимости имён.
В других языках это также встречается в той, или иной реализации.

Maxim1441 11.07.2010 02:33

Ответ: Циферки числа
 
Цитата:

Сообщение от Reks888 (Сообщение 154162)
Код Максима кстати можно немного укоротить:
Код:

Function GetDigit$(val%,pos%)
 Return Mid(val%,pos%,1)
End Function


Хм... И что это даст? Одну из цифр в числе. Но тогда сначала надо выяснить, сколько в числе цифр, потом где-то хранить все их. А если это реализовывать, то получится такое же говно, что и я написал :-D

impersonalis 11.07.2010 02:44

Ответ: Циферки числа
 
Цитата:

Сообщение от Maxim1441 (Сообщение 154181)
Хм... И что это даст? Одну из цифр в числе. Но тогда сначала надо выяснить, сколько в числе цифр, потом где-то хранить все их. А если это реализовывать, то получится такое же говно, что и я написал :-D

это намёк, на то, что преобразование число-строка реализовано в blitz на уровне тайп-каст-а. Поэтому селектор - не нужен.
Да и в языках где не всё так радужно, спасает конструкция типа
Код:

Asc("...")-48
где "..." необохдимая цифра в виде строки

ап
тююю - да у тебя и селектор перебирает цифры от 1 до 10 : цифры это от 0 до 9. Интересно как это ты конструкцией Mid(b$,i,1) получишь "10" - двухбайтовую строку?


Часовой пояс GMT +4, время: 11:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot