Русские неметрические еденицы длины: 1 верста=500 сажней; 1 сажень=3 аршина; 1 аршин=16 вершков; вершок=44.45 мм. Длина отрезка состовляет N вершков. На экран вывести только не нулевые значения.
PS С первого взгляда задача показалась мне не сложной, но как только я начал подбирать формулы. . .
Ozzя
3.12.2009 12:12
Цитата
задача показалась мне не сложной
А где задача-то? Что нужно найти? Чему равна длина отрезка в верстах, саженях и т.д.?
Unconnected
3.12.2009 17:29
Помню, что топ с точно такой же задачей уже создавался... Попробуй поискать.
Lapp
3.12.2009 23:52
Цитата(Shuruper @ 3.12.2009 7:57)
Сколько я над ней не парился ни чего ни выходит.
Лучше бы ты показал тут, как именно ты парился - тогда тебе бы намного быстрее помогли..
Цитата
С первого взгляда задача показалась мне не сложной, но как только я начал подбирать формулы. . .
какие формулы? Тут нужен в мозгах порядок, больше ничего Вот, примерно так:
type
tRusLen= record
Vrst,Sazn,Arsn,Vrsk: LongInt;
end;
procedure MetrToRus(L: double; var r: tRusLen);
const
SaznInVrst= 500;
ArsnInSazn= 3;
VrskInArsn= 16;
MetrInVrsk= 0.04445;
MetrInArsn= MetrInVrsk*VrskInArsn;
MetrInSazn= MetrInArsn*ArsnInSazn;
MetrInVrst= MetrInSazn*SaznInVrst;
begin
L:=L+1e-5;
with r dobegin
Vrst:= Trunc(L/MetrInVrst);
L:= L-Vrst*MetrInVrst;
Sazn:= Trunc(L/MetrInSazn);
L:= L-Sazn*MetrInSazn;
Arsn:= Trunc(L/MetrInArsn);
L:= L-Arsn*MetrInArsn;
Vrsk:= Trunc(L/MetrInVrsk)
endend;
function RusUnits(n: LongInt; s1,s2,s3: string): string;
var
i: LongInt;
begin
i:= n mod100;
if i div10 = 1then RusUnits:=s3
elsecase i mod10of1: RusUnits:=s1;
2..4: RusUnits:=s2;
else RusUnits:=s3
endend;
function RusLenToStr(r: tRusLen): string;
var
s,t,v: string;
begin
s:='';
t:='';
with r dobeginif Vrst>0thenbegin
Str(Vrst,v);
t:=v+' верст'+RusUnits(Vrst,'а','ы','');
s:=' 'end;
if Sazn>0thenbegin
Str(Sazn,v);
t:=t+s+v+' сажен'+RusUnits(Sazn,'ь','и','ей');
s:=' 'end;
if Arsn>0thenbegin
Str(Arsn,v);
t:=t+s+v+' аршин'+RusUnits(Arsn,'','а','ов');
s:=' 'end;
if Vrsk>0thenbegin
Str(Vrsk,v);
t:=t+s+v+' верш'+RusUnits(Vrsk,'ок','ка','ков')
endend;
RusLenToStr:=t
end;
var
l: double;
r: tRusLen;
s: string;
begin
Write('Введите длину в метрах (для ввода случайной величины введите 0): ');
ReadLn(L);
if L=0then l:=Random*1e5;
MetrToRus(l,r);
WriteLn(l:10:6,' meters = ',RusLenToStr(r));
ReadLn
end.
P.S. Исправил ошибку в RusLenToStr
P.P.S. .. и еще чуток изменил - для благозвучия..
Unconnected
4.12.2009 18:23
и в номинации "Программа с самым грамотным интерфейсом" побеждает...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.