Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Это один из примеров где лучше использовать плагин. Вот так примерно выглядит код на Делфи
Код
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;
var st:string; n,i:integer; c:array[1..4]of integer; s:array[1..4,1..3]of string; begin s[1,1]:='миллиард'; s[1,2]:='миллиарда'; s[1,3]:='миллиардов'; s[2,1]:='миллион'; s[2,2]:='миллиона'; s[2,3]:='миллионов'; s[3,1]:='тысяча'; s[3,2]:='тысячи'; s[3,3]:='тысяч'; s[4,1]:=''; s[4,2]:=''; s[4,3]:=''; write('Введите число до 2 147 483 647 n='); readln(n); st:=''; c[1]:=n div 1000000000; c[2]:=(n mod 1000000000) div 1000000; c[3]:=(n mod 1000000) div 1000; c[4]:=n mod 1000; for i:=1 to 4 do write(c[i],' '); writeln; for i:=1 to 4 do if c[i]<>0 then begin if c[i] div 100<>0 then case c[i] div 100 of 1:st:=st+'сто'; 2:st:=st+'двести'; 3:st:=st+'триста'; 4:st:=st+'четыреста'; 5:st:=st+'пятьсот'; 6:st:=st+'шестьсот'; 7:st:=st+'семьсот'; 8:st:=st+'восемьсот'; 9:st:=st+'девятьсот'; end; if (c[i] mod 100) div 10<>1 then begin case (c[i] mod 100) div 10 of 2:st:=st+' двадцать'; 3:st:=st+' тридцать'; 4:st:=st+' сорок'; 5:st:=st+' пятьдесят'; 6:st:=st+' шестьдесят'; 7:st:=st+' семьдесят'; 8:st:=st+' восемьдесят'; 9:st:=st+' девяносто'; end; case c[i] mod 10 of 1:if i=3 then st:=st+' одна' else st:=st+' один'; 2:if i=3 then st:=st+' две' else st:=st+' два'; 3:st:=st+' три'; 4:st:=st+' четыре'; 5:st:=st+' пять'; 6:st:=st+' шесть'; 7:st:=st+' семь'; 8:st:=st+' восемь'; 9:st:=st+' девять'; end; end else case (c[i] mod 100) of 10:st:=st+' десять'; 11:st:=st+' одиннадцать'; 12:st:=st+' двенадцать'; 13:st:=st+' тринадцать'; 14:st:=st+' четырнадцать'; 15:st:=st+' пятндцать'; 16:st:=st+' шестнадцать'; 17:st:=st+' семнадцать'; 18:st:=st+' восемнадцать'; 19:st:=st+' девятнадцать'; end; if (c[i] mod 100>=10) and (c[i] mod 100<=19) then st:=st+' '+s[i,3]+' ' else case c[i] mod 10 of 1:st:=st+' '+s[i,1]+' '; 2..4:st:=st+' '+s[i,2]+' '; 5..9,0:st:=st+' '+s[i,3]+' '; end; end; writeln(st); readln; end.
в NeoBook код будет на много больше. Но в целях развития можно попытаться написать. В принципе ничего сложного, просто слишком много писанины.
Для примера вот так мы запишем число от 1 до 19
Код
StrLen "[TextEntry1]" "[Result]"
IfEx "[Result]=1 or [Result]=2 and [TextEntry1]<20" SetVar "[Trunc]" "1" Math "Trunc([TextEntry1]/[Trunc])" "-1" "[Num]"
StrLen "[TextEntry1]" "[Result]" If "[Result]" "=" "3" SetVar "[Trunc]" "100" SetVar "[Result]" "сотни" EndIf IfEx "[Result]=4 or [Result]=5 or [Result]=6" SetVar "[Trunc]" "1000" SetVar "[Result]" "тысячи" EndIf IfEx "[Result]=7 or [Result]=8 or [Result]=9" SetVar "[Trunc]" "1000000" SetVar "[Result]" "миллионы" EndIf Math "Trunc([TextEntry1]/[Trunc])" "-1" "[Num]"
Взяли число, определили сначала допустим что это миллионы. получили сколько миллионов.
Код
IfEx "[Result]=7 or [Result]=8 or [Result]=9" SetVar "[Trunc]" "1000000" SetVar "[Result]" "миллионы" EndIf Math "Trunc([TextEntry1]/[Trunc])" "-1" "[Num]"
Добавили в этот код еще условие в каком случае пишется миллиона, миллионов и т.д.
Удалили сначала числа те цифры которые записали. Вычислили тысячи, записали. Удалили опять сначала числа. Вычислили сотни, записали и т.д. Не хочешь читать хелп?
Брать первую цифру в строке (должно быть разбито на группы по 3 знака) - она автоматом попадает на соответствующую порядковую переменную массива, а далее анализом длины и перебором группы подставлять соответствующее слово?
В принципе, все просто, единственная загвоздка - предусмотреть в обработке второй десяток (который от 11 до 19), остальное же формируется по шаблону.
БЛИН!!! Как уже задолбал своей бестолковостью и подвисаниями этот мозилла!!! Если б вы только знали, господа! С IE я горя не знал, а тут....
Ни на одну программу я так еще не матерился!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Да я тоже не особо напрягался. Кстати, надо учитывать еще и род: ОДИН миллион, ОДНА тысяча, и т.п. Ясно только, что задачу вполне возможно решить средствами NB, вот только подумать надобно, а оно как-то влом в последнее время.
Цитатаmishem ()
Я тебе по моему уже как то предлагал попробовать "Maxthon".
Не самый плохой вариант, но, в свое время, я перепробовал все, что только имеется, и ничего не устроило, а мозилла "ближе" всех к IE, по крайней мере, по интерфейсу. Самое жуткое впечатление произвел гугл-хлам - не броузер, а какая-то курсовая работа начинающего студента-программиста.
До сих пор так и не могу понять - ЗА ЧТО так ненавидели IE? Все предельно просто, понятно, быстро, любая шняга интегрируется в него без проблем, никакого хлама в виде бессмысленных "прибамбасов". Максимум отдачи при минимуме телодвижений!
Правда, веб-дизайнеры думают совершенно иначе, но это уже их внутренние проблемы, и рядового пользователя они не волнуют.
Я без IE в инете сейчас, как без рук!
Считай три года уже как "на мозилле", а матерюсь чем дальше, тем больше!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
У кого есть желание, можете оптимизировать код. Начиная с миллионов идет просто повторение кода с заменой текста. Так что если кому то надо больше, добавить не проблема.
Гм... Чего-то у тебя там слишком все "длинно" получилось - запаришься разбираться!
Мне думается, что можно все проще забацать(?), но подождем мнение автора темы, а то получится, как обычно - вопрос задали, паришься-паришься, а ТС пропал (хорошо если не навсегда), или "нужно, но не очень и не сейчас, это я типа спросил на всякий случай, из любопытства". Вспомни, например, эту тему.
Цитатаmishem ()
У кого есть желание, можете оптимизировать код.
Главное - чтобы работало, а оптимизация кода это уже "оттачивание мастерства", что в большинстве случаев считается излишеством. А представляешь сколько возможностей в Delphi оптимизировать код? Там это можно делать бесконечно!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Спасибо, я уже думал использовать JavaScript, только не понял как прикрутить к NB
Код
Number.prototype.toPhrase=function(c) // сумма прописью для чисел от 0 до 999 триллионов // можно передать параметр "валюта": RUB,USD,EUR (по умолчанию RUB) { var x=this.roundTo(2); if (x<0 || x>999999999999999.99) return false;
var currency='RUB'; if (typeof(c)=='string') currency=c.trimAll().toUpperCase();
if (currency=='RUR') currency='RUB'; if (currency!='RUB' && currency!='USD' && currency!='EUR') return false;
// цифры и числа // либо просто строка, либо 4 строки в хэше var names=new Array(); names[1]={0: 'один', 1: 'одна', 2: 'один', 3: 'один', 4: 'один'}; names[2]={0: 'два', 1: 'две', 2: 'два', 3: 'два', 4: 'два'}; names[3]='три'; names[4]='четыре'; names[5]='пять'; names[6]='шесть'; names[7]='семь'; names[8]='восемь'; names[9]='девять'; names[10]='десять'; names[11]='одиннадцать'; names[12]='двенадцать'; names[13]='тринадцать'; names[14]='четырнадцать'; names[15]='пятнадцать'; names[16]='шестнадцать'; names[17]='семнадцать'; names[18]='восемнадцать'; names[19]='девятнадцать'; names[20]='двадцать'; names[30]='тридцать'; names[40]='сорок'; names[50]='пятьдесят'; names[60]='шестьдесят'; names[70]='семьдесят'; names[80]='восемьдесят'; names[90]='девяносто'; names[100]='сто'; names[200]='двести'; names[300]='триста'; names[400]='четыреста'; names[500]='пятьсот'; names[600]='шестьсот'; names[700]='семьсот'; names[800]='восемьсот'; names[900]='девятьсот';
var r=''; var i,j;
var y=Math.floor(x);
// если НЕ ноль рублей if (y>0) { // выделим тройки с руб., тыс., миллионами, миллиардами и триллионами var t=new Array();
for (i=0;i<=4;i++) { t[i]=y%1000; y=Math.floor(y/1000); }
var d=new Array();
// выделим в каждой тройке сотни, десятки и единицы for (i=0;i<=4;i++) { d[i]=new Array(); d[i][0]=t[i]%10; // единицы d[i][10]=t[i]%100-d[i][0]; // десятки d[i][100]=t[i]-d[i][10]-d[i][0]; // сотни d[i][11]=t[i]%100; // две правых цифры в виде числа }
for (i=4; i>=0; i--) { if (t[i]>0) { if (names[d[i][100]]) r+=' '+ ((typeof(names[d[i][100]])=='object')?(names[d[i][100]][i]):(names[d[i][100]]));
if (names[d[i][11]]) r+=' '+ ((typeof(names[d[i][11]])=='object')?(names[d[i][11]][i]):(names[d[i][11]])); else { if (names[d[i][10]]) r+=' '+ ((typeof(names[d[i][10]])=='object')?(names[d[i][10]][i]):(names[d[i][10]])); if (names[d[i][0]]) r+=' '+ ((typeof(names[d[i][0]])=='object')?(names[d[i][0]][i]):(names[d[i][0]])); }
if (names[d[i][11]]) // если существует числительное j=d[i][11]; else j=d[i][0];
if (groups[i][j]) { if (i==0) r+=' '+groups[i][j][currency]; else r+=' '+groups[i][j]; } else { if (i==0) r+=' '+groups[i][-1][currency]; else r+=' '+groups[i][-1]; } } }
if (t[0]==0) r+=' '+groups[0][-1][currency]; } else r='Ноль '+groups[0][-1][currency];
y=((x-Math.floor(x))*100).roundTo(); if (y<10) y='0'+y;
добавлю копейку в копилку в виде функции.выдаёт число прописью. скрипт где то выдрал с просторов инета(идёт как функция в эксель), убрал лишнее,дописал немного. Определяет нормально до 20 миллиардов. Зачем надо больше- ума неприложу Возможно писать с десятичной дробью, определятья будет только целая часть.В архиве пример,функция.