Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2013, 21:52   #701
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Эм.. тоже что ли что-нибудь спросить.. Ну вот, например.. совсем легко: нужно по номеру года определить век, не используя при этом условного оператора.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 14.04.2013, 21:54   #702
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

эм..
Цитата:
(N div 100) + 1
?
Интересно.. А куда же можно впихнуть развилку ?
Poma][a вне форума Ответить с цитированием
Старый 14.04.2013, 21:58   #703
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
эм..
?
Интересно.. А куда же можно впихнуть развилку ?
А как быть с 1900 годом? =)
Ну, ведь 20 век начинается в 1901, 21 - в 2001 и т. д.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 14.04.2013, 22:03   #704
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Ну, ведь 20 век начинается в 1901, 21 - в 2001 и т. д.
Да? Хм.. Не знал Спасибо, просветили.
Ну тогда вставить вот такую ужасную строчку :
Код:
Код:
(n div 100) + 1 - Ord(n mod 100 = 1)
Мне это не нравится.. Но других идей пока нет..
Poma][a вне форума Ответить с цитированием
Старый 14.04.2013, 22:23   #705
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Хм, может (N - 1) div 100 + 1?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.04.2013 в 22:26.
BDA вне форума Ответить с цитированием
Старый 14.04.2013, 22:29   #706
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цитата:
Вообщем господа, приношу свои извинения
А я уж было решил для общего случая: в какой-нибудь системе счисления max{A,B}! )))
Век просто: (n + 99) div 100, но тип задачек очень полезный)
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 14.04.2013, 22:33   #707
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
(n + 99) div 100
Точняк!! Добиваем до следующего столетия и уже делим!
Цитата:
(N - 1) div 100 + 1?
Точняк!!
Poma][a вне форума Ответить с цитированием
Старый 14.04.2013, 22:39   #708
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

BDA, MihalNik, да, верно.
Я ведь говорил, что это совсем легко =)
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 15.04.2013, 07:05   #709
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Эта задачка сродни округления в большую сторону. А вот интересно, как оптимальнее всего (возможно тоже без условных операторов) решить задачку округления в большую сторону числа типа Double? У меня пока что-то типа этого получилось:
Код:
var
  r: Double;
  i: Int64;
begin
  r := StrToFloat (Edit1.Text);
  i := Trunc (r);
  if r-i > 0 then Inc(i);
  Edit2.Text := IntToStr (i);
end;
Округление до 1000 типа Integer может выглядеть так:
Код:
var
  i: Integer;
begin
  i := StrToInt (Edit1.Text);
  i := ((i + 999) div 1000) * 1000;
  Edit2.Text := IntToStr (i);
end;
Но для вещественных чисел это не годится. Приходится использовать дополнительные регистры, 'разнотипную' математику и операцию сравнения. Хотя может дешевле и не получится.

Последний раз редактировалось Sibedir; 15.04.2013 в 07:17.
Sibedir вне форума Ответить с цитированием
Старый 15.04.2013, 08:44   #710
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
i := Trunc(r)+Integer(Frac(r)>0);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересные проги kipish Софт 85 18.12.2022 01:03
Текст на картинках SunLight Microsoft Office Word 2 08.08.2007 12:59