Определить, является ли шестнадцатеричное представление данного натурального числа палиндромом - Free Pascal
Формулировка задачи:
Приветствую. Есть у меня небольшая проблемка. Очень надеюсь на Вашу помощь.
Дано задание для языка C: "Определить, является ли шестнадцатеричное представление данного натурального числа палиндромом."
Его я решаю следующим образом:
Все работает, все хорошо. Но мне необходимо переписать эту программу на языке Pascal для следующего задания: "Определить, является ли восьмеричное представление данного натурального числа палиндромом."
Я пробую вот так:
Но программа нормально не работает. Не могли бы Вы подсказать, в чем моя ошибка?
Листинг программы
- #include "stdafx.h"
- #include <iostream>
- #include <conio.h>
- #include <locale>
- int main()
- {
- setlocale(LC_ALL, "");
- unsigned int n;
- unsigned int mask = 0xF0000000;
- unsigned int mask2 = 0x0000000F;
- int i;
- int j;
- int start = 8;
- int polyndrome = 1;
- printf("Введите число: ");
- scanf("%i", &n);
- for (i = 0; i < 8; ++i)
- {
- if ((n & mask) == 0)
- {
- mask >>= 4;
- mask &= 0x0FFFFFFF;
- --start;
- }
- else break;
- }
- for (i = 0, j = start; (i < j) && (polyndrome != 0); ++i, --j)
- {
- if (((n & mask) >> ((j - 1) * 4)) != ((n & mask2) >> (i * 4))) polyndrome = 0;
- mask >>= 4;
- mask2 <<= 4;
- }
- printf("%x", n);
- printf("\n");
- if (polyndrome == 1)
- printf("Шестнадцатеричное представление данного числа является палиндромом");
- else
- printf("Шестнадцатеричное представление данного числа не является палиндромом");
- _getch();
- }
Листинг программы
- uses crt;
- var
- n: word;
- mask, mask2: word;
- i,j, start: byte;
- f: boolean;
- begin
- mask:=61440;
- mask2:=15;
- start:=4;
- f:=true;
- read(n);
- while i<4 do
- if n and mask = 0 then
- begin
- mask:= mask shr 4;
- mask:= mask and 4095;
- start:=start-1;
- i:=i+1;
- end
- else
- break;
- i:=0;
- j:=start;
- while (i<j) and (f) do
- begin
- if ((n and mask) shr ((j-1)*4)) <> ((n and mask2) shr (i*4))
- then f:=false;
- i:=i+1;
- j:=j-1;
- mask:=mask shr 4;
- mask2:=mask2 shl 4;
- end;
- writeln(f);
- readkey;
- end.
Решение задачи: «Определить, является ли шестнадцатеричное представление данного натурального числа палиндромом»
textual
Листинг программы
- var
- n, T, rev : word;
- begin
- // n := 1098; // Octal 2112
- // n := 2412; // Octal 4554
- // n := 17620; // Octal 42324
- n := 65529; // Octal 177771
- rev := 0; T := n;
- while T > 0 do
- begin
- rev := rev shl 3;
- rev := rev or (T and $7);
- T := T shr 3;
- end;
- writeln(n = rev);
- end.
Объяснение кода листинга программы
В данном коде на языке Free Pascal реализуется функция, которая проверяет, является ли шестнадцатеричное представление натурального числа палиндромом.
- В первой строке объявляются три переменные: — n — переменная, в которой будет храниться натуральное число; — T — промежуточная переменная; — rev — переменная, в которой будет храниться результат проверки на палиндром.
- Затем в комментариях приведены примеры значений для переменной n, которые будут использоваться в данном коде.
- Далее в цикле while перебираются все цифры числа n. Для этого число n делится на 10, и результат этого деления присваивается переменной T.
- В каждой итерации цикла значение переменной T сдвигается влево на 3 позиции, а затем с помощью операции or к нему добавляется младший байт числа n. При этом старший байт числа n, который является цифрой, сдвигается вправо на 3 позиции.
- После завершения цикла в переменной rev будет храниться шестнадцатеричное представление числа n, которое будет использоваться для проверки на палиндром.
- В последней строке выводится сообщение, которое будет содержать значение переменной n, если оно является палиндромом, и пустую строку в противном случае.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д