Завдання № 34. Сформувати число з двох заданих чергуванням розрядів » Pascal - основи програмування

Основи програмування на мові Pascal

 

Спонсори

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

Завдання № 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. var
  3. c, z: integer;
  4. a, b: word;
  5. begin
  6. readln(a, b);
  7. c := 0;
  8. z := 1;
  9. while a <> 0 do begin
  10.   c := c + z * (b mod 10);
  11.   z := z * 10;
  12.   b := b div 10;
  13.    c := c + z * (a mod 10);
  14.   z := z * 10;
  15.    a := a div 10
  16. end;
  17. writeln(c)
  18. end.

0034.-CombineTwoNums.rar [676 b] (cкачувань: 3)

скачать dle 10.4фильмы бесплатно Наступна сторінка » Завдання № 35. Вивести на екран x, запис... Попередня сторінка » Завдання № 33. Отримати канонічний роз...