• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Сложить двоичные числа в Pascal

Vladimir_S, простите, что столько много вопросов задаю, но вы могли бы пожалуйста вот эти строчки немного растолковать, а то я вроде со всем разобралась, а в конце немного запуталась.
if d=1 then D3a:=D3a+'1';
D3:='';
for i:=1 to Length(D3a) do
D3:=D3+D3a[Length(D3a)-i+1];
Sum:=D3;
end;
 
Пожалуйста.
d - это переносимая единица следующего разряда. Как Вы, надеюсь, поняли, в начале функции сложения оба числа выравниваются по длине, равной длине бОльшего числа, путём добавления к меньшему спереди нулей. Так вот, если после сложения всех разрядов остается еще единица, то она и приписывается спереди. Пример: 6+7=13. В двоичной это так:
Код:
 [B]110
 111
----
[COLOR=Red]1[/COLOR]101 [/B]
Но на самом деле в D3a формируется не "1101", а "1011", что и исправляется далее:
D3:='';
for i:=1 to Length(D3a) do D3:=D3+D3a[Length(D3a)-i+1];
Sum:=D3; end;
Дело в том, что строка числа-суммы (D3a) оказывается "перевернутой" по направлению, т.е. младшие разряды - слева, а не справа. Вот переход от D3a к D3 и есть переписывание строки от конца к началу.
Дальше идентификатору функции Sum присваивается значение результата всей деятельности, каковой есть D3, ну и end - это закрытие функции.
 
Vladimir_S, спасибо!!! Теперь всё понятно!
 
Vladimir_S, здравствуйте! Огромнейшее вам СПАСИБО за помощь с задачами!! Теперь я даже сама больше стала понимать и разбираться в них, чему очень рада! Сегодня сдавала эту задачу и всё-всё сама объяснила, так что зачет) Ещё рах спасибо! ...Хоть я и сдала задачу, но вот один ещё вопросец: мне преподаватель сказал для чего вот это?(то что в скобочках) и взял удалил, сказав, что и так будет прекрасно работать. А вы могли бы пояснить почему это так?
{for i:=(Length(D2)-Length(D1))+1 to Length(D2) do }D1a:=D1a+D1{[i-(Length(D2)-Length(D1))];}
 
Назад
Сверху