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

поиск в массиве - C++

Восстановить пароль Регистрация
 
hulio
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 11
21.03.2012, 14:45     поиск в массиве #1
Надо в массиве найти положительные значения в промежутке между наибольшим и наименьшим элементом. Но в массиве наибольшие и наименьшие элементы повторяются, а значит имеется несколько промежутков. Программа может проверить только первый промежуток. Как модифицировать программу, чтобы она прошлась по всем промежуткам и выводила сообщения о количестве положительных значений в каждом промежутке?
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
#include <iostream>
using namespace std;
void main( ){
    int index, max, min, indexmax, indexmin, countpositiv;
    index=0;
    int store[22]={-4, 8, -4, 78, 7, -56, -58, 78, 60 , 60, 75, -58, 32, -58, -1, 45, 6, 78, -4, 8, -58, 78};
max=store[0];
for(int i=0; i<22; i++){
    if(max<store[i]){
        max=store[i];
        index=i;}
    else if(max==store[i]){
        ;
    }
    indexmax=index;}
min=store[0];
for(int i=0; i<22; i++){
    if(min>store[i]){
        min=store[i];
        index=i;}
    else if(min==store[i]){
        ;
    }}
indexmin=index;
int i=0;
countpositiv=0;
if(indexmin<indexmax){
while(i<indexmax){
        if(store[i]==min&&store[i]==store[i+1]){
            indexmin=i+1;}
        i=i+1;}
index=indexmin+1;
while(index<indexmax){
    i=store[index];
    if(i>0)
        countpositiv=countpositiv+1;
    index=index+1;}}
else if(indexmin>indexmax){
    while(i<indexmin){
        if(store[i]==max&&store[i]==store[i+1]){
            indexmax=i+1;}
        i=i+1;}
    index=indexmax+1;
    while(index<indexmin){
        i=store[index];
        if(i>0)
            countpositiv=countpositiv+1;
        index=index+1;}}
cout<<"max "<<max<<" index "<<indexmax<<endl;
cout<<"min "<<min<<" index "<<indexmin<<endl;
cout<<"count positiv "<<countpositiv<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2012, 14:45     поиск в массиве
Посмотрите здесь:

C++ Поиск в массиве
C++ Поиск в массиве
C++ Поиск в массиве
C++ Поиск в массиве
C++ Поиск минимума в массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hulio
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 11
23.03.2012, 22:16  [ТС]     поиск в массиве #2
Если массив заполнен с помощью функции генерирующей случайные числа в заданном интервале значений, какой должен быть алгоритм поиска в массиве индексов элементов с наибольшим и наименьшим значением, чтобы между этими элементами были только элементы с промежуточными значениями? У меня не получается ничего подходящего.
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
23.03.2012, 22:54     поиск в массиве #3
как то очень запутано написано, не могу даже задание вкурить.

Надо найти макс мин элементы с их индексам - ясно
а что значит: "чтобы между этими элементами были только элементы с промежуточными значениями?"
тоесть вывести все элементы между этими значениями? или как?
hulio
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 11
23.03.2012, 23:35  [ТС]     поиск в массиве #4
Задача состоит в следующем. Написать программу, которая для целочисленного массива из 100 элементов определяет, сколько положительных элементов располагается между его максимальным и минимальным элементами. Алгоритм в самом общем виде:
1. Определить, где в массиве расположены его максимальный и минимальный элементы, то есть найти их индексы.
2. Просмотреть все элементы, расположенные между ними. Если элемент массива больше нуля, увеличить счетчик элементов на единицу
Если заполнить массив случайными числами c помощью функции генерации случайных чисел в заданном диапазоне, максимальные и минимальные элементы будут повторяться и будут расположены в массиве как попало, например следовать друг за другом. Функцию случайных чисел употребляю потому что не хочется заполнять массив вручную. В этом случае задача усложняется.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
23.03.2012, 23:57     поиск в массиве #5
Цитата Сообщение от hulio Посмотреть сообщение
Если заполнить массив случайными числами c помощью функции генерации случайных чисел в заданном диапазоне, максимальные и минимальные элементы будут повторяться и будут расположены в массиве как попало, например следовать друг за другом. Функцию случайных чисел употребляю потому что не хочется заполнять массив вручную. В этом случае задача усложняется.
Зачем так всё усложнять? Создай рендомно с большим разбросом числа и повторений не будет. А как считать, если идёт [мин, мин, макс, мин, макс, мин, макс]? Сколько должно выдать?
hulio
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 11
24.03.2012, 00:28  [ТС]     поиск в массиве #6
Считать надо только положительные числа между мин и макс или макс и мин, которые больше мин и меньше макс. Между крайними значениями где ведется подсчет, тоесть между мин и макс или макс и мин не должно быть крайних значений, поэтому последовательности вроде [мин, мин, макс, мин, макс, мин, макс] должны игнорироваться, надо искать индексы только таких мин и макс или макс и мин, между которыми расположены только числа больше мин и меньше макс.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.03.2012, 00:34     поиск в массиве #7
находишь первый минимум, первый максимум, считаешь в этом промежутке. Потом начинаешь поиск следующих минимума и максимума, но не с начала массива, а с текущих. И это всё повторяешь, пока не закончатся они.
hulio
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 11
24.03.2012, 01:34  [ТС]     поиск в массиве #8
Я пытался так делать, но у меня не всегда правильно считает. Можно пример кода?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.03.2012, 02:09     поиск в массиве #9
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
const int n=22;
int main()
{
int a[n]={-4, 8, -4, 78, 7, -56, -58, 78, 60 , 60, 75, -58, 32, -58, -1, 45, 6, 78, -4, 8, -58, 78};
int max=a[0];
int min=a[0];
int min_index=0;
int max_index=0;
int i;
for (i=0;i<n;i++) {
    if (a[i]<min) { min=a[i]; min_index=i; } 
    if (a[i]>max) { max=a[i]; max_index=i; }
}
if (max==min) {
   printf("0");
   exit(0);
}
int count=0;
while (true) {
      for (i=min_index+1;i<max_index-1;i++) {
          if (a[i]>0) count++;
          }
      bool find=false;
      for (i=max_index+1;i<n;i++) {
          if (a[i]==min) { min_index=i; find=true; break; }
          }
      if (find==false) break;
      find=false;
      for (i=min_index+1;i<n;i++) {
          if (a[i]==max) { max_index=i; find=true; break; }
          }
      if (find==false) break;
      }
printf("Count = %d\n",count);
getch();
return 0;    
}
Добавлено через 1 минуту
Хм... читал по-быстрому и не подумал, что надо еще в другую сторону проверять... Мой вариант работает для максимум имеет индекс > минимума.

Добавлено через 3 минуты
ммм, а если "мин 234 мин 345 453 макс 483 мин 3849 -3 макс", то что должно выдавать? 4?
hulio
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 11
24.03.2012, 02:44  [ТС]     поиск в массиве #10
"мин 234 мин 345 453 макс 483 мин 3849 -3 макс"
Согласно изложенным правилам "мин 234" должно быть отброшено, потому что промежуток заключен только между мин и макс или между макс и мин. В промежутке между этими крайними значениями не должно быть ни макс, ни мин. "мин 345 453 макс" правильный промежуток, положительных чисел 345 и 453 два, выводится 2, промежуток первый; "макс 483 мин" второй правильный промежуток, одно положительное число 483, выводится 1; "мин 3849 -3 макс" третий правильный промежуток, одно положительное число 3849, выводится 1.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 03:08     поиск в массиве
Еще ссылки по теме:

Поиск в массиве C++
C++ Поиск максимума в массиве
C++ Поиск в массиве строк

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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.03.2012, 03:08     поиск в массиве #11
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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
const int n=22;
int main()
{
int a[n]={-4, 8, -4, 78, 7, -56, -58, 78, 60 , 60, 75, -58, 32, -58, -1, 45, 6, 78, -4, 8, -58, 78};
int max=a[0];
int min=a[0];
int min_index=0;
int max_index=0;
int i;
for (i=0;i<n;i++) {
    if (a[i]<min) { min=a[i]; min_index=i; } 
    if (a[i]>max) { max=a[i]; max_index=i; }
}
if (max==min) {
   printf("Max=Min");
   exit(0);
}
 
while (true) {
      int count=0;
      bool find=false;
      if (max_index>min_index)
       {
        for (i=min_index+1;i<max_index;i++)
         {
          if (a[i]==min) min_index=i;
         }
        for (i=min_index+1;i<max_index;i++) {
          if (a[i]>0) count++;
          }
        for (i=max_index+1;i<n;i++) {
          if (a[i]==min) { min_index=i; find=true; break; }
          }      
       }
       else
       {
        for (i=max_index+1;i<min_index;i++)
         {
          if (a[i]==max) max_index=i;
         }        
        for (i=max_index+1;i<min_index;i++) {
          if (a[i]>0) count++;
          }
 
        for (i=min_index+1;i<n;i++)
         {
          if (a[i]==max) { max_index=i; find=true; break; }
         } 
        }
        printf("Count = %d\n",count);
        if (find==false) break;
} 
getch();
return 0;    
}
Yandex
Объявления
24.03.2012, 03:08     поиск в массиве
Ответ Создать тему
Опции темы

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