У меня есть код, где он хочет прочитать, какую операцию он хочет сделать, а затем вычислить числа, используя операцию. У меня есть код библиотеки и заголовок, но основной код, я не знаю, что реализовать в теле. У меня есть скелетный код, но я рисую пробел на том, что еще мне нужно сделать.
Если это поможет, я пытаюсь выполнить операцию:
./statistics mean 10 20 30
иответ должен быть: 20.0
Заголовок библиотеки:
#ifndef MY_LIBRARY_H
#define MY_LIBRARY_H
float OP_MEAN(int size, float * values);
float OP_MAX(int size, float * values);
float OP_SD(int size, float * values);
#endif
Код библиотеки:
float OP_MEAN(int size, float * values)
{
int i;
float sum = 0.0;
for(i = 0; i < size; i++)
{
sum += values[i];
}
return sum/n;
}
float OP_MAX(int size, float * values)
{
int i;
float maximum = 0.0;
for(i = 0; i < size; i++)
{
if (values[i] > maximum)
{
maximum = values[i];
}
}
return maximum;
}
float OP_SD(int size, float * values)
{
float mean = OP_MEAN(size, values);
float sum = 0.0, un_sqrt_sd = 0.0;
int i;
for(i = 0; i < size; i++)
{
sum += pow(double(values[i] - mean), double(2));
}
un_sqrt_sd = (float) sum / (size - 1);
return (float) sqrt(double(un_sqrt_sd));
}
Основной код:
#include <stdio.h>
#include "my_lib.h"
// define the operations as enum here
enum operations{
OP_MEAN
OP_MAX
OP_SD
};
int main(int argc, char ** argv){
//parse command line arguments
enum operations op;
// 1. find the operator
if (strcmp(argv[1], "max") ...){ // check with man strcmp
op = OP_MAX;
}...
// 2. define an array with the necessary size
// 3. load numbers using my_atoi()
float (*fp)(int size, float * values); // declared function pointer variable
// use a switch to set the function pointer
switch(op_var){
case(OP_MAX):
fp = ... // set the function pointer
}
// invoke the function pointer
float result = fp(size, array)
printf("%.1f\n", result);
return 0;
}