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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить возможность построения из отрезков треугольника http://www.cyberforum.ru/cpp-beginners/thread132025.html
Даны отрезки А, В, С. Определить возможность построения из этих отрезков треугольника. Если ввести 100 1 100, то треугольник будет построен, но учитель говорит это не правильно. Где я ошиблась? #include "stdio.h" main() { // Zapros vvoda ishodnih dannih a, b, c float a, b, c; printf("\nVvedite a,b,c:\n");
C++ Динамический массив строк Мне нужно считать строки из файла но я не знаю сколько будет строк! и занести их в массив указателей на строки. чтобы было так *a = {"Первая строка", "Вторая строка"}; Сколько строк я не знаю. Про динамическое выделение памяти знаю но как его сюда приделать не знаю) http://www.cyberforum.ru/cpp-beginners/thread132004.html
C++ «Обработка строк»
1. Дано некоторое число. Вставить его после каждого пробела.
Организация ввода-вывода в С++ C++
1. Создать двоичный файл и записать в него n целых чисел. Из файла создать массив, элементы которого не являются простыми числами и расположены до минимального элемента.
C++ Упражнение с использованием векторов http://www.cyberforum.ru/cpp-beginners/thread131996.html
Ребят помогите. Дана последовательность с целыми числами. Удалить из массива все максимальные элементы. Я решала подобную задачу но не векторами. Вопрос: каких использовать в данной ситуации?
C++ Упражнение с использованием структуры Ребят помогите.На основе данных в input.txt составить список студентов группы включив в них следующие данные: фио, год рождения, домашний адресс, какую школу окончил. вывести в output.txt список студентов, оконичвших в школу в этом году. Вот последнее незнаю как сделать а все остальное у меня уже есть. Т.е. как сказать на языке си++ что эти студенты окончили школу в этом году и их удалить из... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
19.05.2010, 12:22     Вывести индексы .......
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;
}
 
Текущее время: 01:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru