Created
March 11, 2013 07:58
-
-
Save w495/5132667 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(***************************************************************************** | |
* | |
* @mainpage Инвертирование целого числа. | |
* | |
* @section ОПИСАНИЕ | |
* Программа инвертирует целое число. | |
* Считывает со стандартного потока целое число, до перевода строки. | |
* Возвращает число с обратным порядком цифр к исходному. | |
* Входное число должно быть из диапазона от 1 до 2147483647. | |
* | |
* @subsection ЗАДАЧА | |
* Требуется инвертировать целое число так, чтобы порядок цифр | |
* был обратным. Например, 12345 => 54321. | |
* В лабораторных работах здесь требуется указать номер лабораторной | |
* и номер варианта. | |
* | |
* @subsection АЛГОРИТМ | |
* Целочисленно делим число на основание системы счисления, до тех пор, | |
* пока частное не станет равно нулю. Остатки такого деления, | |
* выписанные в порядке получения и будут результатом вычислений. | |
* Алгоритм основан, на том факте, что число, записанное | |
* в позиционной системе счисления представляет последовательный | |
* набор коэффициентов своих разрядов. | |
* 12345 = | |
* = (1 × 10000) + (2 × 1000) + (3 × 100) + (4 × 10) + 5 = | |
* = ((((((1 × 10 + 2) × 10) + 3) × 10) + 4) × 10) + 5. | |
* В нашем случае, требуется записать эти коэффициенты в обратном | |
* порядке. Таким образом, получаем алгоритм: | |
* 1. Cчитать число q. | |
* 2. Поделить q на основание системы счисления (10). | |
* 3. Остаток от деления вывести. | |
* 4. Присвоить q частное от деления. | |
* 5. Если q = 0, то завершить вычисления. | |
* 6. Если q ≠ 0, то перейти к шагу 2. | |
* | |
* @section ЛИЦЕНЗИЯ | |
* © 2013 Илья w-495 Никитин, кафедра 806, МАИ, «Комета». | |
* Данная лицензия разрешает лицам, получившим копию данного | |
* программного обеспечения и сопутствующей документации, | |
* в дальнейшем именуемыми «Программное Обеспечение», | |
* безвозмездно использовать Программное Обеспечение без ограничений | |
* на территории РФ, включая неограниченное право на использование, | |
* копирование, изменение, добавление, публикацию, распространение, | |
* сублицензирование и/или продажу копий Программного Обеспечения, | |
* также как и лицам, которым предоставляется данное | |
* Программное Обеспечение, при соблюдении следующих условий: | |
* Указанное выше уведомление об авторском праве | |
* и данные условия должны быть включены во все копии | |
* или значимые части данного Программного Обеспечения. | |
* Данное программное обеспечение предоставляется «как есть», | |
* без каких-либо гарантий, явно выраженных или подразумеваемых, | |
* включая, но не ограничиваясь гарантиями товарной пригодности, | |
* соответствия по его конкретному назначению и отсутствия нарушений прав. | |
* ни в каком случае авторы или правообладатели не несут ответственности | |
* по искам о возмещении ущерба, убытков или других требований | |
* по действующим контрактам, деликтам или иному, возникшим из, | |
* имеющим причиной или связанным с программным обеспечением | |
* или использованием программного обеспечения | |
* или иными действиями с программным обеспечением. | |
* | |
* @file invert_long.pas | |
* Основной файл программы, именно его и нужно компилировать. | |
* | |
* @package invert_long | |
* Основной модуль программы, инвертирование целого числа. | |
* При запуске программы на вход подается положительное число | |
* от 1 до 2147483647. На выходе будет тоже самое число, | |
* но с обратным порядком цифр. | |
* | |
* @author Илья w-495 Никитин <[email protected]> | |
* @date 2013.02.22 16:56:44 | |
* @version 1.1 | |
* | |
*****************************************************************************) | |
program invert_long; | |
(***************************************************************************** | |
ОБЪЯВЛЕНИЯ КОНСТАНТ И ПЕРЕМЕННЫХ | |
*****************************************************************************) | |
(** | |
@const BASE Oснование системы счисления. | |
В алгоритме не него происходит челочисленное деление. | |
В данной программе BASE ≡ 10. | |
**) | |
const BASE = 10; | |
(** | |
\var quotient Частное, оно же входное число. | |
quotient ∈ longint = [-2147483648, 2147483647]; | |
longint занимет 4 байта. | |
**) | |
var quotient :longint; | |
(** | |
\var rest Остаток целочисленного деления. | |
Используется в промежуточных вычислениях, | |
и для вывода инвертированного числа. | |
quotient ∈ longint = [-2147483648, 2147483647]; | |
longint занимет 4 байта. | |
**) | |
var rest :longint; | |
(** ************************************************************ | |
АЛГОРИТМИЧЕСКАЯ ЧАСТЬ ПРОГРАММЫ | |
** ********************************************************* **) | |
begin | |
(** | |
Считываем число из входного потока, | |
которое хотим инвертировать | |
и кладем его в переменную quotient. | |
**) | |
readln(quotient); | |
(** | |
В цикле вычисляем остаток от целочисленного деления на 10. | |
10 — основание системы счисления. | |
Записываем остаток в выходной поток. | |
Делим нацело исходное число на основание, | |
Присваиваем переменной частного результат целочисленного деления. | |
Повторяем цикл до тех пор (until), пока частное не стане равно нулю. | |
Для деления используются целочисленные операции `mod` и `div`: | |
5 div 2 = 2 — деление; | |
5 mod 2 = 1 — взятие остатка; | |
⇐ 5 = 2 * 2 + 1. | |
**) | |
repeat | |
(** вычисляем остаток **) | |
rest := quotient mod BASE; | |
(** вычисляем частное **) | |
quotient := quotient div BASE; | |
(** записываем остаток **) | |
write(rest); | |
until (quotient = 0); | |
(** перевод строки **) | |
writeln(); | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment