Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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

{сравниваем длины чисел А и В (мы еще говорили,
что в A[0] элементе массива хранится длина числа}

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;

 

 

 

Date: 2015-05-08; view: 753; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию