Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 10.07.2010, 19:28   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Циферки числа

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

Я тут подумал перевести число в строку, но из строки мне показалось затруднительным вытаскивать отдельные символы, вот в паскале например так можно обращаться к ним s=string[i]. А тут нет.
И div`а нет нормального.
Вообщем так то Спасибо!
(Offline)
 
Ответить с цитированием
Старый 10.07.2010, 19:35   #2
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Циферки числа

Смотри в хелпе описание функции mid будешь удивлен.
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
ELIAS (10.07.2010), Reizel (21.01.2011)
Старый 10.07.2010, 19:52   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Циферки числа

Я тут подумал перевести число в строку
эээ.. вообще-то решается взятием остатка от деления или делением - реализация зависти от конкретики задачи
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
выше пример, для разложения числа типа хххххх.х (таковы условия) - расширить не сложно.
Если же чисо прнципиально не умещается в разарядной сетке (что - не твой случай) - то да: строки.
Незначащие нули можно обрезать после, или тупо не записывать.
Строки здесь, имхо, индусский код.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
ELIAS (10.07.2010), Randomize (10.07.2010), Reizel (21.01.2011), tormoz (10.07.2010)
Старый 10.07.2010, 20:17   #4
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Ответ: Циферки числа

Хм... Можно так:

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
__________________
Единственный завершенный проект: http://spacegrinder.narod.ru/
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (10.07.2010)
Старый 10.07.2010, 20:42   #5
is.SarCasm
Бывалый
 
Аватар для is.SarCasm
 
Регистрация: 17.05.2009
Адрес: Днепропетровск
Сообщений: 672
Написано 180 полезных сообщений
(для 428 пользователей)
Ответ: Циферки числа

что за говнокод.
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо is.SarCasm за это полезное сообщение:
Dj_smart (16.08.2010), Flash (11.07.2010), impersonalis (11.07.2010), Randomize (31.08.2010), Reizel (21.01.2011), Reks888 (10.07.2010)
Старый 10.07.2010, 20:47   #6
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Ответ: Циферки числа

Сообщение от Igorian Посмотреть сообщение
что за говнокод.
Это просто пример, а не готовая ф-я. Со своей задачей справляется.
__________________
Единственный завершенный проект: http://spacegrinder.narod.ru/
(Offline)
 
Ответить с цитированием
Старый 10.07.2010, 21:13   #7
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Циферки числа

impersonalis, твой код очень пригодился!
Но вот прогаю на блитце 2 года, и встретил в коде много нового
что такое V[7] (ну я догадваюсь что массив кончено, однако почему скобки квадратные)?
И ещё зачем слово Local перед переменными?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (11.07.2010)
Старый 10.07.2010, 23:36   #8
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: Циферки числа

прогаю на блитце 2 года
Не знаю чем ты занимался два года, я знаком с блицем 8 месяцев и 18 дней.
почему скобки квадратные
Потому что блиц решил бы что это функция, если скобки были круглые. Круглые скобки юзай после объявления массива как Dim, если он объявляется как переменная - ставим квадратные скобки(та же проблема если массив в типе).
зачем слово Local перед переменными
Это плохое влияние Pascal, C и других нормальных языков - объявление переменных перед использованием . Приведу псевдокод в пример:
Объявляем Game
Game увеличить на 1
Если Came=15 то всем хорошо
В Basic-подобных языках нам просто объявят переменную Came, которая как видно никогда не будет равнятся 15, и ты долго будешь искать что в коде не так.
В остальных же - компилятор выдаст ошибку, что переменная Came не инициализирована и ты сможешь исправить код за 5 секунд.
Кроме того если переменные приходится каждый раз объявлять перед исполнением, то(статистика) формируется рациональное мышление и этих переменных используется в разы меньше чем при их автоматическом создании. Думаю преимущества этого метода очевидны.
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (10.07.2010)
Старый 10.07.2010, 23:55   #9
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Циферки числа

Reks888, спасибо, очень познавательно
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reks888 (11.07.2010)
Старый 11.07.2010, 00:09   #10
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Ответ: Циферки числа

Сообщение от Reks888 Посмотреть сообщение
Это плохое влияние Pascal, C и других нормальных языков - объявление переменных перед использованием .
Мне кажется, что преимущество basic-подобных языков именно в том, что они ничего не навязывают: хочешь, объявляй, хочешь - нет. Помню, в VB6 была даже специальная директива, делающая объявление обязательным...
__________________
Единственный завершенный проект: http://spacegrinder.narod.ru/
(Offline)
 
Ответить с цитированием
Старый 11.07.2010, 00:27   #11
Flash
Нуждающийся
 
Регистрация: 26.04.2006
Сообщений: 66
Написано 8 полезных сообщений
(для 21 пользователей)
Ответ: Циферки числа

Сообщение от Maxim1441 Посмотреть сообщение
Хм... Можно так:

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
не позорился бы с таким кодом, это код блондинок.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (21.01.2011)
Старый 11.07.2010, 00:32   #12
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: Циферки числа

Код Максима кстати можно немного укоротить:
Function GetDigit$(val%,pos%)
 Return Mid(val%,pos%,1)
End Function
Ну это так, для справки
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Старый 11.07.2010, 01:01   #13
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Циферки числа

Сообщение от Reks888 Посмотреть сообщение

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

нет-с поищи на форуме основное применение (хотя, поначалу, это может быть и влиянием "старших" языков):
У тебя может быть глобальная перменная (global Gravity, например) и локальная (local Gravity) в твоей функции. При помощи идентификатора ты это явно указываешь. По сути - манипулятор области видимости имён.
В других языках это также встречается в той, или иной реализации.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 11.07.2010, 02:33   #14
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Ответ: Циферки числа

Сообщение от Reks888 Посмотреть сообщение
Код Максима кстати можно немного укоротить:
Function GetDigit$(val%,pos%)
 Return Mid(val%,pos%,1)
End Function
Хм... И что это даст? Одну из цифр в числе. Но тогда сначала надо выяснить, сколько в числе цифр, потом где-то хранить все их. А если это реализовывать, то получится такое же говно, что и я написал
__________________
Единственный завершенный проект: http://spacegrinder.narod.ru/
(Offline)
 
Ответить с цитированием
Старый 11.07.2010, 02:44   #15
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Циферки числа

Сообщение от Maxim1441 Посмотреть сообщение
Хм... И что это даст? Одну из цифр в числе. Но тогда сначала надо выяснить, сколько в числе цифр, потом где-то хранить все их. А если это реализовывать, то получится такое же говно, что и я написал
это намёк, на то, что преобразование число-строка реализовано в blitz на уровне тайп-каст-а. Поэтому селектор - не нужен.
Да и в языках где не всё так радужно, спасает конструкция типа
Asc("...")-48
где "..." необохдимая цифра в виде строки

ап
тююю - да у тебя и селектор перебирает цифры от 1 до 10 : цифры это от 0 до 9. Интересно как это ты конструкцией Mid(b$,i,1) получишь "10" - двухбайтовую строку?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Reizel (21.01.2011), Reks888 (11.07.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com