Вторник, 22.01.2019, 19:37 | RSS | Приветствую Вас Гость
Главная | Регистрация | Вход
Меню сайта
Категории раздела
Разное [10]
Решения задач (студентам) [9]
PC Игры - кодинг [2]
Python [1]
PHP, Mysql [1]
HTML, CSS, Javascript [1]
Scilab [1]
Поиск
Опрос
Какой язык программирования Вы предпочитаете?
Всего ответов: 40
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Решения задач (студентам)

Найти в массиве и вывести значение наиболее часто встречающегося элемента
Для подсчета количества каких либо элементов массива использованы два вложенных цикла. Внешний цикл перебирает все элементы массива чисел. Если текущий элемент не равен пустому (не равен NULL), то значение этого элемента запоминается в переменной curel, а затем во внутреннем цикле происходит поочередное сравнение значений всех элементов массива со значением переменной curel. При обнаружении совпадения переменная curcount, отвечающая за количество вхождений текущего для внешнего цикла элемента, увеличивается на единицу, а значение текущего для внутреннего цикла элемента заменяется пустым значением (NULL). После того как внутренний цикл доходит до конца массива чисел он заканчивает свою работу, а значения переменных curel и curcount записываются в элемент массива записей с индексом xmasind, каждая запись которого имеет поля value и count. Затем xmasind увеличивается на единицу. Внешний цикл заканчивает свою работу, когда доходит до конца массива чисел. В результате работы этого фрагмента массив записей содержит информацию о том, какие элементы сколько раз встречались в исходном массиве, а значения всех элементов исходного массива равны NULL.

Далее с помощью цикла среди полей записей массива, содержащих количество элементов, находится максимум и в другом цикле производится сравнение количества каждого из элементов с найденным максимумом. Элементы со значением поля, отвечающего за количество, равным максимуму выводятся.

Код программы.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct valcount {int value; int count;};

void main()
{
  int *mas, n, i, j, curel, curcount, xmasind=0, max;
  struct valcount *xmas;
  randomize();
  printf("Count of array's alements: ");
  scanf("%d", &n);
  mas = (int *)(calloc(n, sizeof(int)));
  xmas = (struct valcount *)(calloc(n, sizeof(struct valcount)));
  printf("Array's elements: ");
  for (i=0; i<n; i++)
  {
    mas[i] = random(10);
    printf("%d ", mas[i]);
  }
  for (i=0; i<n; i++)
  {
    if (mas[i] != NULL)
    {
      for (curel=mas[i], curcount=0, j=0; j<n; j++)
      {
        if (mas[j] == curel)
        {
          curcount++;
          mas[j] = NULL;
        }
      }
      xmas[xmasind].value = curel;
      xmas[xmasind].count = curcount;
      xmasind++;
    }
  }
  for (max=xmas[0].count, i=1; i<xmasind; i++)
    if (xmas[i].count > max) max = xmas[i].count;
  printf("\nMost often elements: ");
  for (i=0; i<xmasind; i++)
  {
    if (xmas[i].count == max) printf("%d ", xmas[i]);
  }
  getch();
}

Примечание: функция calloc() используется для динамического выделения памяти под массивы.
Поделиться ссылкой в соц. сетях:

Категория: Решения задач (студентам) | Добавил: =Sanek= (27.06.2011)
Просмотров: 2633 | Теги: арифметика, C/C++, Циклы, программирование | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

© 2019 raznocoding.do.am