#include <stdio.h>
#include <stdlib.h>
#include <time.h> /* to initialize your random generator */
#define BUFF_SIZE 10
#define FIVE 5
#define TEN 10
#define ZERO 0
#define ONE 1
float min=0;
float max=0;
float average=0;
float input_buffer[BUFF_SIZE+2] = {0};
float output_buffer[FIVE] = {0};
float local_buffer[TEN];
int no_of_data_pts=0;
int function_id=0;
// a function for generating data size, function ID and
// all data, and putting all of it into input_buffer
void generate_data() {
/* initialize random seed: */
srand (time(NULL));
/* Generate a random number: */
input_buffer[0] = floor(1 + 10*(float)rand()/RAND_MAX);
input_buffer[1] = floor(1 + 4*(float)rand()/RAND_MAX);
int i;
for (i=0; i < (int)input_buffer[0]; i++){
input_buffer[i+2]=(float)rand()/RAND_MAX;
}
}
// a function for copying the content of input_buffer into
// local buffer (called here my_buffer)
void reading() {
no_of_data_pts= (int)input_buffer[0];
function_id= (int)input_buffer[1];
int i;
for (i=0; i < no_of_data_pts; i++){
local_buffer[i]=input_buffer[2+i];
}
}
// a function for processing the content of local buffer;
// it reads function_ID and number of data points from my_buffer
// and saves the results also into my_buffer
void processing() {
float num=0;
int i;
float sum = 0;
float min=0;
for (i=0; i<no_of_data_pts; i++){
num = local_buffer[i+1];
if (num < min) {
min=num;
}
}
for (i=0;i<no_of_data_pts;i++){
num = local_buffer[i+1];
if (num < max) {
max=num;
}
}
for (i=0;i<no_of_data_pts;i++) {
sum = sum + local_buffer[i];
}
average = sum/no_of_data_pts;
}
// a function for copying the content of my_buffer to the
// output_buffer (according to the patter explained earlier)
void writing() {
switch (function_id){
case 1:
output_buffer[0]= min;
printf ("Minimum value is: %f ",output_buffer[0]);
break;
case 2:
output_buffer[0]= max;
printf ("Maximum value is: %f ",output_buffer[0]);
break;
case 3:
output_buffer[0]= average;
printf ("Average value is: %f ",output_buffer[0]);
break;
case 4:
output_buffer[0]= min;
output_buffer[1]= max;
output_buffer[2]= average;
printf ("Minimum, maximum and average value is: %f,%f,%f ",output_buffer[0],output_buffer[1],output_buffer[2]);
break;
}
}
int main() {
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
generate_data();
reading();
processing();
writing();
return 0;
}
Так что это назначение C.Почему я получаю значение 0 для моего min и max?
Поэтому, когда я запускаю этот код, он должен генерировать некоторые случайные числа от 0 до 1 и вычислять min, max и average.
Считывание данных из входного буфера включает в себя:
- чтение числа от первого элемента входного буфера, если это ненулевое числа (и это должно быть), программа выполняет две следующие операции, это число представляет собой число точек данных для чтения (no_of_data_points)
- чтения идентификатора функции обработки (function_ID)
- чтения всех точек данных идентификатора функции обработки данных и все точки считывается в локальный буфер
Обработка данных включает в себя:
- на основе считывания ID функции обработки конкретные расчеты выполняются, четыре различных обработки может иметь место:
- , если идентификатор 1: минимум точек данных определяется
- , если идентификатор 2: максимальное количество точек данных определяется
- , если идентификатор 3: среднее значение точек данных определяется
- , если идентификатор 4: минимум, макси мама и среднее количество точек данных результаты должны быть помещены в локальный буфер.
записи данных в выходной буфер включает в себя:
- писать число, указывающее, сколько точки данных записываются в выходной буфера (она включает в себя идентификатор функции обработки, и полученные результаты)
писать номер, называемый идентификатором функции обработки, указывающий, какая операция была выполнен на данных (диапазон от 1 до 4)
листа ING результат, и это зависит, какие функции это было:
§, если идентификатор 1: значение минимума записывается
§, если идентификатор 2: значение максимума записывается
§ если идентификатор 3: среднее значение записывается
§, если идентификатор 4: значений минимального, максимального и средние написано
Я затем распечатать результаты в самом конце программы ,
Код работает нормально. Ошибок нет, но почему-то я НЕ МОГУ понять, почему значения min и max всегда равны 0! Мое значение для среднего - это хорошо, но мои значения max и min всегда по какой-то причине 0, и это неправильно.
1) Не могли бы вы выслать здесь код? 2) 'Title' для ___Title___. Не предназначено для написания __body__. –
Добро пожаловать в StackOverflow. Мы не можем вам помочь, если вы не предоставляете свой код, в частности, часть, которая не работает для вас. – mjuarez
Я не могу отформатировать его должным образом. Я прикрепил ссылку. –