Глупости говорите BANER. Ни одного case, да и кода не так много.. .
function NumToStr(InN: LongInt): String;
{ Константы для формирования числительных }
const
arr100 : array[0..9] of String = ('','сто ','двести ','триста ','четыреста ','пятьсот ',
'шестьсот ','семьсот ','восемьсот ','девятьсот ');
arr011 : array[0..10] of String = ('','десять ','одиннадцать ','двенадцать ','тринадцать ',
'четырнадцать ','пятнадцать ','шестнадцать ','семнадцать ',
'восемнадцать ','девятнадцать ');
arr010 : array[0..9] of String = ('','десять ','двадцать ','тридцать ','сорок ','пятьдесят ',
'шестьдесят ','семьдесят ','восемьдесят ','девяносто ');
arr001 : array[0..9] of String = ('','','','три ','четыре ','пять ','шесть ','семь ','восемь ','девять ');
arr000 : array[1..2,0..2] of String = (('','один ','два '),
('','одна ','две '));
arrName : array[0..3] of String = ('тысяч','миллион','миллиард','триллион');
{окончания триад}
aEnd1 : array[1..3] of String = ('а ','и ',' ');
aEnd2 : array[1..3] of String = (' ','а ','ов ');
var
sN, sSign, Triad, tmpS, Result : String;
TriadCount, i, j, Err, idx : Integer;
N, N10, N01, nGender : Integer;
begin
Str(Abs(InN), sN); { преобразуем число в строку }
if InN < 0 then sSign := '(минус) ' else sSign := '';
TriadCount := (Length(sN)+2) div 3; { количество триад в числе }
sN := Copy('000', 1, TriadCount*3-Length(sN)) + sN; { дополним до полных триад }
Result := '';
{ обработка триад }
for i:=1 to TriadCount do begin
Triad := Copy(sN, 3*i-2, 3); { очередная триада }
Val (Triad[2], N10, Err); { десятки }
Val (Triad[3], N01, Err); { единицы }
for j:=1 to 3 do begin { сканируем цыфры триады }
Val(Triad[j], N, Err); { очередная цифра триады }
case j of
1: Result := Result + arr100[N]; { формируем сотни }
2: if N10 = 1 then
Result := Result + arr011[N01 + 1] { 10..19 }
else
Result := Result + arr010[N]; { 20..90 }
3: if N10 <> 1 then begin
nGender := 1;
if i=TriadCount-1 then nGender := 2;
if N > 2 then Result := Result + arr001[N]
else Result := Result + arr000[nGender, N];
end;
end;
end;
{ добавление названий триад }
if (N01 = 0) or (N01 > 4) or (N10 = 1) then idx := 3 else
if (N01 > 1) and (N01 < 5) then idx := 2 else idx := 1;
Val(Triad, N, Err);
tmpS := arrName[TriadCount-1-i];
case TriadCount-i of
1 : if N <> 0 then tmpS := tmpS + aEnd1[idx];
2..6 : if N <> 0 then tmpS := tmpS + aEnd2[idx];
else tmpS := '';
end;
Result := Result + tmpS;
end;
if Result = '' then Result := 'ноль';
NumToStr := sSign + Result;
end;
С дробными сами разберитесь. Это не трудно. Ищите позицию десятичного разделителя. То, что до него просто преобразуете, а дробную часть обрабатываете отдельно.
Другие языки программирования и технологии
Как на паскале написать код программы,которая при вводе числа,выводит его словами?
Подумать надо.
case
и оч много кода....)
и оч много кода....)
Похожие вопросы
- Как сделать программу которая при вводе текста, удаляет из текста все слова, содержащие букву «я». (PascalABC)
- Программисты! Помогите пожалуйста! Нужно на паскале написать код к следующей задаче: Даны натуральные числа a, b, c
- Помогите пожалуйста напишите код программы
- НА C# НАПИСАТЬ КОД Найти сумму целых отрицательных чисел, кратных 5 и принадлежащих интервалу [-20; 20].
- кто напишет код. программа на с++
- надо написать код программы на языке си. помогите кто знает как!
- НАПИСАТЬ ПРОГРАММУ В ПАСКАЛЬ! Нахождение суммы чисел в матрице, ввод чисел осуществить из файла matrix.txt вывод на экран.
- написать программу которая выводит на экран оцифрованную координатную сетку!Нужно решение через Турбо Паскаль!
- После ввода числа определить слово. PHP.
- аскаль. Написать программу которая переводит число из одной системы счисления в другую
программа по сути легкая, да только код писать долго =)
пэтому я не взялся =)
+5