Пятница, 15 Ноя 2024, 08:45
Uchi.ucoz.ru
Меню сайта
Форма входа

Категории раздела
Высшая математика [11]
Экономическая социология [95]
Основы Менеджмента [64]
Бухгалтерский учёт [157]
Философия [163]
Мировая Экономика [603]
Бизнес планирование [29]
Финансирование и кредитование инвест [105]
Ценообразование [46]
Гражданское право [196]
Права Человека [173]
Основы Маркетинга [207]
Основы энергосбережения [55]
Информатика [0]
Экология и устойчивое развитие [0]
Физика для студентов [0]
Основы права [0]
Политология [0]
Не стандартные примеры на Delphi [169]
Примеры на Delphi7 [108]
Алгоритмы [94]
API [110]
Pascal [152]
Базы Данных [6]
Новости
Чего не хватает сайту?
500
Статистика
Зарегистрировано на сайте:
Всего: 51643


Онлайн всего: 78
Гостей: 78
Пользователей: 0
Яндекс.Метрика
Рейтинг@Mail.ru

Каталог статей


Главная » Статьи » Студентам » Алгоритмы

Число строкой III
Вот еще одно решение, присланное читателем.

unit
RoubleUnit;

http:\\anton-bl.chat.ru\delphi\1001.htm }
{ 1000011.01->'Один миллион
одинадцать рублей 01 копейка'
}
interface
Function
RealToRouble(c:Extended):String;
implementation
uses
SysUtils,math;
const Max000 = 6;{Кол-во триплетов - 000}

MaxPosition=Max000*3;{Кол-во знаков в числе }//Аналог IIF в Dbase есть в proc.pas
для основных типов, частично объявлена тут для
независимости
function IIF(i:Boolean;s1,s2:Char ):Char
;overload;begin if i then result:=s1 else result:=s2
end;
function IIF(i:Boolean;s1,s2:String ):String
;overload;begin if i then result:=s1 else result:=s2
end;

Function NumToStr(s:String):String;{Возвращает число прописью}
Const c1000
:array[0..Max000]of string =('' ,'тысяч','миллион','миллиард','триллион','квадраллион','квинтиллион');

c1000w:array[0..Max000]of
Boolean=(False,True ,False ,False ,False ,False
,False );
w:Array[False..True,'0'..'9']of String[3]=(('ов ',' ','а
','а ','а ','ов ','ов ','ов
','ов ','ов '),
(' ' ,'а
','и ','и ','и ',' ','
',' ',' ',' '));
function
Num000toStr(S:String;woman:Boolean):String;{Num000toStr возвращает число для триплета}
const c100:Array['0'..'9']of String=('','сто ' ,'двести ' ,'триста ' ,'четыреста ','пятьсот ','шестьсот ','семьсот ' ,'восемьсот ' ,'девятьсот ');
c10:Array['0'..'9']of String=('','десять ','двадцать ','тридцать ','сорок ','пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ','девяносто ');
c11:Array['0'..'9']of String=('','один','две','три','четыр','пят','шест','сем','восем','девят');
c1:Array[False..True,'0'..'9']of String=(('','один ','два ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять '),
('','одна
','две ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять '));
begin{Num000toStr}
Result:=c100[s[1]]+iif((s[2]='1')and(s[3]>'0'),c11[s[3]]+'надцать ',c10[s[2]]+c1[woman,s[3]]);
end;{Num000toStr}
var s000:String[3];

isw,isMinus:Boolean;
i:integer;//Счётчик
триплетовBegin

Result:='';i:=0;
isMinus:=(s<>'') and
(s[1]='-');
if isMinus then s:=Copy(s,2,Length(s)-1);
while not((i>=Ceil(Length(s)/3))or(i>=Max000)) do
begin
s000:=Copy('00'+s,Length(s)-i*3,3);
isw:=c1000w[i];
if (i>0)and(s000<>'000')
then//тысячи и т.д.
Result:=c1000[i]+w[Isw,iif(s000[2]='1','0',s000[3])]+Result;
Result:=Num000toStr(s000,isw)+Result;
Inc(i)
end;
if Result='' then
Result:='ноль';
if isMinus then Result:='минус
'+Result;End;{NumToStr}

Function
RealToRouble(c:Extended):String;

Const ruble :array['0'..'9']of string[2]=('ей','ь','я','я','я','ей','ей','ей','ей','ей');
Kopeek:array['0'..'9']of string[3]=('ек','йка','йки','йки','йки','ек','ек','ек','ек','ек');

Function ending(const s:String):Char;
var l:Integer;//С l на 8 байт коротче
$50->$48->$3F
begin//Возвращает индекс
окончания
l:=Length(s);
Result:=iif((l>1) and (s[l-1]='1'),'0',s[l]);
end;
var
rub:String[MaxPosition+3];
kop:String[2];
begin{Возвращает число прописью с рублями и копейками}

Str(c:MaxPosition+3:2,Result);
if Pos('E',Result)=0 then//Если число можно
представить в строке <>1E+99
begin
rub:=TrimLeft(Copy(Result,1,Length(Result)-3));
kop:= Copy(Result,Length(Result)-1,2) ;
Result:=NumToStr(rub)+' рубл'+
ruble[ending(rub)]
+' '+ kop +'
копе'+Kopeek[ending(kop)];
Result:=AnsiUpperCase(Result[1])+Copy(Result,2,Length(Result)-1);
end;end;
end.
Категория: Алгоритмы | Добавил: Lerka (21 Ноя 2012)
Просмотров: 507 | Рейтинг: 1.0/ 6 Оштрафовать | Жаловаться на материал
Похожие материалы
Всего комментариев: 0

Для блога (HTML)


Для форума (BB-Code)


Прямая ссылка

Профиль
Пятница
15 Ноя 2024
08:45


Вы из группы: Гости
Вы уже дней на сайте
У вас: непрочитанных сообщений
Добавить статью
Прочитать сообщения
Регистрация
Вход
Улучшенный поиск
Поиск по сайту Поиск по всему интернету
Наши партнеры
Интересное
Популярное статьи
Портфолио ученика начальной школы
УХОД ЗА ВОЛОСАМИ ОЧЕНЬ ПРОСТ — ХОЧУ Я ЭТИМ ПОДЕЛИТ...
Диктанты 2 класс
Детство Л.Н. Толстого
Библиографический обзор литературы о музыке
Авторская программа элективного курса "Практи...
Контрольная работа по теме «Углеводороды»
Поиск
Главная страница
Используются технологии uCoz