Помощь - Поиск - Пользователи - Календарь
Полная версия: цифры
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
электрик
Помогите решить задачу!
Составьте прогу, к-ая по названию числа<1000, написанному на русском (английском) языке, формирует его цифровую запись
за ранее спасибо!
klem4
uses crt;
const
d10:array[1..18] of string =('один','два','три','четыре','пять','шесть','семь','восем','девять',
'одиннадцать',
'двеннадцать','тринадцать','четырнадцать','пятнадцать','шеснадцать','семнадцать','восемданцать','девятнадцать');
d11:array[1..18] of integer =(1,2,3,4,5,6,7,8,9
,11,12,13,14,15,16,17,18,19);
d100:array[1..9] of string =('десять','двадцать','тридцать','сорок','пятдесят','шестьдесят',
'семдесят','восемдесят','девяносто');
d111:array[1..9] of integer=(10,20,30,40,50,60,70,80,90);
d1000:array[1..9] of string=('сто','двесте','тристо','четыресто','пятьсот','шестьсот','семьсот','восемьсот','девятьсот');
d1111:array[1..9] of integer=(100,200,300,400,500,600,700,800,900);


var s:string;
result:integer;
i,j,n,bdigit:integer;

Begin
clrscr;
result:=0;
readln(s);
i:=1;
while i<=length(s) do
begin
while(i<=length(s))and(s[i]=#32) do
inc(i);
if i<=length(s) then
begin
bdigit:=i;
while (i<=length(s))and(not(s[i]=#32)) do
inc(i);
for j:=1 to 18 do
if copy(s,bdigit,i-bdigit)=d10[j] then
inc(result,d11[j]);
for j:=1 to 9 do
if copy(s,bdigit,i-bdigit)=d100[j] then
inc(result,d111[j])
else
if copy(s,bdigit,i-bdigit)=d1000[j] then
inc(result,d1111[j]);
end;
end;
writeln('Result=',result);
readln;
end.



по поводу рациональности можно еще подумать, но идея я думаю ясна.
тестировал, вроде все ок.
зы за граматические в числительных не бейте, с русским неважно в школе было=) ну а щас уже буквы забывать начинаю :D
электрик
спасибо!!!!!!!!!!!! Век не забуду!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.