Понедельник, 29 Апр 2024, 19:36
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
Статистика
Зарегистрировано на сайте:
Всего: 51635


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

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


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

Число строкой V
Вот еще одно решение, присланное Олегом Клюкач.

unit
Numinwrd;

interface
function sMoneyInWords( Nin: currency ):
string; export;
function szMoneyInWords( Nin: currency
): PChar; export;
{ Денежная сумма Nin в рублях и
копейках прописью

1997, в.2.1, by
О.В.Болдырев}
implementation
uses
SysUtils,Dialogs,Math;

type

tri=string[4];
mood=1..2;
gender=(m,f);
uns =array[0..9] of string[7];
tns =array[0..9] of string[13];
decs=array[0..9] of string[12];
huns=array[0..9] of string[10];
nums=array[0..4] of string[8];
money=array[1..2] of string[5];
endings=array[gender,mood,1..3] of tri;{окончания числительных и
денег}
const

units:uns =('','один
','два ','три ','четыре ','пять ',
'шесть ','семь
','восемь ','девять
');
unitsf:uns=('','одна
','две ','три ','четыре ','пять ',
'шесть ','семь
','восемь ','девять
');
teens:tns= ('десять ','одиннадцать ','двенадцать ','тринадцать ',
'четырнадцать ','пятнадцать ','шестнадцать ',
'семнадцать ','восемнадцать ','девятнадцать
');
decades:decs=('','десять ','двадцать ','тридцать ','сорок ',
'пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ',
'девяносто ');
hundreds:huns=('','сто
','двести ','триста
','четыреста ',
'пятьсот ','шестьсот
','семьсот ','восемьсот
',
'девятьсот ');
numericals:nums=('','тысяч','миллион','миллиард','триллион');
RusMon:money=('рубл','копе');
ends:endings=((('','а','ов'),('ь','я','ей')),
(('а','и',''),('йка','йки','ек')));threadvar

str: string;
function EndingIndex(Arg:
integer): integer;
begin

if ((Arg div 10) mod
10) <> 1 then
case (Arg mod 10)
of
1: Result := 1;
2..4: Result :=
2;
else Result := 3;
end
else
Result := 3;end;

function sMoneyInWords( Nin:
currency ): string; { Число Nin прописью, как функция
}
var
// str: string;

g: gender; //род
Nr: comp; {целая часть числа}
Fr: integer; {дробная часть
числа}
i,iTri,Order: longint; {триада}

procedure Triad;
var
iTri2: integer;
un, de, ce :byte; //единицы, десятки,
сотни

function GetDigit: byte;
begin
Result := iTri2 mod 10;
iTri2 := iTri2 div 10;
end;

begin
iTri := trunc(Nr/IntPower(1000,i));
Nr := Nr - int( iTri*IntPower(1000,i));
iTri2:=iTri;
if iTri > 0 then
begin
un := GetDigit;
de := GetDigit;
ce := GetDigit;
if i=1 then g:=f
else g:=m; {женского рода только
тысяча}

str := TrimRight(str)+'
'+Hundreds[ce];
if de = 1 then
str := TrimRight(str)+' '+Teens[un]
else
begin
str := TrimRight(str)+'
'+Decades[de];
case g of
m: str := TrimRight(str)+'
'+Units[un];
f: str := TrimRight(str)+'
'+UnitsF[un];
end;
end;

if length(numericals[i]) > 1
then
begin
str := TrimRight(str)+'
'+numericals[i];
str := TrimRight(str)+ends[g,1,EndingIndex(iTri)];
end;
end; //triad is 0 ?

if i=0 then Exit;
Dec(i);
Triad;
end;
begin

str := '';
Nr := int( Nin );
Fr := round( Nin*100 + 0.00000001 ) mod 100;
if Nr>0 then Order :=
trunc(Log10(Nr)/3)
else
begin
str := 'ноль';
Order := 0
end;
if Order > High(numericals) then
raise Exception.Create('Слишком большое
число для суммы прописью');
i:= Order;
Triad;
str :=
Format('%s %s%s %.2d %s%s',
[Trim(str),RusMon[1],ends[m,2,EndingIndex(iTri)],
Fr, RusMon[2],ends[f,2,EndingIndex(Fr)]]);
str[1] := (ANSIUpperCase(copy(str,1,1)))[1];
str[Length(str)+1] := #0;
Result := str;end;

function
szMoneyInWords( Nin: currency ): PChar;
begin

sMoneyInWords(Nin);
Result := @(str[1]);end;

end.
Категория: Алгоритмы | Добавил: Lerka (21 Ноя 2012)
Просмотров: 453 | Рейтинг: 1.0/ 7 Оштрафовать | Жаловаться на материал
Похожие материалы
Всего комментариев: 0

Для блога (HTML)


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


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

Профиль
Понедельник
29 Апр 2024
19:36


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