Определить, является ли шестнадцатеричное представление данного натурального числа палиндромом - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Приветствую. Есть у меня небольшая проблемка. Очень надеюсь на Вашу помощь. Дано задание для языка C: "Определить, является ли шестнадцатеричное представление данного натурального числа палиндромом." Его я решаю следующим образом:
Листинг программы
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <locale>
  5. int main()
  6. {
  7. setlocale(LC_ALL, "");
  8. unsigned int n;
  9. unsigned int mask = 0xF0000000;
  10. unsigned int mask2 = 0x0000000F;
  11. int i;
  12. int j;
  13. int start = 8;
  14. int polyndrome = 1;
  15.  
  16. printf("Введите число: ");
  17. scanf("%i", &n);
  18. for (i = 0; i < 8; ++i)
  19. {
  20. if ((n & mask) == 0)
  21. {
  22. mask >>= 4;
  23. mask &= 0x0FFFFFFF;
  24. --start;
  25. }
  26. else break;
  27. }
  28. for (i = 0, j = start; (i < j) && (polyndrome != 0); ++i, --j)
  29. {
  30. if (((n & mask) >> ((j - 1) * 4)) != ((n & mask2) >> (i * 4))) polyndrome = 0;
  31. mask >>= 4;
  32. mask2 <<= 4;
  33. }
  34. printf("%x", n);
  35. printf("\n");
  36. if (polyndrome == 1)
  37. printf("Шестнадцатеричное представление данного числа является палиндромом");
  38. else
  39. printf("Шестнадцатеричное представление данного числа не является палиндромом");
  40. _getch();
  41. }
Все работает, все хорошо. Но мне необходимо переписать эту программу на языке Pascal для следующего задания: "Определить, является ли восьмеричное представление данного натурального числа палиндромом." Я пробую вот так:
Листинг программы
  1. uses crt;
  2. var
  3. n: word;
  4. mask, mask2: word;
  5. i,j, start: byte;
  6. f: boolean;
  7. begin
  8. mask:=61440;
  9. mask2:=15;
  10. start:=4;
  11. f:=true;
  12. read(n);
  13. while i<4 do
  14. if n and mask = 0 then
  15. begin
  16. mask:= mask shr 4;
  17. mask:= mask and 4095;
  18. start:=start-1;
  19. i:=i+1;
  20. end
  21. else
  22. break;
  23. i:=0;
  24. j:=start;
  25. while (i<j) and (f) do
  26. begin
  27. if ((n and mask) shr ((j-1)*4)) <> ((n and mask2) shr (i*4))
  28. then f:=false;
  29. i:=i+1;
  30. j:=j-1;
  31. mask:=mask shr 4;
  32. mask2:=mask2 shl 4;
  33. end;
  34. writeln(f);
  35. readkey;
  36. end.
Но программа нормально не работает. Не могли бы Вы подсказать, в чем моя ошибка?

Решение задачи: «Определить, является ли шестнадцатеричное представление данного натурального числа палиндромом»

textual
Листинг программы
  1. var
  2.   n, T, rev : word;
  3.  
  4. begin
  5. //  n := 1098;  // Octal 2112
  6. //  n := 2412;  // Octal 4554
  7. //  n := 17620; // Octal 42324
  8.   n := 65529;   // Octal 177771
  9.   rev := 0; T := n;
  10.   while T > 0 do
  11.   begin
  12.     rev := rev shl 3;
  13.     rev := rev or (T and $7);
  14.     T := T shr 3;
  15.   end;
  16.  
  17.   writeln(n = rev);
  18. end.

Объяснение кода листинга программы

В данном коде на языке Free Pascal реализуется функция, которая проверяет, является ли шестнадцатеричное представление натурального числа палиндромом.

  1. В первой строке объявляются три переменные: — n — переменная, в которой будет храниться натуральное число; — T — промежуточная переменная; — rev — переменная, в которой будет храниться результат проверки на палиндром.
  2. Затем в комментариях приведены примеры значений для переменной n, которые будут использоваться в данном коде.
  3. Далее в цикле while перебираются все цифры числа n. Для этого число n делится на 10, и результат этого деления присваивается переменной T.
  4. В каждой итерации цикла значение переменной T сдвигается влево на 3 позиции, а затем с помощью операции or к нему добавляется младший байт числа n. При этом старший байт числа n, который является цифрой, сдвигается вправо на 3 позиции.
  5. После завершения цикла в переменной rev будет храниться шестнадцатеричное представление числа n, которое будет использоваться для проверки на палиндром.
  6. В последней строке выводится сообщение, которое будет содержать значение переменной n, если оно является палиндромом, и пустую строку в противном случае.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы