Понедельник, 29 Апр 2024, 11:21
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


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

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


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

Число строкой I
Данный код "считает" до миллиона долларов. Поэкспериментируйте
с ним - попробуйте "посчитать" до миллиарда, конвертировать ее в рубли или
переделать ее для работы с русским языком. Только не забудьте прислать мне ваши
решения!

unit
uNum2Str;

// Possible enhancements
// Move strings
out to resource files
// Put in a general num2str
utility

interface

function Num2Dollars( dNum: double
) : String;

implementation

uses
SysUtils;

function LessThan99( dNum: double ) : String;
forward;

// floating point
modulus
function FloatMod( i,j: double ):
double;
begin

result := i - (Int(i/j) * j);end;

function
Hundreds( dNum: double ) : String;
var

workVar: double;begin

if ( dNum < 100 ) or ( dNum
> 999 ) then
raise Exception.Create( 'hundreds range
exceeded' );

result := '';

workVar := Int( dNum / 100 );
if workVar > 0 then
result := LessThan99(workVar) + '
Hundred';end; function OneToNine( dNum: Double ) :
String;
begin

if ( dNum < 1 ) or (dNum
> 9 ) then
raise exception.create( 'onetonine: value
out of range' );

result := 'woops';

if dNum = 1 then result :=
'One'
else if dNum = 2 then result
:= 'Two'
else if dNum = 3 then result
:= 'Three'
else if dNum = 4 then result
:= 'Four'
else if dNum = 5.0 then
result := 'Five'
else if dNum = 6 then result
:= 'Six'
else if dNum = 7 then result
:= 'Seven'
else if dNum = 8 then result
:= 'Eight'
else if dNum = 9 then result
:= 'Nine';
end;

function
ZeroTo19( dNum: double ) : String;
begin

if (dNum < 0) or (dNum >
19) then
raise Exception.Create( 'Bad value in
dNum' );

result := '';

if dNum = 0 then result :=
'Zero'
else if (dNum <= 1) and
(dNum >= 9) then result := OneToNine( dNum
)
else if dNum = 10 then
result := 'Ten'
else if dNum = 11 then
result := 'Eleven'
else if dNum = 12 then
result := 'Twelve'
else if dNum = 13 then
result := 'Thirteen'
else if dNum = 14 then
result := 'Fourteen'
else if dNum = 15 then
result := 'Fifteen'
else if dNum = 16 then
result := 'Sixteen'
else if dNum = 17 then
result := 'Seventeen'
else if dNum = 18 then
result := 'Eighteen'
else if dNum = 19 then
result := 'Nineteen'
else result := 'woops!';end;

function TwentyTo99(
dNum: double ) : String;
var

BigNum: String;begin

if ( dNum < 20 ) or ( dNum
> 99 ) then
raise exception.Create( 'TwentyTo99: dNum
out of range!' );

BigNum := 'woops';

if dNum >= 90 then BigNum
:= 'Ninety'
else if dNum >= 80 then
BigNum := 'Eighty'
else if dNum >= 70 then
BigNum := 'Seventy'
else if dNum >= 60 then
BigNum := 'Sixty'
else if dNum >= 50 then
BigNum := 'Fifty'
else if dNum >= 40 then
BigNum := 'Forty'
else if dNum >= 30 then
BigNum := 'Thirty'
else if dNum >= 20 then
BigNum := 'Twenty';

// lose the big num
dNum := FloatMod( dNum, 10 );

if dNum > 0.00 then
result := BigNum + ' ' + OneToNine( dNum
)
else
result := BigNum;end;

function
LessThan99( dNum: double ) : String;
begin

if dNum <= 19 then
result := ZeroTo19(dNum)
else
result :=
TwentyTo99(dNum);end;

function Num2Dollars( dNum:
double ) : String;
var

centsString: String;
cents: double;
workVar: double;begin

result := '';

if dNum < 0 then
raise Exception.Create( 'Negative numbers
not supported' );

if dNum > 999999999.99
then
raise Exception.Create( 'Num2Dollars only
supports up to the millions at this point!' );

cents := (dNum - Int( dNum )) * 100.0;
if cents = 0.0 then
centsString := 'and 00/100 Dollars'
else if cents < 10
then
centsString := Format( 'and 0%1.0f/100
Dollars', [cents] )
else
centsString := Format( 'and %2.0f/100
Dollars', [cents] );

dNum := Int( dNum - (cents / 100.0) );
// lose the cents

// deal with million's
if (dNum >= 1000000 ) and
( dNum <= 999999999 ) then
begin
workVar := dNum / 1000000;
workVar := Int( workVar );
if (workVar <= 9)
then
result := ZeroTo19(workVar)
else if ( workVar <= 99 )
then
result := LessThan99( workVar )
else if ( workVar <= 999 )
then
result := Hundreds( workVar )
else
result := 'mill fubar';

result := result + ' Million';

dNum := dNum - ( workVar * 1000000
);
end;

// deal with 1000's
if (dNum >= 1000 ) and (
dNum <= 999999.99 ) then
begin
// doing the two below statements in one line
of code yields some really
// freaky floating point errors
workVar := dNum/1000;
workVar := Int( workVar );
if (workVar <= 9)
then
result := ZeroTo19(workVar)
else if ( workVar <= 99 )
then
result := LessThan99( workVar )
else if ( workVar <= 999 ) then
result := Hundreds( workVar )
else
result := 'thou fubar';

result := result + ' Thousand';

dNum := dNum - ( workVar * 1000 );
end;

// deal with 100's
if (dNum >= 100.00 ) and
(dNum <= 999.99) then
begin
result := result + ' ' + Hundreds( dNum
);
dNum := FloatMod( dNum, 100 );
end;

// format in anything less than
100
if ( dNum > 0) or ((dNum
= 0) and (Length( result ) = 0)) then
begin
result := result + ' ' + LessThan99( dNum
);
end;
result := result + ' ' +
centsString;end;

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

Для блога (HTML)


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


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

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


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