КИТА unofficial
Май 12, 2024, 01:34:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Искусство программирования. (5)  (Прочитано 15720 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« : Май 22, 2007, 08:21:19 »

Что-то я смотрю викторины по техническим предметам сошли на нет. Нехорошо это как-то Подмигивающий. Попытаемся реанимировать этот жанр:

Дано целое число K. Определить размер периода в десятичном представлении 1/K. Использовать только целочисленные переменные.
К примеру:
1/13 = 0,076923076923076923076923076923077 Период - 076923 - его размер - 6

1/6 = 0,16666666666666666666666666666666 Период - 6 его размер -1

и т.п.
« Последнее редактирование: Июль 27, 2007, 11:52:30 от vimmax » Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #1 : Май 22, 2007, 10:31:36 »

Код:
int period (int k)
{int ost[200];
int o=10;
for (int i=0;;i++)
 {ost[i]=o;
  o=(o%k)*10;
  if (o==0) return 0;
  for (int j=0;j<=i;j++)
    if (o==ost[j])
      return 1+i-j;
 }
}
« Последнее редактирование: Май 22, 2007, 10:44:33 от chilik » Записан
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #2 : Май 22, 2007, 10:36:19 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
а почему у меня половина сообщения курсивом отображается??
Записан
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #3 : Май 22, 2007, 10:41:56 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
Код:
{ost[i]=o;
Код:
[i]
- курсив ВВ.
 Используй тэгу "Код"
Записан
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #4 : Май 22, 2007, 10:44:10 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
да, действительно, не заметил =) щас исправлю
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #5 : Май 22, 2007, 11:02:38 »

Хм... вычисляет правильно, но не выполнено граничное условие - использовать только переменные целочисленного типа.
Ведь int [] != int.
Увы...
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #6 : Май 22, 2007, 11:07:20 »

хм, я думал, что это подразумевает не использовать флоат. ну лана, буду менять
Записан
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #7 : Май 22, 2007, 11:35:36 »

Код:
int period (int k)
{int ost=10;
for (int j=0;;j++)
  {int o=10;
   for (int i=j;i<=200;i++)
    {o=(o%k)*10;
     if (o==0) return 0;
     if (o==ost) return 1+i-j;
    }
   ost=(ost%k)*10;
  }
}
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #8 : Май 22, 2007, 11:42:22 »

Совсем другое дело! +1 Подмигивающий
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #9 : Май 22, 2007, 11:44:50 »

Грустный
Извините, Вы не можете повторно изменить карму этому пользователю. Необходимо подождать 48 часов.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
chilik
Бакалавр
**

Карма: +15/-1
Offline Offline

Пол: Мужской
Сообщений: 143



« Ответ #10 : Май 22, 2007, 11:46:40 »

последний релиз, оптимальнее немного =)
Код:
int period (int k)
{int ost=10;
for (int i=0;;i++)
  {ost=(ost%k)*10;
   if (ost==0) return 0;
   int o=10;
   for (int j=0;j<i;j++)
     {o=(o%k)*10;
      if (o==ost) return i-j;
     }
  }
}

PS +1 будешь должен Подмигивающий

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
вот и подкрался мой первый серьезный юбилей - 100 сообщений =)
Записан
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #11 : Май 22, 2007, 11:48:29 »

Я паставлю. Не против, LazarusLong??
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #12 : Май 22, 2007, 11:49:10 »

Цитировать
PS +1 будешь должен
Проценты нарастают? Смеющийся

naxellar - ставь!
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #13 : Май 23, 2007, 02:29:14 »

Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #14 : Май 23, 2007, 02:32:58 »

Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)
И что быстрее будет
Записан
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #15 : Май 23, 2007, 02:35:38 »

Константа не используется, хотя оптимальность данных выражений зависит от деталей реализации конкретного компилятора.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #16 : Май 23, 2007, 04:24:56 »

Константа не используется, хотя оптимальность данных выражений зависит от деталей реализации конкретного компилятора.

имхо, современный компилятор произведет оптимизацию обоих вариантов.
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #17 : Май 23, 2007, 06:03:57 »

Конечно. Компилятор, скорее всего, причешет оба варианта и приведет их к общему знаменателю. Но ведь наверняка мы (я, по крайней мере) этого не знаем. Поэтому лучше сразу писать как можно оптимальнее. Без фанатизма конечно Подмигивающий
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #18 : Май 23, 2007, 06:15:27 »

Без фанатизма конечно Подмигивающий

Саша, ну вот это
Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)

думаю уже недалеко от фанатизма. )) Тем более, что речи о языке реализации не было, а предлагаемое тобой усовершенствование для реализации на С++ подходит, а вот например для реализации на С# аж никак не подходит. ))
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
NunTerix
Декан
*****

Карма: +26/-1
Offline Offline

Пол: Мужской
Сообщений: 1688



« Ответ #19 : Май 23, 2007, 06:53:16 »

Еще чуть-чут оптимальнее (не меняя алгоритма, конечно) было бы заменить строку

if (ost==0) return 0;

На

if (!ost) return 0;

:-)

Код будет аж на 2 символа меньше  Смеющийся
Записан

Сердце может прибавить ума, но ум не может прибавить сердца.
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #20 : Май 23, 2007, 08:02:53 »

Sochin

Ну не знаю не знаю.... , я к примеру, всегда так пишу Подмигивающий.

Хотя тут еще ладно, все таки переменная ost типа int, а ведь бывает еще иногда пишут что-то вроде if (a==false) Подмигивающий

И не думаю, что chilik писал на С#  Строит глазки
NunTerix

Как мне представляется, оптимальность кода выражается не в количестве символов в тексте программы, а в количестве выполняемых операций и занимаемой программой памяти.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
NunTerix
Декан
*****

Карма: +26/-1
Offline Offline

Пол: Мужской
Сообщений: 1688



« Ответ #21 : Май 23, 2007, 08:18:28 »

NunTerix

Как мне представляется, оптимальность кода выражается не в количестве символов в тексте программы, а в количестве выполняемых операций и занимаемой программой памяти.

Это ясненько... а фактически? Разве замена (!ost) на (ost==0) или наоборот уменьшает количество выполняемых операций? Или уменьшает занимаемую память??
Записан

Сердце может прибавить ума, но ум не может прибавить сердца.
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #22 : Май 23, 2007, 10:12:29 »

По видимому уменьшает занимаемую память - так как не требуется хранение в памяти константы 0, используемой для сравнения. Конечно, как заметил Sochin, компилятор должен этот момент оптимизировать, но все-таки Подмигивающий
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
NunTerix
Декан
*****

Карма: +26/-1
Offline Offline

Пол: Мужской
Сообщений: 1688



« Ответ #23 : Май 23, 2007, 11:54:10 »

Я склоняюсь к мнению что (!ost) лишь "удобнописная" замена частного случая - (ost==0). Т.К. условие равенства переменной нулю - является одним из наиболее частых случаев в написании кода. А уменьшение занимаемой памяти = врядли ставилась такая задача при создании языка.
Записан

Сердце может прибавить ума, но ум не может прибавить сердца.
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #24 : Май 24, 2007, 02:31:15 »

гы))) это оптимизация программы для компиляции. Компилятору приходится меньше оптимизировать, если программист оптимизировал код перед компиляцией. Экономится время компиляции.
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #25 : Май 24, 2007, 02:39:53 »

гы ))) Компилятору придется оптимизировать в любом случае. И вообще не одушевляйте компьютеры, им это страшно не нравится. )))
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
Страниц: 1 2 [Все]   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.1 секунд. Запросов: 33.