IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Русские неметрические единицы длины
Shuruper
сообщение 3.12.2009 7:57
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской
Реальное имя: Антон

Репутация: -  0  +


Сколько я над ней не парился ни чего ни выходит.


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

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


--------------------
Я бы исправил мир, но Бог не дает мне исходников...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 3.12.2009 19:52
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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

Сообщение отредактировано: Lapp - 4.12.2009 2:38


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"