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

Одномерые массивы - C++

Восстановить пароль Регистрация
 
Aloysha
0 / 0 / 0
Регистрация: 26.06.2010
Сообщений: 3
26.06.2010, 12:49     Одномерые массивы #1
Составить программу для подсчета наибольшего количества одинаковых элементов, расположенных последовательно, в массиве для каждого из одномерных массивов Х[20] и Y[16]. Инициализацию, вывод элементов массива, и их обработку организовать в отдельных функциях.

Народ SOS помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2010, 12:49     Одномерые массивы
Посмотрите здесь:

Массивы C++
C++ С++ массивы
индексные массивы и адресные массивы C++
C++ Массивы
C++ Массивы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shelest3
 Аватар для shelest3
7 / 7 / 2
Регистрация: 08.02.2010
Сообщений: 8
26.06.2010, 23:23     Одномерые массивы #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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include<windows.h>
using namespace std;
void init(int size, int arr[])
{
srand( GetTickCount());
for(int i = 0; i < size; i++)
{
arr[i] = rand()%5;
}
}
void show(int size, int arr[])
{
for(int i = 0; i < size; i++)
{
cout << " " << arr[i];
} cout << endl;
}
void search(int size, int arr[])
{
int count = 0, count_max = 0;
int index, index_max;
int number, number_max;
for(int i = 1; i < size - 1; i++)
{
if(arr[i] == arr[i+1])
{
number = arr[i];
index = i;
count ++;
}
if(count > count_max)
{
number_max = number;
index_max = index;
count_max = count;
number = 0;
index = 0;
count = 0;
}
else
{
number = 0;
index = 0;
count = 0;
}
}
cout << " наибольшая непрерывная последовательность чисел " << number_max << endl;
cout << " длина последовательности " << count_max + 1 << endl;
cout << " индекс последовательности " << index_max << endl;
}
void main()
{
setlocale(LC_ALL, "Russian");
 
const int x = 20;
int ar_x[x];
 
const int y = 16;
int ar_y[y];
 
init(x,ar_x);
show(x,ar_x);
search(x,ar_x);
 
init(y,ar_y);
show(y,ar_y);
search(y,ar_y);
}
grrrrr
 Аватар для grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
27.06.2010, 04:59     Одномерые массивы #3
Вот мой вариант.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using namespace std;
 
void sort(int*, int);
void in(int *,  int);
void search(int*, int);
void out(int *, int);
 
const int s1 = 20;
const int s2 = 16;
 
int main(int argc, char *argv[])
{
   int X[s1];
   int Y[s2];   
   in(X, s1);
   in(Y, s2);
  out(X, s1);
   out(Y, s2);
   search(X, s1);   
   search(Y, s2);
   
    
   system("PAUSE");
   return EXIT_SUCCESS;   
       
   
}
void in(int* arr, int s)
{
     int i;
     for(i=0; i<s; i++)
        arr[i] = rand() % 20;
}
void search(int *arr,  int s)
{
   int i, p1, p2, ind, n;
   n=0;
   p2=0;
   
   for(i=0; i<s-1; i++)
   {
            if(arr[i] == arr[i+1]) 
                n++;
            
            p1 = n;
            if(i==0) 
                continue; 
            
            if(p2<p1) 
            {
                p2=p1;
                ind = i;                
            }
            n=0;                                
   }
   cout << "maximalino posledovatelnie chisla : " <<arr[ind] << "\n";
}
void out(int* arr, int s)
{
   for(int i=0; i<s; i++)
      cout << arr[i] << " ";
   cout << "\n";
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.06.2010, 05:13     Одномерые массивы #4
ind

Если не инициализировать кидает ошибку при втором(?) проходе цикла ТТ
grrrrr
 Аватар для grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
27.06.2010, 05:19     Одномерые массивы #5
Lavroff, У меня нет ошибки. Наверное это как рандом сработает, если найдет повторяющиеся числа. Но проинициализировать можно в начале.

C++
1
ind = 0;
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
27.06.2010, 11:33     Одномерые массивы #6
Цитата Сообщение от Aloysha Посмотреть сообщение
подсчета наибольшего количества одинаковых элементов, расположенных последовательно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int MaxSequence(const int* arr, size_t size) {
        int result = 0;
  const int* end   = arr + size;
 
  for (const int* first = arr; first != end; ) {
    const int* last;
    for (last = first + 1; last != end && *last == *first; ++last)
      ;
 
    int length = last - first;
    if (length > result)
      result = length;
    
    first = last;
  }
 
  return result;
}
Результат: http://codepad.org/pEeIU2gZ

Вариант с STL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <algorithm>
#include <functional>
 
int MaxSequence(const int* arr, size_t size) {
  int result = 0;
 
  const int* last;
  for (const int* first = arr; first != arr + size; first = last) {
    last   = std::find_if(first , arr + size  , std::bind2nd(not_equal_to<int>(), *first));
    result = std::max    (result, last - first);
  }
 
  return result;
}
Результат: http://codepad.org/Y9diY8Fa
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2010, 20:12     Одномерые массивы
Еще ссылки по теме:

C++ массивы
C++ Массивы

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

Или воспользуйтесь поиском по форуму:
shelest3
 Аватар для shelest3
7 / 7 / 2
Регистрация: 08.02.2010
Сообщений: 8
27.06.2010, 20:12     Одномерые массивы #7
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
using namespace std;
 
void sort(int*, int);
void in(int *,  int);
void search(int*, int);
void out(int *, int);
 
const int s1 = 20;
const int s2 = 16;
 
int main(int argc, char *argv[])
{
   int X[s1];
   int Y[s2];   
   in(X, s1);
   in(Y, s2);
   out(X, s1);
   out(Y, s2);
   search(X, s1);   
   search(Y, s2);
    
   system("PAUSE");
   return EXIT_SUCCESS;   
       
   
}
void in(int* arr, int s)
{
     int i;
     for(i=0; i<s; i++)
     // как вы уже заметили наверное, это не случайные числа, а псевдослучайные, т.е. не такие уж они и случайные
        arr[i] = rand() % 20; 
}
void search(int *arr,  int s) //    Смысл передавать массив по указателю? Имя массива - это указатель
                              //    на его первый элемент, т.е. массив и так передается по указателю.
{
   int i, p1, p2, ind = -1, n;
   n=0;
   p2=0;
   
   for(i=0; i<s-1; i++)
   {
            if(arr[i] == arr[i+1]) 
                n++;
            
            p1 = n;
            if(i==0) 
                continue; 
            
            if(p2<p1) 
            {
                p2=p1;
                ind = i;       // если в массиве нет двух одинаковых элементов? Для того, чтобы программа
                               // отработала корректно ind нужно инициализировать при объявлении      
            }                  
            n=0;                                
   }
   // а в выводе поставить проверку
   (ind >= 0)? cout << "maximalino posledovatelnie chisla : " <<arr[ind] << "\n" : cout << " net posledovatelnosti" << "\n";
   // или так :
   //if(ind >= 0)
   //   cout << "maximalino posledovatelnie chisla : " <<arr[ind] << "\n";
   //else
   //   cout << " net posledovatelnosti" << "\n";
}
void out(int* arr, int s)
{
   for(int i=0; i<s; i++)
      cout << arr[i] << " ";
   cout << "\n";
}
/*
    Маленький дружеский совет: старайтесь писать код так, чтобы 
    использовать как можно меньше комментариев и пояснений.
    Например, имена переменным старайтесь давать такие, которые
    говорили бы сами за себя, т.е. "s" это "size" и т.д.
    Вам за это не раз потом спасибо скажут.
------------------------------------------------------
void search(int *arr,  int size)
{
   int  p_temp, p_max = 0, index = -1, count = 0;
   for(int i = 0; i < size - 1; i ++)
   {
            if(arr[i] == arr[i+1]) 
                count ++;
            
            p_temp = count;
 
            if(p_max < p_temp) 
            {
                p_max = p_temp;
                index = i;       ??? если вы не собираетесь возвращать "index", зачем он нужен ???      
            }
            count = 0;                                
   }
   (index >= 0)? cout << " maximalino posledovatelnie chisla : " << arr[index] << "\n" : cout << " net posledovatelnosti" << "\n";
}
------------------------------------------------------
    Так немного лучше, правда? 
                Всего доброго!*/
Yandex
Объявления
27.06.2010, 20:12     Одномерые массивы
Ответ Создать тему
Опции темы

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