C/C++

Задание в языке Си

Написать программу, которая с помощью указателей на функцию выполняет задание:
Вычислить объём четырёх тел:
1.Параллелепипеда (по площади основания и высоте)
2.Пирамиды (по площади основания и высоте)
3.Цилиндра (по радиусу основания и высоте)
4.Конуса (по радиусу основания и высоте)
Благодарю
#include<stdio.h>
#include<unistd.h>
double V(float s, float h, int type)
{
double v=0;
switch(type)
{
case 1:v=s*h;break;
case 2:v=s*h/3;break;
case 3:v=3.14*s*s*h;break;
case 4:v=3.14*s*s*h/3;break;
default: v=0;
}
return v;
}

int main()
{

double (*pfunc)(float s,float h,int type);
pfunc=V;
printf("\n variant 1: %.4lf",pfunc(5,6,1));
printf("\n variant 2: %.4lf",pfunc(5,6,2));
printf("\n variant 3: %.4lf",pfunc(5,6,3));
printf("\n variant 4: %.4lf",pfunc(5,6,4));
printf("\n\n");
sleep(10);
return 0;
}
Серёга Кундугачев
Серёга Кундугачев
37 945
Лучший ответ
#include <stdlib.h>
#include <stdio.h>
#define PI 3.1415926535897932
double real(const char* msg) {
double value;
printf(msg);
scanf_s("%lf", &value);
return value;
}
double parallelepiped(double s, double h) {
return s * h;
}
double pyramid(double s, double h) {
return parallelepiped(s, h) / 3;
}
double cylinder(double r, double h) {
return PI * r * r * h;
}
double cone(double r, double h) {
return cylinder(r, h) / 3;
}
typedef double(*ptr)(double, double);
double volume(double a, double b, ptr fn) {
return fn(a, b);
}
int main(void) {
double sp, hp, vp;
double ps, ph, pv;
double rc, hc, vc;
double cr, ch, cv;
system("chcp 1251 > nul");

sp = real("Введите основание параллелепипеда: ");
hp = real("Введите высоту параллелепипеда: ");
vp = volume(sp, hp, parallelepiped);
printf("Объём параллелепипеда: %.2lf\n\n", vp);

ps = real("Введите основание пирамиды: ");
ph = real("Введите высоту пирамиды: ");
pv = volume(ps, ph, pyramid);
printf("Объём пирамиды: %.2lf\n\n", pv);

rc = real("Введите радиус основания цилиндра: ");
hc = real("Введите высоту цилиндра: ");
vc = volume(rc, hc, cylinder);
printf("Объём цилиндра: %.2lf\n\n", vc);

cr = real("Введите радиус основания конуса: ");
ch = real("Введите высоту конуса: ");
cv = volume(cr, ch, cone);
printf("Объём конуса: %.2lf\n\n", cv);

system("pause > nul");
return 0;
}
Алексей Дуреев
Алексей Дуреев
50 894