Форум программистов, компьютерный форум CyberForum.ru

файл, массив, мода и все на С++ - C++

Восстановить пароль Регистрация
 
kvik71
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 7
18.06.2013, 22:44     файл, массив, мода и все на С++ #1
Помогите решить задачу на С++

Помогите решить задачу на С++ Есть файл в нем 50000 чисел, числа от 0 до 90. Нужно считать данные в массив и найти наиболее часто повторяющиеся элементы (максимальный и минимальный). И соответственно вывести на экран.

Вот начало кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <io.h> 
#include <string.h> 
#include <sys\stat.h> 
#include <stdio.h> 
#include <fcntl.h> 
void main() 
{ 
int handle; 
char msg[] = "Hello" ; 
char ch; 
handle = open ("F:\TRASH\RAND.FIL", O_RDONLY) ; 
read (handle, msg, strlen(msg)); 
do 
{ 
read (handle, &ch, 1); 
printf("%c", ch); 
} 
while (!eof(handle)); 
close(handle);
а вот как дальше ... желательно использования цикла for
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 22:44     файл, массив, мода и все на С++
Посмотрите здесь:

C++ дан двумерный массив размерностью Н, заполненный целыми числами, все его отрицательные элементы записать в одномерный массив, все его положительные за
C++ Массив: Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные элементы массива В.
C++ Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать
C++ Из массива Х(N) все положительные элементы записать в массив У(К), а все отрицательные элементы – в массив Z(М)...
Файл: Считать все числа из файлав динамический массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kvik71
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 7
19.06.2013, 08:02  [ТС]     файл, массив, мода и все на С++ #2
У меня есть несколько подходящих вариантов кода, вот только я в с++ совсем не разбираюсь, поэтому прошу помощи в создании рабочей проги по заданию. В самом низу прикладываю исходный файл.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h> 
#include <conio.h> 
 
const int N = 90;
int main()
{     
 int mass[N]; // Обявляем массив.
 int list[N]; /* Обявляем массив, куда будут заносится равные, но наиб.  встречающиеся элементы.
                 Например, если задать массив из 5 элементов - 2, 2, 3, 3, 1, то вывести 2 и 3.
              */
 int i, j, count, maxcount, num, len; 
 printf("\n Massiv iz chisel ot 1 do 90: \n");
  for(i=0; i<N; i++)
  { printf("\n Massiv[%d] = %d. ", i, mass[i]); }
  
 len=0; maxcount=1; num=0; // Устанавливаем значения трех переменных по умолчанию.
   for (i=0; i<N; i++) // Перебираем все элементы массива.
    { count=0; // Счетчик в 0.      
       for (j=i; j<N; j++) // Перебираем все элементы от i до конца.
        if (mass[i] == mass[j]) // Если элемент [i] совпадает с одним из последующих [j],
           { count++; } // то увеличиваем значение счетчика.
        if (count==maxcount) // Если очередное число встречается maxcount раз, 
         { list[len]=i; // То занесём его в список.
            len++; } // Увеличиваем значение переменной.
        if (count > maxcount) // Если число больше максимального,
         { maxcount = count; // тогда оно максимальное.
           num = i;  //  Присаваеиваем элемент массива в новую переменную             
           len=1; // Разрушаем прежний список...
           list[0]=i; } // и формируем новый.
    }        
      printf("\n \n Povtor. chisla:");
     for(i=0; i<len; i++)  
      { printf(" %d.", mass[list[i]]); }  // Выводим значения часто повторяющийся элементов.
  
 getch(); 
 return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h> 
#include <conio.h> 
 
const int N = 90;
int main()
{     
 int mass[N]; 
 int list[N]; 
 int i, j, count, maxcount, num, len; 
 printf("\n Massiv : \n");
  for(i=0; i<N; i++)
  { printf("\n Massiv[%d] = %d. ", i, mass[i]); }
  
 len=0; maxcount=1; num=0;
   for (i=0; i<N; i++) 
    { count=0;       
       for (j=i; j<N; j++) 
        if (mass[i] == mass[j]) 
           { count++; }
        if (count==maxcount)
         { list[len]=i; 
            len++; } 
        if (count > maxcount) 
         { maxcount = count; 
           num = i;               
           len=1; 
           list[0]=i; } 
    }        
      printf("\n \n Povtor. chisla:");
     for(i=0; i<len; i++)  
      { printf(" %d.", mass[list[i]]); }  
  
 getch(); 
 return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define N 20
 
int main()
{
    int mass[N];
    for (int i = 0; i < N; i++)
    {
    mass[i] = rand()%100;
    cout << mass[i] << " ";
    }
 
    int maxcount(0), nn(0);
 
    for (int i = 0 ; i < N; i++)
    {
    int count(0);
    for (int j = i; j < N; j++)
        if (mass[i] == mass[j])
        count++;
 
    if (maxcount < count)
    {
        maxcount = count;
        nn = i;
    }
    }
 
    cout << endl << nn << endl;
 
    system("pause");
    return 0;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h> 
#include <conio.h> 
int main()
{
    srand(time(NULL));
    setlocale (0,"");
    
    int m=50000, 
        n=90, 
        rmax; 
    int *a = new int[m];
    for (int i=0; i<m; i++)
    a[i]= rand() % (n+1);
    
    
        for (int i=0; i<m; i++)
        cout << a[i]<< " ";
        cout << endl;
    
   
 
   
    cout << "proverka\n\n";
    int b[50000] ={0};
    for (int i=0; i<m; i++)
        b[a[i]]++;
    
    rmax=b[0];
    int I=0;
    for (int i=0; i<n; i++)
        if (b[i]>rmax)
        {
            rmax=b[i];
            I=i;
        }
    cout << "element " << I 
        << "\nvstrechaetsya naib kolvo raz: " 
        << rmax << " раз\n\n\n\n" <<endl;
      
    
system ("pause");
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define N 5
 
int main()
{
    int mass[N];
    //заполняем массив случайными значениями от 0 до 99
    for (int i = 0; i < N; i++)
    {
        mass[i] = rand()%100;
        cout << mass[i] << " ";
    }
    
    int maxcount(1), nn(-1);
    //перебираем все элементы массива
    for (int i = 0; i < N; i++)
    {
        int count(0);
        //перебираем все элементы от i до конца
        for (int j = i; j < N; j++)
            //если элемент i совпадает с одним из последующих (j), то увеличиваем число
            if (mass[i] == mass[j])
                count++;
 
        //если число больше ранее сохраненного - перезаписываем
        if (maxcount < count)
        {
            maxcount = count;
            nn = i;
        }
    }
    
    //выводим
    if (nn > -1)
        //значение
        cout << endl << mass[nn] << endl;
    else
        //или то, что повторяющихся элементов нет
        cout << endl << "No repeating elements" << endl;
 
 
    system("pause");
    return 0;
}
Вложения
Тип файла: rar RAND.rar (41.3 Кб, 5 просмотров)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.06.2013, 08:09     файл, массив, мода и все на С++ #3
Цитата Сообщение от kvik71 Посмотреть сообщение
Есть файл в нем 50000 чисел
У вас в файле 50000 целых чисел?
kvik71
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 7
19.06.2013, 08:23  [ТС]     файл, массив, мода и все на С++ #4
Цитата Сообщение от alsav22 Посмотреть сообщение
У вас в файле 50000 целых чисел?
да, примерно 50000 целых чисел в диапазоне от 0 до 90.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.06.2013, 08:28     файл, массив, мода и все на С++ #5
Откуда информация? В каком режиме числа записывались?
kvik71
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 7
19.06.2013, 08:34  [ТС]     файл, массив, мода и все на С++ #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда информация? В каком режиме числа записывались?
этот файл дал препод, кодировка у него хрен поймешь какая. так что в самом верху есть кусок кода как считать информацию.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.06.2013, 08:42     файл, массив, мода и все на С++ #7
По виду бинарная запись. Если в файле 50000 байтов, и в нём целые числа, то делим 50000 на 4 байта на число (для типа int) и получаем 12500 чисел.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 08:51     файл, массив, мода и все на С++ #8
Цитата Сообщение от kvik71 Посмотреть сообщение
Есть файл в нем 50000 чисел, числа от 0 до 90.
большое подозрение, что на каждое число выделен 1 байт, поэтому их 50000 и размер файла такой же.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.06.2013, 08:58     файл, массив, мода и все на С++ #9
Если так, то числа там есть больше 90.

Добавлено через 1 минуту
Только если читать по байту, то получается, приблизительно, то что нужно. Если как int, то очень большие.

Добавлено через 1 минуту
1084 числа больше 90.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 09:10     файл, массив, мода и все на С++ #10
Кстати, условие задачи не выполнено, встречаются числа > 90
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
#define N 256
 
int main()
{
   FILE *f;
   int count[N] = {0}, min, max, i, maxcount;
   unsigned char a;
   if((f = fopen("c:\\RAND.FIL", "rb")) == NULL)
      exit(0);
   while(fread(&a, sizeof(a), 1, f))
      ++count[a];
   fclose(f);
   maxcount = 0;
   min = -1;
   for(i = 0; i < N; ++i)
   {
      if (count[i])
      {
         max = i;
         if(min == -1)
            min = i;
         if (count[i] > maxcount)
            maxcount = count[i];
      }
   }
   printf("min = %d\n max = %d\n", min, max);
   puts("maxcount:");
   for(i = 0; i < N; ++i)
      if (count[i] == maxcount)
         printf("%d ", i);
   return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.06.2013, 09:23     файл, массив, мода и все на С++ #11
Цитата Сообщение от Thinker Посмотреть сообщение
встречаются числа > 90
В 9 посте я соврал. Таких чисел 4480. Максимальное 99.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 09:30     файл, массив, мода и все на С++ #12
min = 0, max = 99
наиболее часто встречающиеся: 9, 24
kvik71
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 7
19.06.2013, 10:15  [ТС]     файл, массив, мода и все на С++ #13
Цитата Сообщение от Thinker Посмотреть сообщение
min = 0, max = 99
наиболее часто встречающиеся: 9, 24

а что за функция "exit" у меня на нее ругается и ничего не выводит

Borland C++ 3.0 for DOS
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2013, 10:25     файл, массив, мода и все на С++
Еще ссылки по теме:

C++ Записать в файл g все четные числа файла f, а в файл n-все нечетные
Дан целочисленный файл А. Записать в файл В все кратные трём числа из А C++
Все четные числа из файла записать во второй файл, а нечетные — в третий файл C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 10:25     файл, массив, мода и все на С++ #14
поменяйте на return 1;
Yandex
Объявления
19.06.2013, 10:25     файл, массив, мода и все на С++
Ответ Создать тему
Опции темы

Текущее время: 01:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru