Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.146.37.35] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Я извиняюсь за надоедливость, ну не умею я писать программы на паскаль, вот по железу это ко мне, но нужна еще две маленькие програмки:
1)Вычислить модуль отношения максимального и минимального ненулевого элементов массива. 2)Декодировать римскую запись числа, состоящего из любого количества знаков. Правила: I-1, V-5, X-10, L-50, C-100, D-500, M-1000. Значения римской цифры не зависит от позиции, а знак зависит. |
Сообщ.
#2
,
|
|
|
Проклятье, голова не варит По второму неясно: вроде бы римское число больше чем 20 знаками (MMMDCCCLXXXVIII это что я смог представить) не запишешь... А то появится на входе что-нибудь вроде IVCDM и разбирайся... Если число легальное, где-то в ФАКе чуть ли не прога по этому была.
|
Сообщ.
#3
,
|
|
|
Строковые Функции >> romarab
Roman to Arabian Numbers Convertor Функции для преобразования Римских чисел в обычные Арабские и наоборот. http://pascal.sources.ru/string/romarab.htm |
Сообщ.
#4
,
|
|
|
Вот тебе первая:
const n=15; var a:array[1..n] of integer; p:byte; max,min:integer; begin max:=low(integer); min:=high(integer); randomize; for p:=1 to n do begin a[p]:=random(2000)-1000; writeln('a(',p,')=',a[p]); if a[p]<>0 then begin if a[p]>max then max:=a[p]; if a[p]<min then min:=a[p]; end; end; writeln('max:',max); writeln('min:',min); writeln('|max/min|=',abs(max/min):0:5); end. |
Сообщ.
#5
,
|
|
|
Заглянь завтра, после 24:00. Постараюсь помочь со 2-й прогой.
|
Сообщ.
#6
,
|
|
|
Цитата Some1 @ 19.11.03, 00:46 Спасибо за первую прогу. Вот тебе первая: |
Сообщ.
#7
,
|
|
|
К сожалению но проги по ссылке работаю с ошибками (не все числа переводят в арабские)
|
Сообщ.
#8
,
|
|||
|
Попробуй вот эту прогу:
Вроде бы на все оттестил. |
Сообщ.
#9
,
|
|
|
To vesper1: %)) Кочмар %))))))
И (к сожалению) неправильно работает :)) Вот ТУТ почитай про то, как формируются римские числа %) const rs='IVXLCDM'; rv:array[1..7] of word=(1,5,10,50,100,500,1000); var s:string; i:byte; value,v:integer; begin writeln('Пример чисел:'); writeln('44=XXXXIIII=XXIIXXVI=VIXL=IVL=IVXLX'); writeln('1997=IIIMM=IIMIDD=IDIDIDD=MCMXCVII'); write('Введите римское число: '); readln(s); v:=rv[pos(s[1],rs)]; value:=0; for i:=2 to length(s) do if pos(s[i-1],rs)<>pos(s[i],rs) then begin inc(value,v*(byte(pos(s[i-1],rs)>pos(s[i],rs))*2-1)); v:=rv[pos(s[i],rs)]; end else inc(v,rv[pos(s[i],rs)]); inc(value,v); writeln('Это-же число в арабском представлении: ',value); end. |
Сообщ.
#10
,
|
|
|
Не понял.... Нельзя по правилам написать 1999=MIM, а пишется оно MCMXCIX. Вот так.
И вообще, я сразу спросил, что считается легальным римским числом, а правила формирования я взял из оригинала. А "неправильно работает" - это где? Если на IX выдает 8 ..... заметил уже позже, могу поправить прямо здесь. А если еще где... делись инфой. |
Сообщ.
#11
,
|
|
|
Объясните почему некоторые проги чисел подобных IM либо не работает, либо выдает что это не правильная запись а To Some1: а почему твоя прога выдает что это не римское число а потом выводит 999???
|
Сообщ.
#12
,
|
|
|
Чего ?????? Моя прога пишет, что IM не римское число ?:)))))))
Не пишет оно такого. Пишет так: Пример чисел:'); 44=XXXXIIII=XXIIXXVI=VIXL=IVL=IVXLX 1997=IIIMM=IIMIDD=IDIDIDD=MCMXCVII Введите римское число: IM Это-же число в арабском представлении: 999 И где тут написано, что IM не римское ??? На счёт твоего вопроса: потому что написаны неправильно, и не учитывают, что римские числа состоят из положительных и отрицательных компонент. В IM - I - отрицательная компонента (-1) и M - положительная (1000). В сумме получится 999. А если не знать этого, то можно считать, что I это 1 и M - это 1000, и в сумме даст скажем 1001. Хотя на счёт неправильной записи, и что касается сказанного vesper1 - я не знаю, может я и не прав, я делал пологаясь на ту ссылку, которую уже дал в пред. посте и поэтому считаю что правильные записи - все возможные комбинации, удовлетворяющие условию, описанному в ссылке. А какими источниками пользовался ты, vesper1 ? Как можно говорить о верности, если в разных местах по разному написано ? Давай скажем, так: твоя прога работает правильно соответствуясь твоему пониманию римской записи, а моя - соответственно моему :)) З.Ы. Ошибок я у тебя вобще не искал. Я просто смотрю - veter2003 говорит, что твоя работает не всегда верно, вот и написал :) Не обижайся, я не из подлости натуры :)))) |
Сообщ.
#13
,
|
|||
|
А я и не обижаюсь Я пользовался книгой "За страницами учебника математики", где естественно (книга еще советская) были расписаны строгие правила формирования римских чисел, т.е. точно в таком виде, в каком они написаны (иногда) на старых зданиях, в конце титров фильмов итд. Поэтому я и выстроил всю эту систему ограничений.
А давай
Только вопрос: чему равно IVXLCDM? Согласно записи 44=IVL, получается 334 Твоя прога его и выдает. И еще вопрос: можно же написать IIIIIIIIIIIIIIIIIII и получится 19 (ну если я правильно сосчитал ) а если в конце поставить V, будет -14... Хм. Вроде изначально римскими знаками нельзя было записать отрицательное число... Хеееее, щас тестирую твою прогу... она на DDM выдает 0, а на DIDM - 999 Сколько я понял, результат должен был быть -1? |
Сообщ.
#14
,
|
|
|
to Some1: Все понял это я что-то не то прочитал. Вопрос: Почему твоя прога при вводе IM выводит 999 а при вводе im результат 0 ???
|
Сообщ.
#15
,
|
|
|
потому, что такого римского обозначения "im" - не существует.
|