Помощь - Поиск - Пользователи - Календарь
Полная версия: Русские неметрические единицы длины
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Shuruper
Сколько я над ней не парился ни чего ни выходит.


Русские неметрические еденицы длины: 1 верста=500 сажней; 1 сажень=3 аршина; 1 аршин=16 вершков; вершок=44.45 мм. Длина отрезка состовляет N вершков. На экран вывести только не нулевые значения.

PS С первого взгляда задача показалась мне не сложной, но как только я начал подбирать формулы. . .
Ozzя
Цитата
задача показалась мне не сложной

А где задача-то? Что нужно найти? Чему равна длина отрезка в верстах, саженях и т.д.?
Unconnected
Помню, что топ с точно такой же задачей уже создавался... Попробуй поискать.
Lapp
Цитата(Shuruper @ 3.12.2009 7:57) *
Сколько я над ней не парился ни чего ни выходит.
Лучше бы ты показал тут, как именно ты парился - тогда тебе бы намного быстрее помогли..

Цитата
С первого взгляда задача показалась мне не сложной, но как только я начал подбирать формулы. . .
какие формулы? Тут нужен в мозгах порядок, больше ничего smile.gif
Вот, примерно так:
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 do begin
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)
end
end;


function RusUnits(n: LongInt; s1,s2,s3: string): string;
var
i: LongInt;
begin
i:= n mod 100;
if i div 10 = 1 then RusUnits:=s3
else case i mod 10 of
1: RusUnits:=s1;
2..4: RusUnits:=s2;
else RusUnits:=s3
end
end;


function RusLenToStr(r: tRusLen): string;
var
s,t,v: string;
begin
s:='';
t:='';
with r do begin
if Vrst>0 then begin
Str(Vrst,v);
t:=v+' верст'+RusUnits(Vrst,'а','ы','');
s:=' '
end;
if Sazn>0 then begin
Str(Sazn,v);
t:=t+s+v+' сажен'+RusUnits(Sazn,'ь','и','ей');
s:=' '
end;
if Arsn>0 then begin
Str(Arsn,v);
t:=t+s+v+' аршин'+RusUnits(Arsn,'','а','ов');
s:=' '
end;
if Vrsk>0 then begin
Str(Vrsk,v);
t:=t+s+v+' верш'+RusUnits(Vrsk,'ок','ка','ков')
end
end;
RusLenToStr:=t
end;


var
l: double;
r: tRusLen;
s: string;

begin
Write('Введите длину в метрах (для ввода случайной величины введите 0): ');
ReadLn(L);
if L=0 then l:=Random*1e5;
MetrToRus(l,r);
WriteLn(l:10:6,' meters = ',RusLenToStr®);
ReadLn
end.


P.S.
Исправил ошибку в RusLenToStr

P.P.S.
.. и еще чуток изменил - для благозвучия.. smile.gif
Unconnected
lol.gif и в номинации "Программа с самым грамотным интерфейсом" побеждает...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.