Отговори на тема  [ 13 мнения ] 
Деление на 1000 и премахване на задните нули, как? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение Деление на 1000 и премахване на задните нули, как?
Колеги наложи ми се да правя такова нещо от един масив с число в аски да направя друг масив но разделен на хиляда и премахнати задните нули, т.е - 1010 - 1,01; 455000 - 455; 34567 - 34,567. Направих го, но програмирането не ми е силна черта и ми изглежда много хамалски. Ако някой се сеща за по елегантен начин?

Код:
Dim Help As Byte
Dim i As Byte
Dim j As Byte
Dim Result_String[10] As Byte
Dim LcdStr[10] As Byte
Dim Result As DWord


here:
HRSin Dec Result
    StrN Result_String = Str$ (Dec Result)   
    Help = 0
    While Result_String[Help] <> 0  : Help = Help + 1 : Wend
    j = Help - 3   
     For i = 0 To Help
       If j = i Then
          LcdStr[i] = 44
       Else
          If j > i Then
             LcdStr[i] = Result_String[i]
          Else
             LcdStr[i] = Result_String[i-1]
          EndIf
       EndIf
     Next
    LcdStr[i]=0
    For i = Help To 0 Step -1
      If LcdStr[i] = 48 Then
         LcdStr[i] = 0
      Else
         If LcdStr[i] = 44 Then
            LcdStr[i] = 0
         EndIf
         Break
      EndIf
    Next
    Print At 1,1, Str LcdStr
GoTo here


Последна промяна milenjs на Нед Авг 20, 2006 3:22 pm, променена общо 1 път



Нед Авг 20, 2006 11:26 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Ами то в някои други теми си говорихме и за тоя недостатък да ползваш подобията на език за програмиране.
Като ти потрябва помощ няма кой да помага.
Иначе като гледам дъжината на кода не е чак хамалско решението.

Сега Rumen сигурно ще се набере и ще ти напише сигурно друго решение да ме опровергае но това няма да промени ситуацията :)


Нед Авг 20, 2006 12:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение 
Не е чак най-подходящия език за сложни неща но за аматьори като мен върши работа, а и не остава време да се впусна в нещо по сериозно. То за това и програмите ми са някаква смесица 50/50 протон/асемблер...
Интересува ме подходящ алгоритъм без значение езика, важна е идеята, щот като гледам по някога елементарни хватки вършат работата на сумати писани ама въпроса е да се сетиш навреме...
Между другото тази задачка да си я напиша на асм ми е в пъти по лесно може би немога да се отуча да мисля на асм когато пиша нещо :(


Нед Авг 20, 2006 3:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Това не го разбрах. На примерите е просто делене на 1000.


Пон Авг 21, 2006 10:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение 
Рек, така си е - просто деление на 1000 и премахване след това на задните нули + премахване на запетайката в стринга ако е последна, т.е. да не се получи примерно 12, .Не искам да ползвам обаче плаваща запетайка. Идеята ми в общи линии е следната - преброявам цифрите в стринга, от тях изваждам 3 и това число ми дава след коя цифра е запетайката. След това прехвърлям от началния стринг цифрите в изходния като поставям запетайката на вече известното и място. Накрая обшождам изходния стринг отзад напред и следя и премахвам нулите до първото число. При намирането му или намирането на запетая излизам и съм готов.
Работи си перфектно, но както казах ми се вижда хамалско решение... Нека някой програмист да предложи нещо по елегантно /най-вече с по-малко код/ че като гледам как заплашително ми свършва програмната памет :(


Пон Авг 21, 2006 10:45 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Ами по начало деленето на цели числа си дава пак цяло число?! :? Продължавам да не разбирам. Дай някакъв пример как би следвало да работи ф-ята.


Пон Авг 21, 2006 11:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение 
22/7 не е цяло число. 123450 / 1000 = 123,450 на мен ми трябва като стринг "123,45". Това е идея обаче - да деля целочисленно на 1000 и да ползвам резултата и остатъка от делението. Дали обаче ще стане по компактно - трябва да се пробва.


Пон Авг 21, 2006 11:28 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
В този бейсик няма ли ф-ята Format?


Пон Авг 21, 2006 11:40 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение 
Цъ, няма нищо подходящо, търся принципно решение без готови функции


Пон Авг 21, 2006 11:59 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 02, 2005 9:02 pm
Мнения: 73
Местоположение: Варна
Мнение 
А втория цикъл прави това за което е предназначен, щото аз като го гледам ми се струва че винаги дава само цялата част.


Пет Авг 25, 2006 5:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение 
Втория цикъл премахва излишните нули (аски 48) от дясно като терминира стринга с /0 докато стигне до първото число или ако поледното е запетайка (аски 44). Както казах кода си работи, върши работа и май ще остана на принципа че нещо което работи не се пипа /засега :D /


Пет Авг 25, 2006 8:58 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 02, 2005 9:02 pm
Мнения: 73
Местоположение: Варна
Мнение 
Вярно, не бях обърнал внимание къде точно е break-а.
Аз бих го реализирал като при претърсването за края на низа намирам и къде е последната различна от 0 цифра. После цикъл за копиране на цифрите преди запетаята. Проверка дали позицията на последната различна от 0 цифра е по-голяма от позицията на запетаята, и ако е така добавяна на запетая и цикъл за копиране до позицията на последната различна от 0 цифра.
Това решение не е принципно по-просто, само подредбата е по-различна.


Пет Авг 25, 2006 10:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Мар 08, 2006 2:12 pm
Мнения: 2017
Местоположение: Котел
Мнение 
Благодаря за идеята logi, и така става. Искаше ми се да видя такова решение че като го видеш да се плеснеш по главата и да кажеш брех мама му как лесно ставало а аз какво правя, но май за някои неща просто такова няма.... с тези изразни средства де.


Пет Авг 25, 2006 11:10 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 13 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни