1

Тема: Знайти число, яке найчастіше зустрічається в масиві

Попередня назва: Масив

Задано масиви дійсних чисел a, b, c розміру n. Написати функцію f1(float a[],…), яка знаходить S- число, яке найчастіше зустрічається в масиві та k-скільки разів. Числа вважати рівними, якщо вони різняться на задане маленьке число eps=0.00001 (наприклад). Точність eps –задаєте як необов’язковий параметр, по замовчуванні =0.00001. 
Знайти ( f1(a,….)+f1(b,…))/f1(с, ….)

2

Re: Знайти число, яке найчастіше зустрічається в масиві

Вирішили поділитися завданням з іншими?
Це так мило звісно, але розв’язок теж
можете викласти, може кому пригодиться. )

Подякували: koala, leofun012

3

Re: Знайти число, яке найчастіше зустрічається в масиві

можливо хтось може допомогти із розв'язком?

4

Re: Знайти число, яке найчастіше зустрічається в масиві

А у вас що не виходить? З чим саме проблеми?
Показуйте, розказуйте чи ви хочете, щоб за вас
зробили? То тут такого немає, читайте правила.

Подякували: koala1

5

Re: Знайти число, яке найчастіше зустрічається в масиві

Taniya написав:

можливо хтось може допомогти із розв'язком?

Почніть з написання функції  main().

6

Re: Знайти число, яке найчастіше зустрічається в масиві

Найкраще тут відсортувати масив, а потім лічити однакові значення серед послідовних.
Хоча, звісно, можна і "в лоба" - для кожного числа лічити, скільки разів воно зустрічається в масиві (можна навіть лічити серед тих, що йдуть після числа) чи створити окремий масив, де зберігати числа і кількості.

7

Re: Знайти число, яке найчастіше зустрічається в масиві

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>

struct MostOftenStruct{
    float value;
    int count;
};

#define N    100

const float EPS = 0.101f;

void fill_array(float  ar[], const unsigned int n, const float lo_v, const float hi_v);
void print_array(float ar[], const unsigned int n);
struct MostOftenStruct occurs_most_often(float ar[], const unsigned int n, const float d);

int main()
{
    srand(time(NULL));
    float a[N] = { 0 };
    float b[N] = { 0 };
    float c[N] = { 0 };// = new()
    fill_array(a, N, 0.0f, 50.0f);
    fill_array(b, N, 0.0f, 50.0f);
    fill_array(c, N, 0.0f, 50.0f);
    print_array(a, N);
    print_array(b, N);
    print_array(c, N);
    struct MostOftenStruct m = occurs_most_often(a, N, EPS);

    printf("S=%f, count=%d", m.value, m.count);

    return 0;
}

struct MostOftenStruct occurs_most_often(float array[], const unsigned int n, const float eps)
{
    struct MostOftenStruct * flstruct = NULL;

    float prevv = 0.0f, nextv = 0.0f, delta = 0.0f;
    int count = 0, sizestr = 0;
    struct MostOftenStruct mos;
    for (int i = 0; i < n; i++)
    {
        prevv = array[i];
        count = 0;
        for (int j = i; j < n; j++)
        {
            if (j == i)
            {
                continue;
            }
            nextv = array[j];
            delta = fabs(nextv - prevv);
            if (delta < eps)
            {
                count++;                
            }
        }

        if (count > 0)
        {
            mos.count = count;
            mos.value = array[i];
            sizestr++;

            flstruct = (struct MostOftenStruct *)realloc(flstruct, sizestr * sizeof(struct MostOftenStruct));
    
            flstruct[sizestr - 1] = mos;

        }
    }

    if (flstruct == NULL) return mos;
    count = flstruct[0].count;
    for (int i = 0; i < sizestr; i++)
    {
        if (count < flstruct[i].count)
        {
            mos.count = flstruct[i].count;
            mos.value = flstruct[i].value;
        }
        
    }
    free(flstruct);
    return mos;
}

void fill_array(float array[], const unsigned int n, const float lo_v, const float hi_v)
{
    float rndvalue;
    for (int i = 0; i < n; i++)
    {
        rndvalue = lo_v + (float)(rand()) / (float)(RAND_MAX / (hi_v - lo_v));
        array[i] = rndvalue;
    }
}

void print_array(float array[], const unsigned int n)
{
    printf("\n");
    for (int i = 0; i < n; i++)
    {
        printf("a[%3d]=% 10.4f ", i, array[i]);

        if ((i + 1) % 5 == 0) printf("\n");
    }
    printf("\n");
}