![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 12
|
![]()
Даны описания переменных: type рац= record
число:integer; знам:1.maxint end; массив = array[1..20] of рац; Описать: Логическую функцию равно (а,b) сравнивающую два рациональных числа а и b. Без понятия как решать даже, если кто то разбирается нужна ваша помощь=( |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,821
|
![]()
вас в школе не научили сравнивать дроби?
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
![]()
Думаю, проще всего переложить числители этих в longint а дальше премножить. Как-то примерно так:
Код:
Предпочитаю на "ты".
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,821
|
![]() Код:
Не надо выдумывать и меня стандартное поведение операторов. |
![]() |
![]() |
![]() |
#5 | |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
![]() Цитата:
Nobody expects Spanish Inquisition!
|
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
p51x, Вы неправы...
сравните, например, дроби 1/3 и 2/6 очевидно, что 1*6 равно 2*3. имхо, TinMan предложил простое и красивое решение. (фактически происходит приведение дробей к общему знаменателю, который в данном алгоритме равен r1.znam * r2.znam) и, раз знаменатели дроби равны, можно смело сравнивать числители.) Недостаток у данного метода только один, может не хватить разрядности longint. Впрочем, тут уже всё будет зависеть от того, какая разрядность у integer (если речь идёт о турбоПаскаль, то LongInt гарантировано хватит: Код:
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,821
|
![]() Цитата:
1. В большом проекте, ессли вы поменяете ожидаемое стандартное поведение оператора, то по рукам быстро получите 2. Учитывая, что обычно лонгинт в два раза по разрядам превосходит инт, то очень интерсно посмотреть как будут сравниваться таким методом максинт и максинт |
|
![]() |
![]() |
![]() |
#8 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Поясните, пожалуйста, какое поведение какого стандартного оператора меняется... Цитата:
мой пост выше. пример как раз с максинт на максинт. компилятор TurboPascal. всё работает нормально. Впрочем, там же я отметил, что это зависит от разрядности Integer в конкретном компиляторе... p.s. в любом случае, умножение даст более точный результат, чем деление и сравнение полученных дробных значений... |
||
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
![]()
Juffin, Серж - спасибо за поддержку ).
p51x, извини, я не привел объяснение - что, по-видимому, и сбило тебя с толку. Надо все же писать пару слов всегда, постараюсь исправиться. Что касается разрядности.. В условии четко указан тип: integer, и даже приведены диапазоны. Во всех Pascal-компиляторах, с которыми я знаком (TP и FP, собственно, про ABC не знаю), типы integer и longint отличаются под длине вдвое - потому я и счел возможным предложить такое решение.
Предпочитаю на "ты".
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Комбинированный тип данных | Black_butterfly | Помощь студентам | 1 | 14.04.2011 11:29 |
Комбинированный тип данных | ne4eHUce | Помощь студентам | 3 | 11.04.2011 01:36 |
Записи комбинированный тип данных | Александр Бутырин | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 28.12.2010 18:34 |
Комбинированный тип данных | Nightt | Помощь студентам | 0 | 19.06.2009 18:25 |