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

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

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

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

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

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

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

Найти длину самой длинной последовательности подряд идущих нулевых элементов массива - C++
Задан числовой массив A(n). Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю.

Поиск самой длинной цепочки из подряд идущих одинаковых элементов в массиве - C++
Помогите пожалуйста решить программу. Если можно как можно проще используя только циклы, ветвления , массивы и переменные. Сам не...

Как правильно написать счетчик для нахождения самой длинной строки? - C++
Ввести массив строк и найти в нем максимальную по длине строку. Не учитывать случай, когда таких строк несколько. #include "stdafx.h" ...

Определить длину самой большой последовательности подряд идущих согласных - C++
В строке записаны несколько предложений . Каждое предложение заканчивается точкой, вопросительным или восклицательным знаками. 1....

Количество элементов в наиболее длинной подпоследовательности подряд идущих чисел одного знака - C++
ВОТ УСЛОВИЕ ЗАДАЧИ: Вводится последовательность из n целых чисел. Определить количество элементов в наиболее длинной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Сыроежка
Заблокирован
29.11.2011, 17:29 #16
Цитата Сообщение от YUTD Посмотреть сообщение
Тогда ответьте мне, пожалуйста. Значит должно быть несколько одномерных массивов???
Почему несколько? Всего один.

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

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

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

И задание говорит вам, что нужно найти максимальную последовательность рядом идущих элементов, которые равны заданному числу, например, 1. В данном примере такой подпоследовательностью будут три подряд идущие 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 };
0
Сыроежка
Заблокирован
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 );
}
Попробуйте это откомпилировать и выполнить, и, если все получится, пойдем дальше.
1
YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
29.11.2011, 18:10  [ТС] #19
получилось!!!

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


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

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

while (i<n);
{


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

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

while (i<n);
{


имеет место бесконечный цикл. Вам надо убрать точку с запятой в конце этого предложения.
Убрала, откомпилировала, но результат тот же, ошибок нет и обнаружен вирус.
0
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;
}
1
YUTD
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 26
01.12.2011, 17:45  [ТС] #28
Благодарю!))действительно работает!)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 17:45
Привет! Вот еще темы с ответами:

Программа для нахождения к-ой цифры в ряду подряд идущих натуральных чисел. - C++
Найти k-ую цифру в ряду цифр, составленных из подряд идущих натуральных чисел, начиная с 1. Тоесть ряд: 123456789101112131415.... Я...

Функция поиска самой длинной цепочки элементов массива - C++
Доброго времени суток форумчане! Препод взвалил непосильную на данный момент для меня задачку, с которой у меня возникли проблемы из за...

Найти в последовательности, количество пар подряд идущих отрицательных элементов - C++
Задача звучит так: Найти в последовательности чисел, заданных пользователем с клавиатуры, количество случаев, когда два члена подряд...

Создать массив A(n) и найти длину самойдлиной последовательности подряд идущих элементов - C++
Задан числовой массив A.Найти длинну самой длинной последовательности подряд идущих элементов массива,которые равны нулю. Число N вводится...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.12.2011, 17:45
Ответ Создать тему
Опции темы

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