Распределение кода по функциям - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть программа, но все сделано в одной функции main. А нужно разделить все на отдельную функцию для ввода, отдельную для вывода и отдельную для решения. В main это все должно только вызываться.
//Найти в массиве и вывести значение наиболее часто встречающегося элемента.
 
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
 
#define SIZE 5 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int arr[SIZE];
    int i, j;
 
    for (i = 0; i < SIZE; ++i)
    {
        printf("mas[%d] = ", i );
        if (!scanf_s("%d", &arr[i]))
        {
            printf("Введено некорректное значение\n");
            system("pause");
            exit(0);
        }
    }
 
    printf("\n\n");
 
    int max = 0;
    int count;
 
    //создаем цикл на максимальное кол-во повторений.
    for (i = 0; i < SIZE; i++)
    {
        count = 0; 
        for (j = i; j < SIZE; j++)
        {
            if (arr[i] == arr[j])
            {
                ++count;
            }
        }
 
        if (count > max)
        {
            max = count;
        }
    }
 
    printf("Повторено в количестве: %d\n", max);
 
    //создаем цикл на поиск и вывод повторяющегося элемента
    for (i = 0; i < SIZE; i++)
    {
        count = 0;
        for (j = i; j < SIZE; j++)
        {
            if (arr[i] == arr[j])
            {
                ++count;
            }
        }
        if (count == max)
        {
            printf("Значение: %d\n", arr[i]);
        }
    }
 
    system("pause");
}

Решение задачи: «Распределение кода по функциям»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#define SIZE 5
 
void getar(int *ar);
void maxx(int *ar);
void digit(int *ar);
 
int i,j,max,count;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int arr[SIZE];
 
 
    getar(arr);     //ввод массива
    maxx(arr);      //количество повторений
    digit(arr);     //повторяющееся значение
 
    return 0;
}
 
 
void getar(int *ar)
{
 
    for (i = 0; i < SIZE; ++i)
    {
        printf("mas[%d] = ", i );
        if (!scanf("%d", &ar[i]))
        {
            printf("Введено некорректное значение\n");
            system("pause");
            exit(0);
        }
    }
 
    printf("\n\n");
}
 
void maxx(int *ar)
{
 
     //создаем цикл на максимальное кол-во повторений.
    for (i = 0; i < SIZE; i++)
    {
        int count = 0;
        for (j = i; j < SIZE; j++)
        {
            if (ar[i] == ar[j])
            {
                ++count;
            }
        }
 
        if (count > max)
        {
            max = count;
        }
    }
 
    printf("Повторено в количестве: %d\n", max);
 
}
 
void digit(int *ar)
{
 
    for (i = 0; i < SIZE; i++)
    {
        count = 0;
        for (j = i; j < SIZE; j++)
        {
            if (ar[i] == ar[j])
            {
                ++count;
            }
        }
        if (count == max)
        {
            printf("Значение: %d\n", ar[i]);
        }
    }
}

Объяснение кода листинга программы

  1. Объявлены функции: getar, maxx, digit.
  2. В функции main() объявлен основной массив arr[], его размер SIZE, а также переменные i, j, max, count.
  3. В функции main() после установки русской локали с помощью setlocale() происходит:
    • ввод массива с помощью функции getar();
    • поиск максимального количества повторений с помощью функции maxx();
    • поиск повторяющегося значения с помощью функции digit();
  4. В функции getar() происходит ввод массива с помощью цикла for и функции scanf(). Если ввод некорректен, программа выводит сообщение об ошибке и завершается.
  5. В функции maxx() происходит поиск максимального количества повторений с помощью двух вложенных циклов for. Переменная count инициализируется нулем для каждого элемента массива. Если текущий элемент массива повторяется, счетчик count увеличивается. Если максимальное количество повторений меньше, чем текущее, то значение max обновляется.
  6. В функции digit() происходит поиск повторяющегося значения с помощью двух вложенных циклов for. Переменная count инициализируется нулем для каждого элемента массива. Если текущий элемент массива повторяется, счетчик count увеличивается. Если количество повторений равно максимальному, то значение ar[i] выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы