Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Сравнение двух “длинных” чиселСравнения "длинных" чисел похожи на сравнения простых чисел и не представляют большой сложности. Рекомендуется реализации операций сравнения изучить самостоятельно. Приведем примеры реализаций операций сравнения для “длинных” чисел.
Function Eq (A, B: TLong): Boolean; Var i: Integer; Begin Eq:=False; If A[0]<>B[0] Then Exit {если числа не равны, то выходим из программы} Else Begin {иначе, пока выполняется условие, что каждая цифра значения элемента A[i] равны каждой цифре элемента B[i], значение i увеличиваем на 1, итак пока не будут проверены массивы до конца} i:=1; While (i<=A[0]) And (A[i]=B[i]) Do Inc (i); Eq:= (i=A[0]+1); End; End;
Реализация функции A > B также прозрачна.
Function More (A, B: TLong): Boolean; Var i:Integer; Begin {сравниваем длины чисел А и В (мы еще говорили, If A[0]<B[0] Then More:= False Else If A[0]>B[0] Then More:= True Else Begin i:= A[0]; While (i>0) And (A[i]=B[i]) Do Dec (i); {проверяем каждый элемент If i=0 Then More:=False Else If A[i]>B[i] Then More:=True Else More:=False; End; End; Остальные функции реализуются через функции Eq и More.
Function Less (A, B:TLong):Boolean; {A<B} Begin Less:=Not (More (A, B) Or Eq (A, B)); End;
Function More_Eq (A, B:TLong):Boolean; {A B} Begin More_Eq:=More (A, B) Or Eq (A, B); End;
И, наконец, последняя функция А В.
Function Less_Eq (A, B:TLong):Boolean; Begin Less_Eq:=Not (More (A, B)); End;
Для самостоятельного решения может быть предложена следующая, более сложная, задача. Требуется разработать функцию, которая выдает 0, если А больше В, если А меньше В, и 2 при равенстве чисел. Но сравнение должно быть выполнено с учетом сдвига. О чем идет речь? Поясним на примере. Пусть А равно 56784, а В - 634. При сдвиге числа В на 2 позиции влево функция должна сказать, что В больше А, без сдвига, что А больше В. Другой пример. При А равном 56700, а В - 567 и сдвиге 2 функция должна “сказать”, что числа равны.
Решение иметь следующий вид:
Function More (Const A, B:TLong; Const sdvig:Integer):Byte; Var i:Integer; Begin If A[0]>(B[0]+sdvig) Then More:=0 Else If A[0]<(B[0]+sdvig) Then More:=1 Else Begin i:=A[0]; While (i>sdvig)And(A[i]=B[i-sdvig]) Do Dec (i); More:=0; If i=sdvig Then Begin {совпадение чисел с учетом сдвига} For i:=1 To sdvig Do If A[i] > 0 Then Exit; More:=2; {числа равны, “хвост” числа А равен нулю} End Else More:=Byte (A[i] < B[i-sdvig]); End; End;
|