
11.02.2010, 20:22
|
|
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
С нами:
8912059
Репутация:
249
|
|
Сообщение от worlock13viper
помогите народ задачка такая :
Разработать приложение в Delphi,которое при вводе числа выводит на экран его текстовую интерпритацию:.. Вот такая задачка. если она "пойдет" то рублей 20 на R кашель кину)) |Тестовая интерпретация - это как
102 - Сто два
1031 - Одна тысяча тридцать один|, мне сказали от 1 до 1миллиона(1...1 000 000)
Код:
Type
T = record
StrRepr:string;
End;
Type
TT = record
One:array[0..9] of T;
End;
const
ts=' тысяч';
var
frmMain: TfrmMain;
Mass:array[1..7] of TT;
MassEx:array[10..19] of string;
implementation
{$R *.dfm}
procedure SpecialRange(Str:string;var intA,intB:integer);
begin
if (9 < strtoint(str)) and (strtoint(str)<20) then begin
if (intB <> 3) then frmMain.lblOut.Caption := MassEx[strtoint(str)]+' '+frmMain.lblOut.Caption
else
frmMain.lblOut.Caption:=MassEx[strtoint(str)]+ts+' '+frmMain.lblOut.Caption;
intA:=intA-2;
intB:=intB+2;
end;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
var
intA,intB:integer;
begin
//Фильтр на ввод символов в поле ставить не стал(исходники могут скачать не все,
//а вдруг кому то потребуется), поэтому
try
if (strtoint(edtIn.text)-1)<0 then begin
showmessage('Введите число в диапазоне от 1(одного) до 1000000(миллиона)');
exit;
end;
except
showmessage('Введите число в диапазоне от 1(одного) до 1000000(миллиона)');
exit;
end;
//Не больше миллиона!
if strtoint(edtIn.text) > 1000000 then begin
showmessage('Не больше миллиона!');
edtIn.Text := '1000000';
edtIn.SetFocus;
exit;
end;
lblOut.Caption := '';
//intA счетчик
//В intB текущий разряд
intB:=1;
intA:=length(edtIn.Text);
//Последние 2 цифры в переделе от 9 - 19?
SpecialRange(copy(edtIn.Text,length(edtIn.Text)-1,2),intA,intB);
while intA > 0 do begin
//Если строка не пустая
if (Mass[intB].One[strtoint(copy(edtIn.Text,intA,1))].StrRepr <> '') then lblOut.Caption := Mass[intB].One[strtoint(copy(edtIn.Text,intA,1))].StrRepr+' '+lblOut.Caption;
if (intA = 1) and (intB= 6) and (pos(ts,lblOut.Caption)=0) then lblOut.Caption:=lblOut.Caption+ts;
// 9< Десятки тысяч и тысячи < 19
if (length(edtIn.text) > 4) and (intB=3) then SpecialRange(copy(edtIn.Text,length(edtIn.Text)-4,2),intA,intB);
inc(intB);
dec(intA);
end;
//Только одна буква большая
if not(chkUp.Checked) then lblOut.Caption:=copy(lblOut.Caption,1,1)+ AnsiLowerCase(copy(lblOut.Caption,2,length(lblOut.Caption)-1));
edtIn.SetFocus;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
//Единицы
Mass[1].One[0].StrRepr := '';
Mass[1].One[1].StrRepr := 'Один';
Mass[1].One[2].StrRepr := 'Два';
Mass[1].One[3].StrRepr := 'Три';
Mass[1].One[4].StrRepr := 'Четыре';
Mass[1].One[5].StrRepr := 'Пять';
Mass[1].One[6].StrRepr := 'Шесть';
Mass[1].One[7].StrRepr := 'Семь';
Mass[1].One[8].StrRepr := 'Восемь';
Mass[1].One[9].StrRepr := 'Девять';
//10-19 Специальные
MassEx[10]:='Десять';
MassEx[11]:='Одиннадцать';
MassEx[12]:='Двенадцать';
MassEx[13]:='Тринадцать';
MassEx[14]:='Четырнадцать';
MassEx[15]:='Пятнадцать';
MassEx[16]:='Шестнадцать';
MassEx[17]:='Семнадцать';
MassEx[18]:='Восемнадцать';
MassEx[19]:='Девятнадцать';
//Десятки
Mass[2].One[0].StrRepr := '';
Mass[2].One[2].StrRepr := 'Двадцать';
Mass[2].One[3].StrRepr := 'Тридцать';
Mass[2].One[4].StrRepr := 'Сорок';
Mass[2].One[5].StrRepr := 'Пятьдесят';
Mass[2].One[6].StrRepr := 'Шестьдесят';
Mass[2].One[7].StrRepr := 'Семьдесят';
Mass[2].One[8].StrRepr := 'Восемьдесят';
Mass[2].One[9].StrRepr := 'Девяносто';
//Сотни
Mass[3].One[0].StrRepr := '';
Mass[3].One[1].StrRepr := 'Сто';
Mass[3].One[2].StrRepr := 'Двести';
Mass[3].One[3].StrRepr := 'Триста';
Mass[3].One[4].StrRepr := 'Четыреста';
Mass[3].One[5].StrRepr := 'Пятьсот';
Mass[3].One[6].StrRepr := 'Шестьсот';
Mass[3].One[7].StrRepr := 'Семьсот';
Mass[3].One[8].StrRepr := 'Восемьсот';
Mass[3].One[9].StrRepr := 'Девятьсот';
//Тысячи
Mass[4].One[0].StrRepr := '';
Mass[4].One[1].StrRepr := 'Одна тысяча';
Mass[4].One[2].StrRepr := 'Две тысячи';
Mass[4].One[3].StrRepr := 'Три тысячи';
Mass[4].One[4].StrRepr := 'Четыре тысячи';
Mass[4].One[5].StrRepr := 'Пять тысяч';
Mass[4].One[6].StrRepr := 'Шесть тысяч';
Mass[4].One[7].StrRepr := 'Семь тысяч';
Mass[4].One[8].StrRepr := 'Восемь тысяч';
Mass[4].One[9].StrRepr := 'Девять тысяч';
//Десятки тысяч
Mass[5].One[0].StrRepr := '';
Mass[5].One[2].StrRepr := 'Двадцать';
Mass[5].One[3].StrRepr := 'Тридцать';
Mass[5].One[4].StrRepr := 'Сорок';
Mass[5].One[5].StrRepr := 'Пятьдесят';
Mass[5].One[6].StrRepr := 'Шестьдесят';
Mass[5].One[7].StrRepr := 'Семьдесят';
Mass[5].One[8].StrRepr := 'Восемьдесят';
Mass[5].One[9].StrRepr := 'Девяносто';
//Сотни тысяч
Mass[6].One[0].StrRepr := '';
Mass[6].One[1].StrRepr := 'Сто';
Mass[6].One[2].StrRepr := 'Двести';
Mass[6].One[3].StrRepr := 'Триста';
Mass[6].One[4].StrRepr := 'Четыреста';
Mass[6].One[5].StrRepr := 'Пятьсот';
Mass[6].One[6].StrRepr := 'Шестьсот';
Mass[6].One[7].StrRepr := 'Семьсот';
Mass[6].One[8].StrRepr := 'Восемьсот';
Mass[6].One[9].StrRepr := 'Девятьсот';
//Миллион ;D
Mass[7].One[1].StrRepr := 'Один Миллион';
end;
Исходники и скомпилированный .exe
pass: antichat.ru
Последний раз редактировалось Dosia; 15.02.2010 в 18:32..
|
|
|