C/C++

Очень непонятная задача по программированию, прощу о помощи!

Дано K наборов ненулевых целых чисел. Признаком завершения каждого набора является число 0. Вычислить среднее арифметическое всех элементов во всех наборах.
Nuriddin Aliev
Nuriddin Aliev
85
 #include  
#include
#include
using namespace std;
int main() {
cout > k;
vector averages;
vector box;
auto value = 0;
for (size_t i = 0; i < k; ++i) {
do {
if (value) box.push_back(value);
cin >> value;
} while (value);
auto avg = accumulate(box.begin(), box.end(), 0.0) / box.size();
if (avg) averages.push_back(avg);
box.clear();
}
cout.setf(ios::fixed);
cout.precision(3);
size_t n = 0;
for (auto average : averages) cout
Жумагали Альмагамбетовы
Жумагали Альмагамбетовы
54 013
Лучший ответ
Если нолик получаешь, добавляешь в конечный массив ср арифметическое и обнуляешь счетчики и продолжаешь. Задание согласен непонятное, если у тебя начало обучения 1 курс универа например, то нужно просто ср всех чисел исключая нули, если нет то как я написал - ср арф каждого набора.
Konstantin Tata
Konstantin Tata
3 437
Мой вариант на Си:
 #include  
#include
#include

#define BUFFER_SIZE 512

#define SZ(size, ptr) \
((size + 1) * (sizeof *ptr))

static const char *__next_set_ptr;

static size_t next_set(const char *str, int **dest_set)
{
size_t size = 0;
int *ptr = *dest_set;
int tmp;

if (str) {
__next_set_ptr = str;
}
else if (!__next_set_ptr) {
free(ptr);
return 0;
}
else {
free(ptr);

ptr = NULL;
}

while (*__next_set_ptr != '0') {
if (isdigit(*__next_set_ptr)) {
ptr = realloc(ptr, (size + 1) * sizeof *ptr);
ptr[size++] = *__next_set_ptr - '0';
}
else {
return 0;
}

__next_set_ptr++;
}

__next_set_ptr++;
*dest_set = ptr;
return size;
}

int main(void)
{
size_t set_size, size = 0;
char buffer[BUFFER_SIZE];
float *average = NULL;
int *set = NULL;
int i;

fgets(buffer, BUFFER_SIZE, stdin);

set_size = next_set(buffer, &set);

do {
average = realloc(average, SZ(size, average));

average[size] = 0;

for (i = 0; i < set_size; i++) {
average[size] += set[i];
}

average[size++] /= set_size;

} while (set_size = next_set(NULL, &set));

for (i = 0; i < size; i++) {
printf("set %d: %f\n", i + 1, average[i]);
}

free(average);
return 0;
}

// 12123012125012430673212054341012305430
// set 1: 1.800000
// set 2: 2.200000
// set 3: 2.500000
// set 4: 3.500000
// set 5: 3.400000
// set 6: 2.000000
// set 7: 4.000000
Надеюсь, что я правильно понял условие задачи.
Hamchik )))
Hamchik )))
1 893
 #include  
using namespace std;

//Вывод массив 1 набора
void outPut(int* arr, int length)
{
for (int i = 0; i < length; i++)
{
cout > el;
arr[i][j] = el;
increaseArr(arr[i], length); //Увеличивает массив 1 набора
if (el == 0)
{
arr[i][j + 1] = midMean(arr[i], length - 1); //Дает последнему символу ср. значение всего ряда 1 набора
break;
}
}
//outPut(arr[i], length); //Я выключил, что бы не мешала, но вы можете включить, а если к length добавить + 1, то можно вывести среднее значение массива набора
}
for (int i = 0; i < K; i++)
{
for (int j = 0; arr[i][j - 1] != 0; j++)
{
if (arr[i][j] == 0) //Выводим следующий символ после нуля, то есть среднее значение массива 1 набора
{
cout
Чувак, не хочу расстраивать, но тут всем плевать (я серьезно, люди не отвечают обычно на такие вопросы, сочувствую, удачи) (и я не насмехаюсь)
Nuriddin Aliev поверь, есть адекватные, которые отвечают...