Методические указания
для практических занятий
по курсу:
Разработка ПО САП
на тему:
Поиск числовых палиндромов квадратов натуральных чисел.
Цель занятия - практическое изучение простейших приемов проектирования С - программ на примере поиска числовых палиндромов квадратов натуральных чисел.
Задание
Составить программу поиска и печати всех целых чисел от 1 до 100, символический формат представления которых в десятичной системе счисления образует числовой палиндром. Программа должна быть составлена в системе программирования С
Понятие палиндрома
Палиндром - это последовательность символов, которая одинаково читается слева направо и справа налево. Например, "радар" - текстовый палиндром. Его образует симметричная последовательность букв. Числовой палиндром, составленный из цифр. Например, 56165,1723271, 2212122 - числовые палиндромы.
Описание алгоритма
Построение алгоритма основано на том, что легче проверить свойство быть палиндромом, чем свойство быть квадратом. Поэтому целесообразно сначала вычислять квадрат числа, а затем проверять, является ли десятичное представление квадрата палиндромом. С учетом этого обстоятельства наиболее абстрактный проект алгоритма можно построить следующим образом:
Задать предельное значение счетчика чисел (100).
Обнулить счетчик чисел.
Выполнять цикл {
Увеличить значение счетчика на 1.
Возвести значение счетчика в квадрат.
Структуры данных
Исходя из анализа алгоритма решения данной задачи целесообразно объявить
count - счетчик целых чисел;
limit - предельное значение счетчика;
square - квадрат счетчика целых чисел;
direct - десятичное представление квадрата счетчика;
inverse - инверсное десятичное представление квадрата счетчика.
По логике работы алгоритма переменные count, limit и square должны принимать неотрицательные целые значения. Поэтому они должны иметь тип unsigned int. Поскольку предельное значение счетчика постоянно, объявление переменной limit можно дополнить модификатором const.
Для хранения прямого и инверсного представлений квадрата счетчика можно зарезервировать 2 массива символов размером по 6 байт. Такая размерность массивов обеспечивает хранение максимального значения символического представления квадрата счетчика (10000), длиной 5 байт плюс символ ‘\0’, который обозначает конец информационной части символьной строки. Размерность массивов может быть задана директивой препроцессора define.
Программная реализация
Исходный текст программной реализации рассмотренных алгоритма и структуры данных в системе программирования ‘’C’’ можно сосредоточить в одном текстовом файле, который имеет произвольное базовое имя, но обязательное расширение ‘’.с’’. Этот файл исходного текста программы должен содержать основную функцию с предопределенным именем main( ), которая должна присутствовать в любой C-программе, а также директивы препроцессора define и include. В данном случае рекомендуется использовать директиву define для макроопределения размерности символьных строк, а директива include для включения заголовочных файлов (n- файлов) <stdio.h> и <string.h>, содержащих прототипы библиотечных функций системы программирования ‘’C’’, которые необходимы для реализации алгоритма. Тело основной функции main ( ) можно условно разделить на 2 части: объявление переменных и основной цикл программы. Целочисленные переменные программы объявляются как автоматические. Память под них будет распределена в стеке выполняемого модуля программы. Массивы полезно объявить как статические, используя служебное слово static. Память под них будет распределена в области инициализированных данных выполняемого модуля программы. Элементы статических символьных массивов инициализируются символами ‘’\0’’.
Основной цикл программы удобно построить на базе конструкции do-while. Для выполнения процедурных шагов цикла рекомендуется использовать следующие стандартные библиотечные функции:
sprintf - преобразование целочисленного значения квадрата счетчика;
strcpy - копирование строкового представления значения квадрата счетчика;
strcmp - сравнение символьных строк прямого и инверсного представления значения квадрата счетчика;
printf - печать результатов на стандартный вывод.
Выполнение основной функции main ( ) должно завершаться оператором return.
Контрольные вопросы
Модифицировать исходный текст программы, заменив десятичное представление квадрата счетчика на 16- тиричное или 8-миричное.
Модифицировать исходный текст программы таким образом, чтобы предельное значение счетчика можно было передавать через аргументы командной строки вызова программы.
Какое влияние на быстродействие программы оказывает порядок определения автоматических переменных функции?
Какое максимальное целочисленное значение может быть присвоено переменным типа int и unsigned int?
3. М. Уэйт, С. Прата, Д Мартин
Язык Си. Руководство для начинающих. М., Мир, 1988г.