|
Основной форум Сюда все проблемы связанные с программированием. |
25.07.2009, 14:51
|
#1
|
AnyKey`щик
Регистрация: 16.07.2009
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
В чем дело?
Мне нужно вывести количество дней. Чтобы читалось "по-русски", нужно менять окончание у слова "день" в зависимости от последней цифры количества дней (см. правила русского языка ).
d- кол-во дней, integer.
t- real.
t:=Frac(d*0.1)*10; If t=1 then dney1:=' день' ELSE If (t=2) OR (t=3) OR (t=4) then dney1:=' дня' ELSE dney1:=' дней';
В итоге когда например если d=22, то t=2 (можете проверить), а dney1=' дней'. В чем ошибка? t ведь считается правильно. Погрешность выставил в МР 0.000001.
|
(Offline)
|
|
25.07.2009, 16:32
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: В чем дело?
Разве в MP нету такой штуки, как MOD ? Что за черезжопство:
t:=Frac(d*0.1)*10;
З.Ы. Сам проверить не могу (MP нет), но что-то мне кааца, что t вычисляется неверно.
Ибо с использованием Mod (на бейсике) твой перебор If (t=2) OR (t=3) OR (t=4) работает отлично. Логика везде одинаковая, что в паскале, что в бейзике, так что у тебя t неверно вычисляется, перепроверь её значение.
Repeat d = d +1 t = d Mod 10 If (d/10) Mod 10 <> 1 If t = 1 Then d1$ = "день" Else If t = 2 Or t = 3 Or t=4 Then d1$ = "дня" Else d1$ = "дней" End If End If Else d1$ = "дней" End If Print d + " "+d1 Delay 300 Until KeyHit(1)
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
25.07.2009, 17:54
|
#3
|
Нуждающийся
Регистрация: 26.12.2008
Сообщений: 57
Написано 22 полезных сообщений (для 28 пользователей)
|
Ответ: В чем дело?
Лучше обойтись без else
t:=Frac(d*0.1)*10;
If t=1 then dney1:='день';
If (t=2) OR (t=3) OR (t=4) then dney1:='дня';
If t>4 then dney1:='дней';
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.07.2009, 18:01
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: В чем дело?
Ну, тогда If t>4 then dney1:='дней'; будет работать неправильно, т.к. 'дней' будет и при 0, -> нужно ещё условие
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.07.2009, 00:59
|
#5
|
AnyKey`щик
Регистрация: 16.07.2009
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: В чем дело?
сам ты черезжопство, математику учи. Всё помоему элементарно. А t вычисляется 100% правильно. Ошибка в If идет, но изза чего не пойму.
Frac откидывает целую часть своего аргумента.
|
(Offline)
|
|
26.07.2009, 01:15
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: В чем дело?
Элементарно ещё не значит хорошо.
По-вашему 2+2+2+2 лучше чем 2*4?
Ведь первое же элементарнее!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
26.07.2009, 01:23
|
#7
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: В чем дело?
Ошибка в If идет, но изза чего не пойму.
|
У меня такой же (копированный из 1-го поста) if работает великолепно
Что говорит дебаггер по поводу t ?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
26.07.2009, 04:22
|
#8
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: В чем дело?
тип real с большими погрешностями даже в элементарных операциях, используй преобразование trunc, а лучше сразу mod.
p.s.: сравнение на равенство ни когда не используй для дробных чисел, надо так: if abs(t-1)<0.001 then ...
|
(Offline)
|
|
26.07.2009, 19:33
|
#9
|
ПроЭктировщик
Регистрация: 08.03.2009
Адрес: Saransk
Сообщений: 143
Написано 25 полезных сообщений (для 45 пользователей)
|
Ответ: В чем дело?
проще наверно перевести в string и брать символ крайний справа.
__________________
|
(Offline)
|
|
27.07.2009, 22:18
|
#10
|
Нуждающийся
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений (для 12 пользователей)
|
Ответ: В чем дело?
Вот, парни, не мучайтесь:
program dney; var d,t : integer; dney1 : string; begin delay(1000); d:=0; repeat t:= d mod 10; dney1:=' дней'; if (d<10) or (d>14) then begin If t=1 then dney1:=' день' ; If (t>1) and (t<5) then dney1:=' дня' end; setcolor(255,255,255); fillrect(0,0,getwidth,getheight); setcolor(0,0,0); drawtext(''+d+dney1+' t='+t,2,2); repaint; delay(1000); d:=d+1; until (getkeyclicked<>0) or (d>31); end.
200% гарантия работы на МП
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.07.2009, 11:51
|
#11
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: В чем дело?
Сообщение от impersonalis
Элементарно ещё не значит хорошо.
По-вашему 2+2+2+2 лучше чем 2*4?
Ведь первое же элементарнее!
|
Первое в некоторых случаях лучше (быстрее).
|
(Offline)
|
|
13.08.2009, 12:47
|
#12
|
AnyKey`щик
Регистрация: 16.07.2009
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: В чем дело?
Всем спасибо, раньше не было времени всё попробовать. Вариант с мод действительно лучший
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
тут такое дело ... |
jimon |
Болтовня |
7 |
20.10.2006 23:34 |
Часовой пояс GMT +4, время: 10:57.
|