Рекуррентные соотношения. Задача с шарами - C (СИ)
Формулировка задачи:
Определить суммарный объем в литрах 12-и вложенных друг в друга шаров со стенками толщиной 5мм. Внутренний диаметр внутреннего шара равен 10см. Принять, что шары вкладываются друг в друга без зазоров.
Решение задачи: «Рекуррентные соотношения. Задача с шарами»
textual
Листинг программы
/*
Используемая формула: Vсф = 4/3 * PI * R^3 (1)
Пусть дано N шаров.
Что такое суммарный объём вложенных друг в друга шаров? - это внутренний объём внешнего шара (Vиск).
Что такое внутренний объём внешнего шара (Vиск)? - это внутренний радиус внешнего шара (Rвн), подставленный в формулу (1).
Как определить внутренний радиус внешнего шара(Rвн) - это начальный радиус (Rнач) + все приращения на радиус(H), кроме последнего.
Что такое приращение на радиус? - это толщина стенки каждого вложенного шара.
Таким образом, необходимо выразить R(вн). R(вн) = R(нач) + H * (N - 1).
Далее использовать R(вн) в формуле (1).
1. Выразить H в см.
2. Выразить (Dнач) в (Rнач)
2. Рассчитать R(вн) в см.
3. Рассчитать объём в литрах.
*/
#include <stdio.h>
//5мм / 10 = 0.5 см
#define WALL 0.5
//10см / 2 = 5 см
#define ST_RAD 5.0
#define PI 3.141592653589
#define SPHERE 12
//Рассчитать R(вн) в см.
double get_rad(const double st_rad, const double wall, const int sphere);
//Рассчитать V(иск) объём в литрах.
double get_answ(const double r_ins, const double pi);
int main()
{
double r_inside, answer;
r_inside = get_rad(ST_RAD, WALL, SPHERE);
answer = get_answ(r_inside, PI);
fprintf(stdout, "r_inside == %.2f in cubic cm\n", r_inside);
fprintf(stdout, "the volume in litres: %.2f\n", answer);
return 0;
}
//------------------------------------------------------------------------
double get_rad(const double st_rad, const double wall, const int sphere)
{
double rad;
rad = st_rad + wall * (sphere - 1);
return rad;
}
//------------------------------------------------------------------------
double get_answ(const double r_ins, const double pi)
{
double answer;
//В кубических сантиметрах.
answer = 4.0 / 3.0 * pi * (r_ins * r_ins * r_ins);
//В литрах.
return answer / 1000.0;
}
//------------------------------------------------------------------------
Объяснение кода листинга программы
- В функции get_rad выражается радиус R(вн) как сумма начального радиуса R(нач) и всех приращений на радиус H, кроме последнего. Приращение на радиус H равно 0.5 см (5мм / 10 = 0.5 см).
- В функции get_answ рассчитывается объём V(иск) как произведение числа Пи PI на куб радиуса R(вн) в кубических сантиметрах, а затем переводится в литры, делая скидку на 1000.
- В функции main() вызываются функции get_rad и get_answ, передавая им значения начальных параметров, полученных в результате компиляции. Значение R(вн) округляется до двух знаков после запятой и выводится на экран вместе с рассчитанным объёмом V(иск).