Имеем задание:
Пользователь вводит значения высоты (h) правильной пирамиды и стороны (a)
правильного шестиугольника, лежащего в ее основании.
Составить функцию, которая получает введенные значения в качестве параметров и
возвращает значение площади полной поверхности (S) данного тела. Составить такую
же функцию для вычисления его объема (V).
Имеем код:
#include
#include
double v(double x, double y);
double s(double g);
int main(void)
{
double h,a,V,S;
printf("Input the height and edge of the pyramids.\n");
scanf("%.e", &h);
scanf("%.e", &a);
V=v(h,a);
S=s(a);
printf("Total square= %.e\n", S);
printf("Volume= %.e\n", V);
return(0);
}
double s(double g)
{
double p;
p=(((3*sqrt(3)*g*g)/3)+(6*0.5*g*g));
return(p);
}
double v(double x, double y)
{
double q;
q=((1/3)*((3*sqrt(3)*y*y)/3)*x);
return(q);
}
При попытке запустить, запрашивается значение h и a, а после, при вводе одного значения, программа резко переходит в конец и выдаёт всё по нулям, оставляя меня с выражением удивления на лице. Нет НИКАКОЙ вообще идеи, почему так происходит.
Другие языки программирования и технологии
Простая программа, а проблемы сложные. Си.
В сканф передавай "%lf"
=Миха Крылов=
Спасибо, это помогло разобраться с проблемой ввода.
Ну так твоё %.e - это ошибка. Надо %e - безо всяких точек.
#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
using namespace std;
double base(double a, unsigned n);
double area(double h, double a, unsigned n);
double volume(double h, double a, unsigned n);
int main() {
setlocale(LC_CTYPE, "Russian");
const unsigned n = 6;
cout << "Высота пирамиды: ";
double h;
cin >> h;
double a;
cout << "Сторона основания пирамиды: ";
cin >> a;
cout
<< fixed << setprecision(12)
<< "S = " << area(h, a, n)
<< "\nV = " << volume(h, a, n)
<< endl;
cin.sync();
cin.get();
}
double base(double a, unsigned n) {
return n * a * a * cos(M_PI / n) / 2;
}
double area(double h, double a, unsigned n) {
return n * a * sqrt(h * h + pow(a / (2 * tan(M_PI / n)), 2)) / 2 + base(a, n);
}
double volume(double h, double a, unsigned n) {
return base(a, n) * h / 3;
}
#include <iostream>
#include <iomanip>
using namespace std;
double base(double a, unsigned n);
double area(double h, double a, unsigned n);
double volume(double h, double a, unsigned n);
int main() {
setlocale(LC_CTYPE, "Russian");
const unsigned n = 6;
cout << "Высота пирамиды: ";
double h;
cin >> h;
double a;
cout << "Сторона основания пирамиды: ";
cin >> a;
cout
<< fixed << setprecision(12)
<< "S = " << area(h, a, n)
<< "\nV = " << volume(h, a, n)
<< endl;
cin.sync();
cin.get();
}
double base(double a, unsigned n) {
return n * a * a * cos(M_PI / n) / 2;
}
double area(double h, double a, unsigned n) {
return n * a * sqrt(h * h + pow(a / (2 * tan(M_PI / n)), 2)) / 2 + base(a, n);
}
double volume(double h, double a, unsigned n) {
return base(a, n) * h / 3;
}
Формулы совершенно ужасные.
Например, (((3*sqrt(3)*g*g)/3)+(6*0.5*g*g));
Умножаешь на 3 и тут же делишь на 3, пишешь легко вычисляемые в уме выражения вроде 6*0.5, а g*g спокойно выносится за скобки... Да и вообще зачем там переменная p? Можно писать просто
double s(double g){return (3+sqrt(3))*g*g;}
Если, конечно, исходная формула была верна, я ее не проверял.
Например, (((3*sqrt(3)*g*g)/3)+(6*0.5*g*g));
Умножаешь на 3 и тут же делишь на 3, пишешь легко вычисляемые в уме выражения вроде 6*0.5, а g*g спокойно выносится за скобки... Да и вообще зачем там переменная p? Можно писать просто
double s(double g){return (3+sqrt(3))*g*g;}
Если, конечно, исходная формула была верна, я ее не проверял.
Про %e уже сказали. А еще 1/3 - целочисленное деление, и 1/3==0. Надо писать 1.0/3.0.
=Миха Крылов=
Спасибо, это решило уже следующую проблему.
а почему return(p); а не return p; -?
отладку сделайте
отладку сделайте
Похожие вопросы
- Язык Си. Помогите пожалуйста написать простую программу.
- Помогите написать программу со switch в СИ
- помогите написать простые программы на Qbasic
- Помогите пожалуйста написать простую программу на "Си" по теме: "Стеки"
- Программа по переводу из нижнего в верхний регистр проблема, язык си.
- Помогите доделать программу пожалуйста ) На языке Си
- Простейшая программа/игра по qbasic
- простейшая программа которая будет выводить ответ функций умножения в C#
- Помогите пожалуйста с программой нужно написать в си++
- Программа с массивами на Си