Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 25.07.2009, 14:51   #1
ssman
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=4then dney1:=' дня'
        
ELSE dney1:=' дней'
В итоге когда например если d=22, то t=2 (можете проверить), а dney1=' дней'. В чем ошибка? t ведь считается правильно. Погрешность выставил в МР 0.000001.
(Offline)
 
Ответить с цитированием
Старый 25.07.2009, 16:32   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 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 
+
    t 
d Mod 10
    
If (d/10Mod 10 <> 1
        
If 1 Then
            d1
$ = "день"
        
Else
            If 
Or Or t=4 Then
                d1
$ = "дня"
            
Else
                
d1$ = "дней"
            
End If
        
End If
    Else
        
d1$ = "дней"
    
End If
    Print 
" "+d1
    Delay 300
Until KeyHit
(1
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 25.07.2009, 17:54   #3
12121
Нуждающийся
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (25.07.2009)
Старый 25.07.2009, 18:01   #4
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: В чем дело?

Ну, тогда If t>4 then dney1:='дней'; будет работать неправильно, т.к. 'дней' будет и при 0, -> нужно ещё условие
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
12121 (26.07.2009)
Старый 26.07.2009, 00:59   #5
ssman
AnyKey`щик
 
Регистрация: 16.07.2009
Сообщений: 14
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: В чем дело?

сам ты черезжопство, математику учи. Всё помоему элементарно. А t вычисляется 100% правильно. Ошибка в If идет, но изза чего не пойму.

Frac откидывает целую часть своего аргумента.
(Offline)
 
Ответить с цитированием
Старый 26.07.2009, 01:15   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: В чем дело?

Ошибка в If идет, но изза чего не пойму.
У меня такой же (копированный из 1-го поста) if работает великолепно
Что говорит дебаггер по поводу t ?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 26.07.2009, 04:22   #8
abcdef
Знающий
 
Регистрация: 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
Dj_Alex
ПроЭктировщик
 
Аватар для Dj_Alex
 
Регистрация: 08.03.2009
Адрес: Saransk
Сообщений: 143
Написано 25 полезных сообщений
(для 45 пользователей)
Ответ: В чем дело?

проще наверно перевести в string и брать символ крайний справа.
__________________
(Offline)
 
Ответить с цитированием
Старый 27.07.2009, 22:18   #10
Cliffe Snake
Нуждающийся
 
Аватар для Cliffe Snake
 
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений
(для 12 пользователей)
Ответ: В чем дело?

Вот, парни, не мучайтесь:

program dney;
var
d,integer;
dney1 string;
begin
delay
(1000); d:=0;
repeat
t
:= d mod 10;
dney1:=' дней';
   if (
d<10) or (d>14then
    begin 
       
If t=1 then dney1:=' день' ;
       If (
t>1) and (t<5then 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ssman (13.08.2009)
Старый 28.07.2009, 11:51   #11
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Ответ: В чем дело?

Сообщение от impersonalis Посмотреть сообщение
Элементарно ещё не значит хорошо.
По-вашему 2+2+2+2 лучше чем 2*4?
Ведь первое же элементарнее!
Первое в некоторых случаях лучше (быстрее).
(Offline)
 
Ответить с цитированием
Старый 13.08.2009, 12:47   #12
ssman
AnyKey`щик
 
Регистрация: 16.07.2009
Сообщений: 14
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: В чем дело?

Всем спасибо, раньше не было времени всё попробовать. Вариант с мод действительно лучший
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
тут такое дело ... jimon Болтовня 7 20.10.2006 23:34


Часовой пояс GMT +4, время: 13:53.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com