Решение олимпиадной задачи "удивительные числа" по программированию
Анализ текста олимпиадной задачи "удивительные числа" по программированию. Разработка кода программы-решения задачи на языке Pascal, а также пояснения и рекомендации автора относительно того, как решать данную задачу. Тестирование программы на Pascal ABC.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 06.03.2018 |
Размер файла | 18,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
РЕШЕНИЕ ОЛИМПИАДНОЙ ЗАДАЧИ "УДИВИТЕЛЬНЫЕ ЧИСЛА" ПО ПРОГРАММИРОВАНИЮ
Кильдибаева Светлана Рустамовна
Современный мир тесно связан с всеобщей компьютеризацией. Для хорошего понимания принципов работы компьютерных устройств мало быть пользователем, важно знать основные принципы, которые заложены при создании программ. Существует мнение, что программированию можно обучить в любом возрасте, однако, чем быстрее произойдет знакомство с основами программирования, тем раньше сформируется определённый тип мышления, который не только будет полезен при работе с компьютером, но и поможет в обыденной жизни[1, 2]. Для знакомства с программированием подойдет более простой и логически понятный язык программирования, который был создан с целью обучения основам программирования. Можно начать с Кумира или Pascal.
В предыдущей статье [3] была предложена задача олимпиадного типа, и было пояснено, каким образом можно решить такую задачу. В данной статье рассматривается непосредственно код программы, который разобран с комментариями автора, чтобы можно было лучше понять ход программы.
Условие задачи:
"В городе Стерлитамак разрабатывается и развивается платформа Электронной игровой школы (https://eplayschool.ru). Пятиклассник Петя любит получать новые знания по математике и информатике, проходя уроки на платформе, а в свободное время он очень любит изучать числа и их свойства. Сейчас он увлёкся поиском «удивительных» чисел. Рассматривается натуральное число а из диапазона [10, 99]. Число c получается путём умножения числа a на некоторое натуральное число. Рассматриваются только трёхзначные натуральные числа c. Петя заметил, что в некоторых случаях, если в записи числа с зачеркнуть первую цифру и записать её в конец, то полученное число также будет нацело делиться на число a. Если это действие можно применить для числа дважды, то такие числа Петя называет «удивительными». Если в записи числа используется только одна цифра, то такое число не подходит. Петя решил найти сумму всех удивительных чисел с для чисел a из заданного диапазона. В результате он хочет найти цифру, которая соответствует сумме «удивительных» чисел.
Примечание. Цифра, которая должна быть найдена в результате, вычисляется следующим образом: например, если сумма «удивительных» чисел равняется 6452, то суммируем цифры числа 6+4+5+2=17. Если в результате получилась цифра, то можно записать её в ответ, иначе повторяем предыдущее действие. Для нашего примера суммируем цифры получившегося числа повторно 1+7=8."
Ниже приводится пример решения данной задачи на языке Pascal, для тестирования программы использован Pascal ABC.
program olimp1;
var a, b, c, i, sum, s, k, a1, a2, a3: integer;
begin
for a:=10 to 99 do
begin
b:=1;
while (a*b<1000) do
begin
c:=a*b;
if ((c>99) and (c<1000)) then
begin
// вывод текущих значений для перменных a и c
//writeln('! a=', a, ' c=', c); readln;
for i:=1 to 3 do
begin
// смещение цифры с начала в конец
c:=(c mod 100) *10+c div 100;
// k увеличивается, если число делится нацело при пермещение первой цифры в конец
if ((c mod a =0) and (c>99)) then k:=k+1;
// вывод текущих значений для перменных a, c, k
//writeln(' a=', a, ' c=', c, ' k=', k); readln;
end;
a1:=c mod 10; a2:=c div 100; a3:= (c div 10) mod 10;
if (a1=a2) and (a2=a3) and (a1=a3) then k:=k-1;
//writeln(' c=', c, 'a1=', a1, ' a2=', a2, ' a3=', a3); readln;
if (k=3) then
begin
sum:=sum+c;
writeln(' sum=', sum, ' a=', a, ' c=', c, ' k=', k); // вывод тестового значения
end;
k:=0;
end;
b:=b+1;
end;
end;
// фрагмент программы, который определяет сумму цифр
s:=0;
while (sum>9) do
begin
while (sum>0) do
begin
s:=s+sum mod 10;
sum:=sum div 10;
end;
writeln('s=', s);
sum:=s; s:=0;
end;
end.
В начале программы запускаем цикл, который перебирает все возможные числа a от 10 до 99:
for a:=10 to 99 do
Следующий цикл связан с перебором чисел с, каждое число -- это произведение числа a и некоторого натурального числа b. Для перебора данных значений запускаем цикл, который записан с учётом того, что число с обязательно должно быть трёхзначным:
while (a*b<1000) do
Переменная k в программе используется для того, чтобы посчитать, сколько раз выполнилось условие перезаписи первой цифры числа в конец. Если число таких перестановок равно 3, то данное число нам подходит и может быть записано в искомую сумму:
Согласно данным рассуждениям при наличии начальных навыков в программировании можно написать программу, которая будет вычислять искомую сумму:
if (k=3) then begin sum:=sum+c;
Проверка того, чтобы число с не состояло лишь из одной цифры, отражается в строчке:
if (a1=a2) and (a2=a3) and (a1=a3) then k:=k-1;
где a1, a2, a3 являются переменными, соответствующими цифре числа с, если они равны попарно друг другу, то такое число не подходит и счётчик уменьшим на 1. Даже если число соответствует первоначальному условию, то уменьшенный счетчик не позволит просуммировать данное число.
В конце программы приводится фрагмент, который связан с определением цифры, которая соответствует сумме искомых чисел. Фрагмент написан в универсальной форме, поэтому совершенно не важно, сколько раз потребуется суммировать цифры числа, соответствующего сумме:
while (sum>9) do
begin
while (sum>0) do
begin
s:=s+sum mod 10;
sum:=sum div 10;
end;
writeln('s=', s);
sum:=s; s:=0;
end;
Приведенный фрагмент решения показывает только один из способов решения и автор не настаивает, что это единственно верное решение задачи в данной постановке. Автор максимально в доступной форме постарался донести до читателя ход решения, который позволит понять суть решения задачи, а также позволит подготовиться к олимпиаде по программированию. В качестве тренировки рекомендуется разобраться в коде программы, а затем, если понятна идея решения, постараться воспроизвести её самостоятельно, не подглядывая в данное решение.
программирование олимпиадный задача код
Список литературы
1. Файн Я. Программирование на Java для детей, родителей, дедушек и бабушек. - 2011. - 231 с.
2. Симонович С., Евсеев Г. Занимательное программирование: Visual Basic. Книга для детей, родителей и учителей. - 2001. - 300 с.
3. Кильдибаева С.Р. О СПОСОБАХ РАЗВИТИЯ ЛОГИЧЕСКОГО МЫШЛЕНИЯ ПРИ РЕШЕНИИ ОЛИМПИАДНЫХ ЗАДАЧ ПО ПРОГРАММИРОВАНИЮ // NovaInfo.Ru (Электронный журнал.) - 2017 г. - № 74; URL: http://novainfo.ru/article/14255
Размещено на Allbest.ru
...Подобные документы
Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.
контрольная работа [150,4 K], добавлен 03.05.2014Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.
курсовая работа [446,0 K], добавлен 19.06.2014Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.
курсовая работа [115,5 K], добавлен 22.05.2010Принципы и подходы к динамическому программированию, сферы его использования, приемы и принципы. Решение задачи теста для написания и отладки программы, используемые входные и выходные данные. Тестирование заданной программы и инструкция пользователя.
курсовая работа [2,3 M], добавлен 19.03.2015Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.
контрольная работа [360,4 K], добавлен 13.06.2012Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.
курсовая работа [742,6 K], добавлен 03.07.2011Разработана программа решения двух задач на языке программирования Turbo Pascal. Спецификация задания. Описание входных и выходных данных. Математическая постановка задачи. Алгоритм ее решения. Описание и блок-схема программы. Результаты тестирования.
курсовая работа [275,8 K], добавлен 28.06.2008Описание алгоритма решения задачи графическим способом. Ввод элементов исходного массива в цикле. Нахождение определённых элементов. Сортировка элементов с помощью пузырькового метода. Разработка программы на языке Pascal. Поиск наибольшего элемента.
лабораторная работа [123,5 K], добавлен 15.01.2014Теоретические и практические аспекты решения прикладных задач с применением функций и процедур структурного (модульного) программирования. Особенности разработки схемы алгоритма и программы для вычисления массива z на языке Turbo Pascal 7.0, их описание.
курсовая работа [241,7 K], добавлен 11.12.2009Формирование текстового документа с именем goto.cpp., содержимое которого взято из русифицируемой справки MSDN по оператору безусловного перехода. Выбор оптимального алгоритма решения задачи, разработка интерфейса, отладка и тестирование программы.
курсовая работа [499,8 K], добавлен 10.11.2009Программирование и структура программы на языке Turbo Pascal и MS Visual C++6.0. Вычисление площади круга. Реализация программы в системе Turbo Pascal и MS VISUAL C++6.0 для Windows. Структура окна ТРW. Сохранение текста программы в файле на диске.
лабораторная работа [3,7 M], добавлен 22.03.2012Разработка программы на языке Turbo Pascal 7.0 для преобразования кинетической схемы протекания химических реакций при изотермических условиях в систему дифференциальных уравнений. Ее решение в численном виде методом Рунге-Кутта четвертого порядка.
курсовая работа [929,7 K], добавлен 06.01.2013Описание методов вычисления определителя матрицы. Математическое решение задачи с применением метода исключения Гаусса с выбором главного элемента. Схема алгоритма программы, описание переменных и структур данных, текст программы на языке Pascal.
курсовая работа [438,8 K], добавлен 16.02.2011Разработка программы для редактирования в оперативной памяти текстовых ASCII-файлов размером не более 40 килобайт, на языке программирования Pascal в среде разработки Turbo Pascal 6.0. Инструкция для пользователя. Листинг разработанной программы.
курсовая работа [21,3 K], добавлен 26.11.2011Составление программы и численное решение краевой задачи нестационарной теплопроводности методом конечных разностей. Определение начальных и граничных условий, физические условия однозначности. Реализация программы на языке программирования Pascal.
контрольная работа [1,3 M], добавлен 08.07.2013Составление транслятора на языке С для перевода кода программы из языка Pascal в код программы на языке Cи. Распознавание и перевод конструкций: for, type, function, integer. Вешняя спецификация, описание, структура, текст программы; распечатка текстов.
курсовая работа [287,8 K], добавлен 24.06.2011Разработка алгоритма поставленной задачи по обработке числовой информации в среде Turbo Pascal 7.0 с базовым языком программирования Pascal, отладка программы, реализующей разработанный алгоритм. Описание структуры программы, ее вспомогательных процедур.
курсовая работа [668,0 K], добавлен 25.02.2010Разработка и тестирование программы на языке Pascal для поиска, вывода на экран и сохранения в файл списка книг с фамилиями авторов в алфавитном порядке, изданных после 2012 года. Разработка алгоритма и его описание. Инструкции по эксплуатации приложения.
курсовая работа [903,0 K], добавлен 13.06.2013Расчеты по таблице перевозок грузов между отдельными регионами. Решение задачи управления процессами перевозок в среде Pascal. Решение задачи средствами MS Excel. Исходные данные и итоги по строкам и столбцам. Решение задачи средствами MATHCAD.
курсовая работа [1,8 M], добавлен 25.03.2015Составление программы на алгоритмическом языке Turbo Pascal. Разработка блок-схемы алгоритма её решения. Составление исходной Pascal-программы и реализация вычислений по составленной программе. Применение методов Рунге-Кутта и Рунге-Кутта-Мерсона.
курсовая работа [385,0 K], добавлен 17.09.2009