Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.doc
Скачиваний:
40
Добавлен:
12.04.2015
Размер:
4.91 Mб
Скачать

Пример 2

Найти все натуральные числа, не превосходящие заданного N и равные сумме кубов его цифр.

При разработке алгоритма программы перечислим объекты, необходимые для решения данной задачи:

  • N – заданное пользователем число. Ограничим его значением, максимально-допустимым форматом int, т.е. значением 32766. Однако чтобы выполнить проверку на ограничение, объявим его как unsigned int;

  • u – текущее натуральное число, не превосходящее N. Из этого числа выделим цифры, каждую из которых возведем в куб и найдем сумму кубов;

  • mas[5] – создадим массив из пяти элементов (максимальное число 32766 имеет пять разрядов) для хранения каждой цифры числа u. Объявим его как int;

  • b – текущий номер цифры числа u при их выделении. Нумерация начинается с нуля, количество цифр числа u равно: b – 1. Объявим ее как int;

  • sum – переменная, где ведется расчет суммы кубов цифр mas[i]. При обращении к ней необходимо её инициализировать нулем. Примем тип переменной – int;

  • i – индексная переменная, изменяемая от 0 до b. Имеет тип int.

Алгоритм решения этой задачи следующий:

  1. запрашивается значение числа N и проверяется его диапазон. Если N больше допустимого, то запрос повторяется;

  2. организуется цикл переменной u от 1 до N;

  3. расписываются цифры числа u в обратном порядке в массив mas ( в mas[0] – младший разряд, mas[b] – старший);

  4. подсчитывается сумма кубов всех цифр, записанных в mas[0]-mas[b] в поле sum;

  5. выполняется сравнение (u==sum). Если переменные равны, то выводятся результаты на печать, в противном случае меняется число u (u=u+1).

Программа для нашего примера на языке С будет иметь вид:

// Пример 2: Циклы for, while, структурное программирование

#include<stdio.h>

#include<math.h>

void main(void)

{

unsigned int N;

int u,b,sum,i,mas[5];

for(;;)

{

printf("\nУкажите значение N (меньше 32766) > ");

scanf("%d",&N);

if(N<32766) break;

}

for(u=1;u<=N;u++)

{

b=0; mas[b]=u;

while(mas[b]>=10)

{

mas[b+1]=mas[b]/10;

mas[b++]=mas[b]%10;

}

sum=0;

for(i=0;i<=b;i++) sum+=pow(mas[i],3);

if(u==sum) printf("\nПри u=%d сумма кубов цифр равна=%d",u,sum);

}

}

Задание на лабораторную работу 5 разработка программы со структурой «развилка» Цель работы

  1. Научиться разрабатывать алгоритмы программ и записывать их в виде блок-схем;

  2. Научиться писать сложные условные выражения в разветвляющихся программах;

  3. Научиться использовать простейшие средства отладки исходного кода;

  4. Закрепить навыки создания исходного кода, его компиляции и компоновки.

Задание:

  1. Определить, попадает ли точка с заданными координатами (x, y) в заштрихованную область (табл. 5.1).

  2. Разработать алгоритм задачи и отобразить его по ГОСТ 19.701 – 90. Координаты x, y запросить функцией scanf(). Условие попадания точки в заштрихованную область записать одним предложением (см. рис. 2.2).

  3. Выполнить программу в режиме отладки по шагам с просмотром перехода на ветви «Да» и «Нет».

  4. Проанализировать использованные элементы стиля программирования.

Примечание: Два числа, записанные через запятую, соответствуют значениям координат x и y координатной плоскости. Если координаты точек области не указаны, считать область неограниченной.

  1. Выполнить отладку программ, представленных в примерах 1 и 2.