| Автор |
Съобщение |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
 Деление на 1000 и премахване на задните нули, как?
Колеги наложи ми се да правя такова нещо от един масив с число в аски да направя друг масив но разделен на хиляда и премахнати задните нули, т.е - 1010 - 1,01; 455000 - 455; 34567 - 34,567. Направих го, но програмирането не ми е силна черта и ми изглежда много хамалски. Ако някой се сеща за по елегантен начин?
Последна промяна milenjs на Нед Авг 20, 2006 3:22 pm, променена общо 1 път
|
| Нед Авг 20, 2006 11:26 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Ами то в някои други теми си говорихме и за тоя недостатък да ползваш подобията на език за програмиране.
Като ти потрябва помощ няма кой да помага.
Иначе като гледам дъжината на кода не е чак хамалско решението.
Сега Rumen сигурно ще се набере и ще ти напише сигурно друго решение да ме опровергае но това няма да промени ситуацията 
|
| Нед Авг 20, 2006 12:02 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 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 |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 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 |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 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 |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Цъ, няма нищо подходящо, търся принципно решение без готови функции
|
| Пон Авг 21, 2006 11:59 am |
|
 |
|
logi
Ранг: Минаващ
Регистриран на: Нед Окт 02, 2005 9:02 pm Мнения: 73 Местоположение: Варна
|
А втория цикъл прави това за което е предназначен, щото аз като го гледам ми се струва че винаги дава само цялата част.
|
| Пет Авг 25, 2006 5:35 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Втория цикъл премахва излишните нули (аски 48) от дясно като терминира стринга с /0 докато стигне до първото число или ако поледното е запетайка (аски 44). Както казах кода си работи, върши работа и май ще остана на принципа че нещо което работи не се пипа /засега  /
|
| Пет Авг 25, 2006 8:58 pm |
|
 |
|
logi
Ранг: Минаващ
Регистриран на: Нед Окт 02, 2005 9:02 pm Мнения: 73 Местоположение: Варна
|
Вярно, не бях обърнал внимание къде точно е break-а.
Аз бих го реализирал като при претърсването за края на низа намирам и къде е последната различна от 0 цифра. После цикъл за копиране на цифрите преди запетаята. Проверка дали позицията на последната различна от 0 цифра е по-голяма от позицията на запетаята, и ако е така добавяна на запетая и цикъл за копиране до позицията на последната различна от 0 цифра.
Това решение не е принципно по-просто, само подредбата е по-различна.
|
| Пет Авг 25, 2006 10:53 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Благодаря за идеята logi, и така става. Искаше ми се да видя такова решение че като го видеш да се плеснеш по главата и да кажеш брех мама му как лесно ставало а аз какво правя, но май за някои неща просто такова няма.... с тези изразни средства де.
|
| Пет Авг 25, 2006 11:10 pm |
|
|