|
|
|
|
|
для: Axxil
(30.11.2005 в 16:44)
| | Что интересно, я за 10 минут нашёл готовую программу перевода в римские числа на Паскале. Оставляю эту задачку по поиску в интеренете для любопытствующих :).
а вот ещё задача по числам: http://sunschool.math.rsu.ru/olymp/2005/ - Задачи олимпиады по программированию "МЕХМАТ-2005" - Дана строка s. Проверить, является ли эта строка записью некоторого числа римскими цифрами, и если является, то вывести на экран следующие девять чисел римскими цифрами (например, для s='VI' надо вывести 'VII VIII IX X XI XII XIII XIV XV'). Если строка s не является римским числом, то вывести развернутое сообщение об ошибке. (Подразумеваются числа до 3000.)
А мы - давайте решим задачу перевода в рим.чис. на JS или РНР :)
Я вот написал на JS - кто сделает изящнее?
<script>(function num2rom(n){var mantiss=(''+n).length-1;
var D='';
for(;mantiss>=0;mantiss--){
poryadok=Math.pow(10,mantiss);
D+=(''+['',1,11,111,12, 2,21,211,2111,13][Math.floor(n/poryadok)])
.replace(/1/g,'IVXLCDM>'.charAt(mantiss*2))
.replace(/2/g,'IVXLCDM>'.charAt(mantiss*2+1))
.replace(/3/g,'IVXLCDM>'.charAt(mantiss*2+2));
n=n%poryadok;
}alert(D);
})(2384)
</script>
|
| |
|
|
|
|
|
|
|
для: Loki
(30.11.2005 в 14:13)
| | Я объяснил принцип. Что надо работать с разрядами числа. А реализауия уже дело техники. Что в этом смысле 900 не отличается от 90 и 9. Что надо писать функцию для одной цифры и её разбирать. то есть определяем в ряду 1..9 "знаковые" цифры и узнаём что если степень при разряде например 0 то есть единицы и мы 5 обозначаем как V (5*10^1 же будет L по-моему) и знаем что всё что меньше 4 ставим обозначение основной единицы (I в нашем случае, ну или X в другом) 4- пишем [основная единица][середина] (IV) 5- середина (V) дальше соответственно [середина][базовая единица] VI 9-[Предыдущая базовая единица][Следуюющая базовая единица] IX
Теперь загоняем в массив обозначения ряда 1 и 5 для всех разрядов и получаем что нужно.
Может слишком наворотил, но я так вижу... | |
|
|
|
|
|
|
|
для: Axxil
(30.11.2005 в 12:53)
| | Собственно, в функции вся и сложность:)
ну подсчитали вы что для числа 9:
1 разряд V и 4 разряда I
отсюда совсем не следует что записываться это будет как IX.
Короче, смую важную часть алгоритма вы и опустили:) | |
|
|
|
|
|
|
|
для: Axxil
(30.11.2005 в 12:53)
| | Axxil спасибо | |
|
|
|
|
|
|
|
для: Alexx
(29.11.2005 в 18:36)
| | Главное же в программировании алгоритм.
Примерно так:
Вычисляем разряды числа то есть делим последовательно на 10 и 100 и 1000, берём целую часть получаем число x=a*10^3+b*10^2+c*10^1+d*10^0 так как все разряды строятся одинаково, единственное отличие как обозначаюися старшие разряда (X-10, C-100, M-1000)
таким образом пишем функцию которая записывае число нужного разряда. Применяем несколько раз для каждого разряда и получаем римское число. Пример IX - 9 XC-90 CM - 900 | |
|
|
|
|
|
|
|
для: Alexx
(29.11.2005 в 22:27)
| | Ну, цифры можно вроде как в массив загнать.
Или разработать алгоритм, который будет число палочек подставлять взависимости от арабской выбранной цифры.
А вот корни синусоидальные вычислять... | |
|
|
|
|
|
|
|
для: Artem S.
(29.11.2005 в 19:30)
| | Artem S. спасибо за ответ!
задачи актуальны до сих пор :) | |
|
|
|
|
|
|
|
для: Alexx
(29.11.2005 в 18:36)
| | За вас никто ничего делать не будит. Наивные.... | |
|
|
|
|
|
|
| Задача такая: Составить программу, которая при вводе арабских цифр выводит на экран соответствующие им римские числа
1 - I
2 - II
3 - III
4 - IV
5 - V
6 - VI
7 - VII
8 - VIII
9 - IX
и т.д.
вводимы числа могут быть от 1 до 1000
и торая:
найти с точностью 0.0001 все корни уравнения 1/x=sinx. Использовать любой подходящий метод. Для получения отрезков, содержащих корни, исследовать график функции y=sin x-1/x | |
|
|
|
|