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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
#1

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

16.11.2011, 17:11. Просмотров 1829. Ответов 27
Метки нет (Все метки)

Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному. Массив должен передаваться в функцию в качестве параметра. Выполнить инициализацию массива при его объявлении.
Помогите пожалуйста!я в программировании 0...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 17:11     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному
Посмотрите здесь:
Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю C++
Найти длину самой длинной последовательности подряд идущих нулевых элементов массива C++
C++ Поиск самой длинной цепочки из подряд идущих одинаковых элементов в массиве
Как правильно написать счетчик для нахождения самой длинной строки? C++
Определить длину самой большой последовательности подряд идущих согласных C++
Количество элементов в наиболее длинной подпоследовательности подряд идущих чисел одного знака C++
C++ Программа для нахождения к-ой цифры в ряду подряд идущих натуральных чисел.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
29.11.2011, 17:29     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #16
Цитата Сообщение от YUTD Посмотреть сообщение
Тогда ответьте мне, пожалуйста. Значит должно быть несколько одномерных массивов???
Почему несколько? Всего один.

Я понял, чего вы не понимаете в своем задании. Когда в задании говорится о последовательности, то имеется в виду подпоследовательность в заданном одномерном массиве.

Например, пусть имеется массив

int a[] = { 1, 1. 4. 8. 1, 4, 7, 1, 1, 1, 4 };

И задание говорит вам, что нужно найти максимальную последовательность рядом идущих элементов, которые равны заданному числу, например, 1. В данном примере такой подпоследовательностью будут три подряд идущие 1 в конце массива.
YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
29.11.2011, 17:44  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #17
Как я поняла, начало программы будет выглядеть так:
#include <iostream.h>
#include <stdio.h>
int main ()
int a[] = { 9, 3, 3, 3, 1, 4, 7, 2, 1, 1, 4 };
Сыроежка
Заблокирован
29.11.2011, 17:58     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #18
Цитата Сообщение от YUTD Посмотреть сообщение
Как я поняла, начало программы будет выглядеть так:
#include <iostream.h>
#include <stdio.h>
int main ()
int a[] = { 9, 3, 3, 3, 1, 4, 7, 2, 1, 1, 4 };
Нет, не так.
В С++ стандартные заголовки указываются без расширения '.h". К тому же соверешнно нет необходимости включать два этих заголовка, так как по существу они выполняют одни и те же задачи, но разными способами. Кроме того вы забыли указать фигурные скобки для тела функции main. Поэтому начало программы, если она пишется на С++, должно выглядеть так

C++
1
2
3
4
5
6
7
8
9
10
#include   <iostream>
 
 
int main()
{
 
   int a[] = { 9, 3, 3, 3, 1, 4, 7, 2, 1, 1, 4 };
 
   return ( 0 );
}

Пока добавим сюда функцию вывода массива на консоль.

C++
1
2
3
4
5
void display( int a[], int n )
{
   for ( int i = 0; i < n; i++ ) std::cout << a[i] << ' ';
   std::cout << std::endl;
}

Объединим, что мы написали

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include   <iostream>
 
 
void display( int a[], int n )
{
   for ( int i = 0; i < n; i++ ) std::cout << a[i] << ' ';
   std::cout << std::endl;
}
 
int main()
{
 
   int a[] = { 9, 3, 3, 3, 1, 4, 7, 2, 1, 1, 4 };
 
   display( a, sizeof( a ) / sizeof( *a ) );
 
   return ( 0 );
}
Попробуйте это откомпилировать и выполнить, и, если все получится, пойдем дальше.
YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
29.11.2011, 18:10  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #19
получилось!!!

Добавлено через 2 минуты
ой
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.11.2011, 18:21     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #20
Цитата Сообщение от YUTD Посмотреть сообщение
Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному.
Вам еще нужна эта функция?
YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
29.11.2011, 18:25  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #21
Конечно
Thinker
Эксперт C++
4225 / 2199 / 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
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
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
01.12.2011, 16:41  [ТС]     Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному #26
Цитата Сообщение от Сыроежка Посмотреть сообщение
YUTD,

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

while (i<n);
{


имеет место бесконечный цикл. Вам надо убрать точку с запятой в конце этого предложения.
Убрала, откомпилировала, но результат тот же, ошибок нет и обнаружен вирус.
Thinker
Эксперт C++
4225 / 2199 / 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++ Создать массив A(n) и найти длину самойдлиной последовательности подряд идущих элементов
C++ Написать функцию нахождения суммы элементов двумерного массива
C++ Рекурсия: найти подпоследовательность подряд идущих элементов последовательности, сумма которых минимальна

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru