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

Вывести индексы ....... - C++

Восстановить пароль Регистрация
 
killalic
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 20
19.05.2010, 02:09     Вывести индексы ....... #1
Огласить массив целых чисел , и заполнить его случайными значениями. Размер массива 100. Его Диапазон от -100 до 100 .
Вывести начальные индексы всех , нерозрывных последовательностей негативных чисел , длинна которых больше 5 .

Помогите зделать , пожалуйста .
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2010, 02:09     Вывести индексы .......
Посмотрите здесь:

C++ вывести в массиве индексы
C++ Вывести начальные индексы всех непрерывных последовательностей
C++ Вывести индексы и значение массива
C++ Дан массив натуральных чисел А[m,n] и число а. Вывести этот массив на экран, вычислит количество элементов равных а и вывести их индексы
Вектор. Вывести в стек индексы двух минимальных значений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zViXz
3 / 3 / 0
Регистрация: 15.05.2010
Сообщений: 25
19.05.2010, 09:13     Вывести индексы ....... #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define n 100
 
main ()
{
int a[n], x, z, i;
srand(time(NULL));
for (i=0; i<n; i++)
    {
          a[i]=-n+rand()%n;
          printf ("%d, ", a[i]);
    }
printf ("\n_______________________\n");
for (i=0; i<n; i++)
    {
          if (a[i]<0) { x=i; for (z=0; a[i]<0; i++)  {z++;} if (z>5) {printf ("%d", x);} }
    }
getch ();
}
Рандом только поправь в заполнении, до сих пор до конца не понимаю как он работает
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,648
19.05.2010, 12:22     Вывести индексы ....... #3
zViXz, в вашем примере в строке 19 переменная i увеличивается без сравнения с размером массива, вследствие чего может выходить за его пределы и считывать числа за границей массива.
Привожу пример этого:
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
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
#define n 100
 
int main ()
{
int a[n + 1], x, z, i;
srand(time(NULL));
for (i=0; i<n; i++)
{
    a[i] = rand() % n;
    a[n - 1] = -1;
    a[n]     = -1;
    a[n + 1] = -1;
    a[n + 2] = -1;
    a[n + 3] = -1;
    a[n + 4] = -1;
 
    std::cout << i
              << ": ";
              
    printf ("%d, ", a[i]);
    std::cout << std::endl;
}
printf ("\n_______________________\n");
for (i=0; i<n; i++)
{
    if (a[i]<0) 
    { 
        x=i; 
        for (z=0; a[i]<0; i++)  
        {z++;} 
        if (z>5) 
        {
            printf ("%d", x);
            std::cout << std::endl;
        } 
    }
}
getch ();
}

Правильный код выглядит примерно так:
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
//Объявить массив целых чисел и заполнить его случайными значениями. 
//Размер массива 100. Его диапазон от -100 до 100 .
//Вывести начальные индексы всех непрерывных последовательностей отрицательных чисел, 
//длинна которых больше 5.
#include <vector>
#include <algorithm>
#include <iostream>
#include <locale>
 
typedef std::vector<int> T_int_arr;
 
const size_t ARR_SIZE = 100;
const size_t NEG_LINE_SIZE_LOW_BOUND = 5;
 
int get_rand()
{
    return rand() % (ARR_SIZE * 2) - ARR_SIZE;
}
 
void print_arr(T_int_arr arr)
{    
    for(size_t i = 0; i < arr.size(); ++i)
    {
        std::cout << i
                  << ": "
                  << arr[i]
                  << std::endl;
    }
}
 
void print_negate_line_ind
    (
        T_int_arr  arr, 
        size_t     neg_line_size_low_bound
    )
{
    for(size_t i = 0; i < arr.size(); ++i)
    {
        if(arr[i] < 0)
        {
            size_t  count = 0;        
            while(i + count < arr.size() && arr[i + count] < 0)
            {
                ++count;
            }
            if(count > neg_line_size_low_bound)
            {
                std::cout << i
                          << std::endl;
            }
            i += count;       
        }
    }   
}
 
int main()
{
    std::locale::global(std::locale("rus"));
    srand(static_cast<unsigned>(time(0)));
    T_int_arr a(ARR_SIZE);
    std::generate(a.begin(), a.end(), get_rand);
    std::cout << "Исходный массив: "
              << std::endl;
    print_arr(a);
    std::cout << "Нач. индексы непрерывных посл-тей отриц. чисел, длиной > "
              << NEG_LINE_SIZE_LOW_BOUND
              << ": "
              << std::endl;
    print_negate_line_ind(a, NEG_LINE_SIZE_LOW_BOUND);
    std::cout << std::endl
              << std::endl;
    return 0;
}
zViXz
3 / 3 / 0
Регистрация: 15.05.2010
Сообщений: 25
19.05.2010, 12:35     Вывести индексы ....... #4
Чёрт, и правда. Каюсь.
Yandex
Объявления
19.05.2010, 12:35     Вывести индексы .......
Ответ Создать тему
Опции темы

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