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

Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
YUTD
 Аватар для YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
16.11.2011, 17:11     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #1
Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному. Массив должен передаваться в функцию в качестве параметра. Выполнить инициализацию массива при его объявлении.
Помогите пожалуйста!я в программировании 0...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 17:11     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному
Посмотрите здесь:

Определить длину самой большой последовательности подряд идущих согласных C++
C++ Программа для нахождения к-ой цифры в ряду подряд идущих натуральных чисел.
C++ Написать функцию нахождения суммы элементов двумерного массива
C++ Определить длину самой длинной подстроки из подряд стоящих букв «е»
C++ Создать массив A(n) и найти длину самойдлиной последовательности подряд идущих элементов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YUTD
 Аватар для YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
29.11.2011, 18:25  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #21
Конечно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 18:27     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #22
Посмотрите насколько просто она прописывается:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int Max(const int *a, const int n, const int x)
{
   int i = 0, j, max = 0;
   while (i < n)
   {
       while(i < n && a[i] != x)
          i++;
       j = i;
       while(i < n && a[i] == x)
          i++;
       if (i - j > max)
          max = i - j;
   }
   return max;
}
Сыроежка
Заблокирован
29.11.2011, 18:31     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #23
Цитата Сообщение от YUTD Посмотреть сообщение
получилось!!!

Добавлено через 2 минуты
ой
Теперь надо решить, что означает "найти максимальную последовательность". Скорей всего мы должны получить две характеристики этой последовательности: индекс ее первого элемента в исходном массиве и длину этой последовательности.
Но из функции мы не можем вернуть два значения одновременно. Функции могут возвращать лишь одно значение. Поэтому есть два варианта. Либо получать результирующие значения через параметры, объявленные как указатели, или ссылки, либо возвращать из функции структуру, содержащую два элемента.

И, сразу не сообразил, есть третий вариант! Возвращать из функции длину максимальной последовательности, а в параметрах в виде указателя передавать начало этой последовательности.

Естественно у нас помимо этого у функции всегда должны присутствовать обязательные два параметра: указатель на исходный массив и его длина.

Реализуем третий вариант

C++
1
int max_sequence( int **result, const int source[], int n );

Первым параметром является указатель на указатель типа int. Через него мы будем возвращать из функции начало подпоследовательности.

Пока определим тело функции в виде "пустышки". То есть будем возвращать исходный массив. А затем тело переделаем.

Итак, вставьте в свой код определение новой функции

C++
1
2
3
4
5
int max_sequence( int **result, const int source[], int n )
{
   *result = source;
   return ( n );
}
А в тело функции main вызов этой функции и вывод на консоль того, что мы получили. А подучим мы тот же самый исходный массив, так как это временная проверка работы функции.

C++
1
2
3
4
5
6
int *start;
int count;
 
count = max_sequence( &start, a, n );
 
display( start, count );
Проверьте, что получилось.
YUTD
 Аватар для YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
01.12.2011, 16:14  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #24
Спасибо!!! получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <stdio.h>
int Max (int*,int,int);
int main()
{int a[] = {9,3,3,3,1,4,7,2,1,1,4 
           };
cout<<Max(a,11,3);
}
int Max(int *a,int n,int x)
 {  int i=0,j,max=0;
   while (i<n);
   {
       while((i<n)&& (a[i] !=x)) i++; j = i;
       while((i<n)&& (a[i] == x)) i++;
       if ((i-j)>max) (max=i-j);
cout<<max;
   };
   system ("pause");
   return max;
 }
 Комментарий модератора 
Используйте теги форматирования кода!


ошибок не выдаёт,но запускаться не хочет( и после компиляции антивирус ещё и вирус обнаруживает.
Сыроежка
Заблокирован
01.12.2011, 16:26     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #25
YUTD,

У вас в этом предложении вашей функции

while (i<n);
{


имеет место бесконечный цикл. Вам надо убрать точку с запятой в конце этого предложения.
YUTD
 Аватар для YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
01.12.2011, 16:41  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #26
Цитата Сообщение от Сыроежка Посмотреть сообщение
YUTD,

У вас в этом предложении вашей функции

while (i<n);
{


имеет место бесконечный цикл. Вам надо убрать точку с запятой в конце этого предложения.
Убрала, откомпилировала, но результат тот же, ошибок нет и обнаружен вирус.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.12.2011, 16:51     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #27
Вот, все работает:
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
#include<stdio.h>
#include<conio.h>
 
int Max(const int *a, const int n, const int x)
{
   int i = 0, j, max = 0;
   while (i < n)
   {
       while(i < n && a[i] != x)
          i++;
       j = i;
       while(i < n && a[i] == x)
          i++;
       if (i - j > max)
          max = i - j;
   }
   return max;
}
 
int main()
{
   int size, a[] = {9,3,3,3,1,4,7,2,1,1,4};
   size = sizeof(a)/sizeof(*a);
   printf("%d\n", Max(a, size, 3));
   getch();
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 17:45     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному
Еще ссылки по теме:

Функция поиска самой длинной цепочки элементов массива C++
C++ Функция нахождения самой длинной неубывающей подпоследовательности
Найти длину самой длинной последовательности подряд идущих нулевых элементов массива C++

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

Или воспользуйтесь поиском по форуму:
YUTD
 Аватар для YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
01.12.2011, 17:45  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #28
Благодарю!))действительно работает!)
Yandex
Объявления
01.12.2011, 17:45     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному
Ответ Создать тему
Опции темы

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