С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 1
Регистрация: 28.03.2018
Сообщений: 48
1

Выход за пределы массива, устранение

27.01.2019, 11:31. Показов 4694. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем, привет!

Дано задание: Определить последовательность элементов массива, возрастает, убывает или не возрастает и не убывает

Сама программа работает, однако сравнение элементов выходит за пределы массива, объясните почему так?

ПС: скрин прилагается, в желтой рамке самой программы, с каким числом сравнивается заданный элемент, а в желтой рамке в самом коде (i = 0), мне говорят, что там должна быть единица.

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
#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 
#include <stdio.h> 
#include <cstdlib> 
 
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    int n, i, *a, k_voz = 0, k_ub = 1;
 
    cout << "Введите количество элементов последовательности: ";
    cin >> n;
 
    a = new int[n];
    cout << "Введите элементы последовательности\n";
    for (i = 0; i < n; i++)
    {
        cin >> a[i];
                cout << "a[" << i - 1 << "]=" << a[i - 1] << ", a[" << i << "]=" << a[i] << "\n";
        if (a[i - 1] < a[i])
        {
            k_voz = k_voz + 1;
        }
        if (a[i - 1] > a[i])
        {
            k_ub = k_ub + 1;
        }
    }
    cout << "Заданная последовательность:\n";
    for (i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    if (k_voz == n)
    {
        cout << "\nПоследовательность возрастает\n";
    }
    else
    {
        if (k_ub == n)
            cout << "\nПоследовательность убывает\n";
        else
        {
            cout << "\nПоследовательность не возрастает и не убывает\n";
        }
    }
    system("pause");
    return 0;
}
Миниатюры
Выход за пределы массива, устранение  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2019, 11:31
Ответы с готовыми решениями:

Выход за пределы массива
Столкнулся со следующей проблемой. Ввожу по формату: Мой код при выполнении выдаёт ошибку. Выход...

Выход за пределы массива
в одном из обучающих видео уроков наткнулся на ТАКОЕ. алгоритм sort получает в себя начало и...

Выход за пределы массива
#include &lt;assert.h&gt; #include &lt;assert.h&gt; #include &lt;string.h&gt; #include &lt;stdint.h&gt; #include...

Выход за пределы массива
Заполняю динамический массив случайными числами и вывожу его на экран. Дебажная куча жалуется на...

10
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
27.01.2019, 11:35 2
В массиве нет элемента с индексом -1.
Миниатюры
Выход за пределы массива, устранение  
0
0 / 0 / 1
Регистрация: 28.03.2018
Сообщений: 48
27.01.2019, 11:43  [ТС] 3
Всем, привет!

Дано задание: Определить последовательность элементов массива, убывает, возрастает или не убывает и не возрастает

Сам код работает как часы, однако первый элемент сравнивается с отрицательным числом, тем самым выходит за пределы массива, объясните почему так и как это исправить

Пс: скрин прилагается, в желтой рамке самого кода число с которым сравнивается первый заданный элемент массива, в самом коде в желтой рамке ( i = 0 ) мне говорят там должна быть единица.

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
#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 
#include <stdio.h> 
#include <cstdlib> 
 
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    int n, i, *a, k_voz = 0, k_ub = 1;
 
    cout << "Введите количество элементов последовательности: ";
    cin >> n;
 
    a = new int[n];
    cout << "Введите элементы последовательности\n";
    for (i = 0; i < n; i++)
    {
        cin >> a[i];
                cout << "a[" << i - 1 << "]=" << a[i - 1] << ", a[" << i << "]=" << a[i] << "\n";
        if (a[i - 1] < a[i])
        {
            k_voz = k_voz + 1;
        }
        if (a[i - 1] > a[i])
        {
            k_ub = k_ub + 1;
        }
    }
    cout << "Заданная последовательность:\n";
    for (i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    if (k_voz == n)
    {
        cout << "\nПоследовательность возрастает\n";
    }
    else
    {
        if (k_ub == n)
            cout << "\nПоследовательность убывает\n";
        else
        {
            cout << "\nПоследовательность не возрастает и не убывает\n";
        }
    }
    system("pause");
    return 0;
}

Заранее благодарен!
0
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
27.01.2019, 11:48 4
EwgenYYY, вот моя версия решения.

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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    system("color 0A");
 
    cout << "Укажите длину последовательности ";
    size_t n;
    cin >> n;
    auto a = new int[n];
    cout << "Введите значения элементов" << endl;
    for (size_t u = 0u; u < n; ++u)
    {
        cout << "a[" << u << "] = ";
        cin >> a[u];
    }
    auto up = true;
    auto down = true;
    for (size_t u = 1u; u < n; ++u)
    {
        up = a[u - 1] < a[u] && up;
        down = a[u - 1] > a[u] && down;
    }
    cout << "Последовательность является ";
    cout << (
        up ? "возрастающей" :
        down ? "убывающей" :
        "не возрастающей и не убывающей"
        ) << endl;
 
    system("pause");
    return 0;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.01.2019, 11:54 5
Цитата Сообщение от EwgenYYY Посмотреть сообщение
мне говорят, что там должна быть единица
если поставите 1 не будет вводиться первый элемент или перед циклом сin >>a[0]; ставить. но лучше так:
C++
1
2
3
for (i = 0; i < n-1; i++)
if (a[i] < a[i+1])...
else ...
второй if не нужен применяйте else. не забывайте что ещё случай равенства. ставить строгое неравенство или нестрогое зависит от того, какую последовательность считать возрастающей (т.е. когда следующий больше предыдущего или больше или равен предыдущему)
k_voz = k_voz + 1; лучше так: up++;
и строку 24 уберите - не делайте вывод после cin
0
0 / 0 / 1
Регистрация: 28.03.2018
Сообщений: 48
27.01.2019, 11:56  [ТС] 6
А число отрицательное разве может быть, где a [i] = 0

И там указанная последовательность из 4 элементов, а я ввел 3
Миниатюры
Выход за пределы массива, устранение  
0
0 / 0 / 1
Регистрация: 28.03.2018
Сообщений: 48
27.01.2019, 12:01  [ТС] 7
24 строка нужна, т.к без нее преподаватель не примет работу (она сама ввела эту строку)
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.01.2019, 12:16 8
Цитата Сообщение от EwgenYYY Посмотреть сообщение
И там указанная последовательность из 4 элементов, а я ввел 3
Вы прочитали пост ? чтобы не путаться сделайте ввод и сравнение в разных циклах

насчёт неравенства только определитесь - строгое или не строгое

Добавлено через 4 минуты
Цитата Сообщение от EwgenYYY Посмотреть сообщение
без нее преподаватель не примет работу
нельзя вывести 2 элемента если введён один. и не делается вывод сразу после cin. если хотите что-то вывести на экран - делайте отдельный цикл (или организуйте ввод случайных значений)

EwgenYYY, напишите Ваше определение возрастающей последовательности
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
27.01.2019, 12:18 9
Цитата Сообщение от EwgenYYY Посмотреть сообщение
i = 0;
Цитата Сообщение от EwgenYYY Посмотреть сообщение
a[i - 1]
К какому элементу получаете доступ?
0
0 / 0 / 1
Регистрация: 28.03.2018
Сообщений: 48
27.01.2019, 12:36  [ТС] 10
Последовательность возрастает, когда следующий элемент больше предыдущего элемента или больше или равен предыдущему
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.01.2019, 13:06 11
Цитата Сообщение от EwgenYYY Посмотреть сообщение
Последовательность возрастает, когда следующий элемент больше предыдущего элемента или больше или равен предыдущему
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
#include <iostream>
using namespace std;
 
int main()
{
    int n, up=0, down=0;
    cout <<"n="; cin >>n;
 
    double*a = new double[n];
 
    cout <<"Enter "<<n<<" elements:\n";
    for (int i = 0; i < n; i++)
      cin >>a[i];      
 
    for (int i = 0; i < n-1; i++)
      {
      if (a[i]<=a[i+1]) up++;
      if (a[i]>=a[i+1]) down++;
      }
    
    if (up==n-1 && down!=n-1) cout <<"UP\n";
    else if (down==n-1 && up!=n-1) cout <<"DOWN\n";
    else cout <<"No UP, No DOWN\n";
 
    delete[]a;
system("pause");
return 0;
}
0
27.01.2019, 13:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2019, 13:06
Помогаю со студенческими работами здесь

Выход за пределы массива
По мойму нарушение границ массива в c++ не допускается. Это будет выход за пределы массива и...

Выход за пределы массива
Где-то здесь происходит выход за пределы массива puti, но я не могу его найти уже второй день....

Проверка на выход за пределы массива
Есть самый обычный массив int veg; вот так заполняется for (int i = 0; i &lt; 3; i++) { ...

Проверка на выход на пределы массива
Напишите пожалуста пример кода как этого можна добиться в отдельной функции


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru