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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Задача № 34. Сформировать число из двух заданных чередованием разрядов





Формулировка. Даны два натуральных числа одинаковой десятичной разрядности. Сформировать из них третье число так, чтобы цифры первого числа стояли на нечетных местах третьего, а цифры второго – на четных. При этом порядки следования цифр сохраняются. Например, при вводе 1234 и 5678 программа должна выдать ответ 15263748 (для наглядности разряды обоих чисел выделены разными цветами).

Решение. Так как у чисел (обозначим их a и b) одинаковая десятичная разрядность, крайняя справа цифра у третьего числа (c, которое поначалу должно быть равно 0) всегда будет на четном месте, так как при его формировании мы работаем с длинами a и b как с числами одной четности, сумма которых всегда четна, и длина c как раз и есть позиция крайней справа цифры.

Это значит, что формирование c нужно в любом случае начинать с последнего разряда b. При этом каждый взятый из a или b разряд мы должны сместить на необходимую позицию влево, чтобы добавлять разряды c, используя операцию сложения. Мы сделаем это с помощью вспомогательной переменной z, которая перед входом в цикл будет равна 1. В цикле же она будет умножаться на последний добытый разряд b (при этом выражение z * b mod 10 нужно прибавить к c), затем умножить z на 10 и проделать то же самое с последним разрядом a и снова умножить z на 10. Кстати, при этом нужно не забыть своевременно отбросить уже рассмотренные разряды чисел.

Так как разрядность чисел неизвестна, нам нужен цикл с предусловием. В силу одинаковой десятичной разрядности a и b мы можем сделать условие по обнулению любого из них, так как второе при этом также обнулится. Возьмем условие a < > 0.

Таким будет основной цикл:

while a <> 0 do begin

c:= c + z * (b mod 10);

z:= z * 10;

b:= b div 10;

c:= c + z * (a mod 10);

z:= z * 10;

a:= a div 10

end;

В итоге конечное число c будет сформировано в таком виде (все направления справа налево): первая цифра b, первая цифра a, вторая цифра b, вторая цифра a и так далее до самых последних разрядов слева. Кстати, скобки в двух операторах нужны для правильного понимания компилятором приоритета выполняемых арифметических операций. Без них z умножится на соответствующее число, и остаток от деления именно этого числа прибавится к c, что неправильно.

Алгоритм на естественном языке:

1) Ввод a и b;

2) Обнуление переменной c;

3) Присвоение переменной z числа 1;

4) Запуск цикла с предусловием a < > 0. В цикле:

1. Прибавляем последний разряд b в текущий разряд c, определяемый с помощью множителя z;

2. Умножаем z на 10;

3. Избавляемся от последнего разряда в b;

4. Прибавляем последний разряд a в текущий разряд c с помощью множителя z;

5. Умножаем z на 10;

6. Избавляемся от последнего разряда в a;

5) Вывод c.

Код:

1. program CombineTwoNums; 2. 3. var 4. c, z: integer; 5. a, b: word; 6. 7. begin 8. readln(a, b); 9. c:= 0; 10. z:= 1; 11. while a <> 0 do begin 12. c:= c + z * (b mod 10); 13. z:= z * 10; 14. b:= b div 10; 15. c:= c + z * (a mod 10); 16. z:= z * 10; 17. a:= a div 10 18. end; 19. writeln(c) 20. end.

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



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