Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 13

Массивы, исправить ошибку

29.01.2023, 19:33. Показов 2852. Ответов 13

Студворк — интернет-сервис помощи студентам
Help, не могу понять как исправить ошибку.

Разработать программу из следующего списка. В программе обязательно
должен быть цикл do-while для организации повторных вычислений. Программа
должна отображать исходный массив, получившийся в результате массив (массивы)
и результаты расчетов.

Дан одномерный целочисленный массив размерностью N. Вычислить
среднее арифметическое положительных и среднее арифметическое
отрицательных элементов массива и сравнить, какое из них больше по модулю.

Необходимо добавить в программу
выбор способа заполнения массива:
– вручную с клавиатуры,
– по возрастанию от x1 до x2 с шагом k, где x1, x2, и k задаются с клавиатуры
– случайными числами.


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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <locale.h>
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#define N 20
#define NMAX 100
#define NMIN -100
#define SIZE 20
 
int p;
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    printf("Князев Данил, 1 курс, РФЗ-4\n");
    printf("Лабораторная работа №9, вар. 9\n");
    printf("\n");
 
    while (p != 3)
    {
        std::cout << "1 - вручную с клавиатуры\n2 - по возрастанию\n3 - случайными числами\n";
        printf("\n");
        std::cin >> p;
        switch (p)
        {
        case 1:
        {
            int Arr[N], i;
            int srmax, srmin, d;
            int sumplus = 0;
            int summin = 0;
            int sum1 = 0;
            int sum2 = 0;
 
            for (i = 0; i < N; i++) // Ввод массива с клавиатуры
            {
                printf("Arr[%d] = ", i); // Подсказка для пользователя
                scanf("%d", &Arr[i]); // Ввод элемента массива
            }
            for (i = 0; i < N; i++)
            {
                if (Arr[i] > 0)
                {
                    sum1 = sum1 + Arr[i];
                    sumplus++; // Число положительных элементов в массивe
                    srmax = sum1 / sumplus;
                }
                else
                {
                    sum2 = sum2 + Arr[i];
                    summin++; // Число отрицательных элементов в массиве
                    srmin = sum2 / summin;
                }
            }
            printf("среднее положительных: %d\n", srmax);
            printf("\n");
            printf("среднее отрицательных: %d\n", srmin);
            printf("\n");
            d = abs(srmin);
            if (srmax > d)
                printf("модуль среднего арифметического положительных чисел %d больше чем модуль отрицательных %d\n", srmax, d);
            else
                if (srmax < d)
                    printf("модуль среднего арифметического положительных чисел %d меньше чем модуль отрицательных %d\n", srmax, d);
                else
                    printf("модуль среднего арифметического положительных чисел %d равен модулю отрицательных %d\n", srmax, d);
            printf("\n");
        }
        break;
        case 2:
        {
            int Arr[N], i;
            int k, x1, x2;
            int srmax = 0;
            int srmin = 0;
            int d;
            int sumplus = 0;
            int summin = 0;
            int sum1 = 0;
            int sum2 = 0;
 
 
            printf("Введите x1: ");
            scanf("%d", &x1);
            printf("Введите x2: ");
            scanf("%d", &x2);
            printf("Введите шаг k: ");
            scanf("%d", &k);
            for (i = 0; x1 < x2; i++)
            {
                printf("Arr[%d] = %d\n", i, x1);
                Arr[i] = x1;
                x1 += k;
            }
            for (i = 0; i < x2; i++)
            {
                if (x1 > 0)
                {
                    sum1 = sum1 + x1;
                    sumplus++; // Число положительных элементов в массивe
                    srmax = sum1 / sumplus;
                }
                else
                    if (x1 < 0)
                    {
                        sum2 = sum2 + x1;
                        summin++; // Число отрицательных элементов в массиве
                        srmin = sum2 / summin;
                    }
            }
 
 
            printf("среднее положительных: %d\n", srmax);
            printf("\n");
            printf("среднее отрицательных: %d\n", srmin);
            printf("\n");
            d = abs(srmin);
            if (srmax > d)
                printf("модуль среднего арифметического положительных чисел %d больше чем модуль отрицательных %d\n", srmax, d);
            else
                if (srmax < d)
                    printf("модуль среднего арифметического положительных чисел %d меньше чем модуль отрицательных %d\n", srmax, d);
                else
                    printf("модуль среднего арифметического положительных чисел %d равен модулю отрицательных %d\n", srmax, d);
            printf("\n");
        }
        break;
        case 3:
        {
            int Arr[SIZE];
            int i;
            int srmax, srmin, d;
            int sumplus = 0;
            int summin = 0;
            int sum1 = 0;
            int sum2 = 0;
 
 
            srand((unsigned)time(NULL));
            for (i = 0; i < SIZE; i++) // Заполнение масс. случ. числами
                Arr[i] = (float)rand() / RAND_MAX * (NMAX - NMIN) + NMIN;
            for (i = 0; i < SIZE; i++)
                printf("%4d\n", Arr[i]); // Вывод на дисплей
            for (i = 0; i < N; i++)
            {
                if (Arr[i] > 0)
                {
                    sum1 = sum1 + Arr[i];
                    sumplus++; // Число положительных элементов в массивe
                    srmax = sum1 / sumplus;
                }
                else
                    if (Arr[i] < 0)
                    {
                        sum2 = sum2 + Arr[i];
                        summin++; // Число отрицательных элементов в массиве
                        srmin = sum2 / summin;
                    }
            }
 
            printf("среднее положительных: %d\n", srmax);
            printf("\n");
 
            printf("среднее отрицательных: %d\n", srmin);
            printf("\n");
            d = abs(srmin);
            if (srmax > d)
                printf("модуль среднего арифметического положительных чисел %d больше чем модуль отрицательных %d\n", srmax, d);
            else
                if (srmax < d)
                    printf("модуль среднего арифметического положительных чисел % d меньше чем модуль отрицательных % d\n", srmax, d);
                else
                    printf("модуль среднего арифметического положительных чисел %d равен модулю отрицательных %d\n", srmax, d);
            printf("\n");
        }
        break;
 
        default:
        {
            printf("\n");
            printf("Ты по-моему перепутал\n");
            printf("\n");
        }
        }
    }
}
Миниатюры
Массивы, исправить ошибку   Массивы, исправить ошибку  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2023, 19:33
Ответы с готовыми решениями:

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int a,int b) { ...

Массивы, исправить ошибку
Суммы посчитаны не правильно. Это не сумма ,а значение полученное при X . Нужно построить программу вычисляющую систему уравнений. ...

Помогите исправить ошибку(Массивы)
Вот есть такое задание: Перечислить элементы массива в виде привычном человеку. Должно выйти 3 окна alert с такими текстами: 1е -...

13
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
30.01.2023, 11:37
Цитата Сообщение от T3N3SSY Посмотреть сообщение
не могу понять как исправить ошибку.
Программа битком набита какой-то загадочной чушью, особенно в ветке 2. В ветке 2 возможен вылет за пределы массива с именно такими симптомами, но не на таких входных данных. Предпосылок именно для такой проблемы именно на приведенных входных данных навскидку не видно.

Скорее всего вы нас в чем-то обманываете, что-то недоговариваете...
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 13
30.01.2023, 12:44  [ТС]
Как тогда сократить программу?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
30.01.2023, 13:07
Цитата Сообщение от T3N3SSY Посмотреть сообщение
Как тогда сократить программу?
Не понял. Вы изначально вели речь об исправлении ошибки. А сейчас вдруг о каком-то "сокращении" заговорили. При чем здесь "сократить программу"?
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 13
31.01.2023, 20:45  [ТС]
Ну помоги хоть. Я уже не знаю в чем дело.
0
 Аватар для Storm Screamer
4896 / 1462 / 117
Регистрация: 21.04.2013
Сообщений: 8,773
31.01.2023, 21:03
T3N3SSY, у меня в кейсах 2 и 3 не возникло ошибок. В кейсе 1 была ошибка из-за того, что srmin не проинициализирован. Проинициализировал нулем и больше ошибок не было.
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 13
31.01.2023, 21:12  [ТС]
странно, а Visual какого года у тебя?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
31.01.2023, 22:03
Цитата Сообщение от T3N3SSY Посмотреть сообщение
странно, а Visual какого года у тебя?
Какое имеет значение?

По case 1 хорошо видно, что ошибка из-за неинициализированных srmin и srmax будет возникать в зависимости от входных данных. Но это совсем другая ошибка.

Цитата Сообщение от T3N3SSY Посмотреть сообщение
Ну помоги хоть. Я уже не знаю в чем дело.
Еще раз: где входные данные на которых воспроизводится ошибка??? Сколько мы их будем ждать?

(На приведенных вами скриншотах - вранье.)
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 3
12.02.2023, 18:16
По какой-то непонятной причине возникает непонятная мне ошибка /:
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
 
int main()
{
    char n;
    vector <char> data = {};
    ifstream file;
    string namefile = "C:\\Users\\shugu\\Desktop\\yt.txt";
    file.open(namefile);
    while (!file.eof())
    {
        file >> n;
        data.push_back(n);
    }
    file.close();
    int maxlen = 0, curlen = 0;
    for (int i = 0; i < data.size(); i++) {
        if (data[i] == 'X' && data[i + 1] == 'Z' && data[i + 2] == 'Z' && data[i + 3] == 'Y') {
            if (maxlen < curlen) {
                maxlen = curlen;
            }
            curlen = 3;
        }
        else {
            curlen++;
        }
    }
    
    cout << maxlen << endl;
}
Подскажите , пожалуйста, как быть
Ошибка в Mvs:
Line: 1949
Expression: vector subscript out of range
For information...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
12.02.2023, 21:04
Цитата Сообщение от sch772085 Посмотреть сообщение
По какой-то непонятной причине
По какой непонятной причине этот вопрос приклеен к этой теме?

Цитата Сообщение от sch772085 Посмотреть сообщение
По какой-то непонятной
Что ж тут непонятного? Вот он, открытым текстом

C++
1
2
     for (int i = 0; i < data.size(); i++) {
        if (data[i] == 'X' && data[i + 1] == 'Z' && data[i + 2] == 'Z' && data[i + 3] == 'Y') {
очевидный "vector subscript out of range".

Цитата Сообщение от sch772085 Посмотреть сообщение
while (!file.eof())
Еще одна ошибка: использование проверки на eof.

При считывании из файла последний элемент читается дважды
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 3
12.02.2023, 21:09
TheCalligrapher, получается , если размер массива 1000 , то он пытается проверить ещё и 1003-ий?
А что не так с eof ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
12.02.2023, 21:14
Цитата Сообщение от sch772085 Посмотреть сообщение
получается , если размер массива 1000 , то он пытается проверить ещё и 1003-ий?
Если размер массива равен 1000, то в какой-то момент цикл попытается проверить [997], [998], [999] и [1000]. А [1000] - это "vector subscript out of range".

Цитата Сообщение от sch772085 Посмотреть сообщение
А что не так с eof ?
А что с ним "так"? Что эта проверка должна делать? Где вы такое видели?

Я же дал ссылку.
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 3
12.02.2023, 21:23
TheCalligrapher, Большое вам спасибо!! Успехов и нервов в непростом занятии!
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 13
14.02.2023, 18:46  [ТС]
все я разобрался. спасибо что никто не помог.

Code
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <locale.h>
#include <stdio.h>
#include <iostream>
#define ctime
using namespace std;
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    printf("Князев Данил, 1 курс, РФЗ-4\n");
    printf("Лабораторная работа №9, вар. 9\n");
    printf("\n");
 
    setlocale(LC_ALL, "ru");
    srand((unsigned)time(NULL));
 
    const int size = 40;
    int arr[size]{};
    int k, x1, x2;
    int srmax = 0;
    int srmin = 0;
    int d, i;
    int sumplus = 0;
    int summin = 0;
    int sum1 = 0;
    int sum2 = 0;
 
    printf("\n");
    char ch{};
    do
    {
        int p = 0;
        while (p != 3)
        {
            std::cout << "1 - вручную с клавиатуры\n2 - по возрастанию\n3 - случайными числами\n";
            printf("\n");
            std::cin >> p;
            switch (p)
            {
            case 1:
            {
                for (i = 0; i < size; i++) // Ввод массива с клавиатуры
                {
                    cout << "Arr[";
                    cout << i;
                    cout << "] = ";
                    cin >> arr[i];
                }
                for (i = 0; i < size; i++)
                {
                    if (arr[i] > 0)
                    {
                        sum1 = sum1 + arr[i];
                        sumplus++; // Число положительных элементов в массивe
                        srmax = sum1 / sumplus;
                    }
                    else
                    {
                        sum2 = sum2 + arr[i];
                        summin++; // Число отрицательных элементов в массиве
                        srmin = sum2 / summin;
                    }
                }
                printf("среднее положительных: %d\n", srmax);
                printf("\n");
                printf("среднее отрицательных: %d\n", srmin);
                printf("\n");
                d = abs(srmin);
                if (srmax > d)
                    printf("модуль среднего арифметического положительных чисел %d больше чем модуль отрицательных %d\n", srmax, d);
                else
                    if (srmax < d)
                        printf("модуль среднего арифметического положительных чисел %d меньше чем модуль отрицательных %d\n", srmax, d);
                    else
                        printf("модуль среднего арифметического положительных чисел %d равен модулю отрицательных %d\n", srmax, d);
                printf("\n");
 
            }
            break;
            case 2:
            {
                cout << "Введите x1: " << endl;
                cin >> x1;
                cout << "Введите x2: " << endl;
                cin >> x2;
                cout << "Введите шаг k: " << endl;
                cin >> k;
 
                for (int i = 0; x1 < x2; i++)
                {
                    arr[i] = x1;
                    x1 += k;
 
                    cout << "Arr[";
                    cout << i;
                    cout << "] = ";
                    cout << arr[i] << endl;
                }
 
                for (int i = 0; i < size; i++)
                {
                    if (arr[i] > 0)
                    {
                        sum1 = sum1 + arr[i];
                        sumplus++; // Число положительных элементов в массивe
                        srmax = sum1 / sumplus;
                    }
                    else
                        if (arr[i] < 0)
                        {
                            sum2 = sum2 + arr[i];
                            summin++; // Число отрицательных элементов в массиве
                            srmin = sum2 / summin;
                        }
                }
                printf("среднее положительных: %d\n", srmax);
                printf("\n");
                printf("среднее отрицательных: %d\n", srmin);
                printf("\n");
                d = abs(srmin);
                if (srmax > d)
                    printf("модуль среднего арифметического положительных чисел %d больше чем модуль отрицательных %d\n", srmax, d);
                else
                    if (srmax < d)
                        printf("модуль среднего арифметического положительных чисел %d меньше чем модуль отрицательных %d\n", srmax, d);
                    else
                        printf("модуль среднего арифметического положительных чисел %d равен модулю отрицательных %d\n", srmax, d);
                printf("\n");
            }
            break;
            case 3:
            {
                for (int i = 0; i < size; i++)
                {
                    arr[i] = rand() % 100;
                }
 
                for (int i = 0; i < size; i++)
                {
                    cout << arr[i] << endl;
                }
 
                for (i = 0; i < size; i++)
                {
                    if (arr[i] > 0)
                    {
                        sum1 = sum1 + arr[i];
                        sumplus++; // Число положительных элементов в массивe
                        srmax = sum1 / sumplus;
                    }
                    else
                        if (arr[i] < 0)
                        {
                            sum2 = sum2 + arr[i];
                            summin++; // Число отрицательных элементов в массиве
                            srmin = sum2 / summin;
                        }
                }
                printf("среднее положительных: %d\n", srmax);
                printf("\n");
 
 
                printf("\n");
                d = abs(srmin);
                if (srmax > d)
                    printf("модуль среднего арифметического положительных чисел %d больше чем модуль отрицательных %d\n", srmax, d);
                else
                    if (srmax < d)
                        printf("модуль среднего арифметического положительных чисел % d меньше чем модуль отрицательных % d\n", srmax, d);
                    else
                        printf("модуль среднего арифметического положительных чисел %d равен модулю отрицательных %d\n", srmax, d);
                printf("\n");
            }
            cout << "Повторить? y/n: ";
            std::cin >> ch;
            printf("\n");
            }
        }   
    }while (ch != 'n');
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2023, 18:46
Помогаю со студенческими работами здесь

Массивы и ветвление - исправить ошибку
помогите найти ошибку: #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; void main() { ...

Задача на массивы, исправить ошибку нужно
массивы color1 и color2 состоят каждый из 7 элементов. Их значения - семь цветов(рандомные). Значения элементов массива формируются...

Многомерные массивы. Код выдает ошибку в 17 строке Как исправить?
using System; using System.Linq; using System.Text.RegularExpressions; interface Printable { public string GetString();...

Как исправить ошибку: формат теста исправить нельзя, только текст программы
class AmericanDate: def __init__(self, y, m, d): self.get_year = str(y) self.get_month = str(m//10)+str(m%10) ...

Исправить и дополнить программу. Метод Карацубы. Исправить ошибку и сделать ввод и вывод данных
Работаю в Visual studio 2019 Нужно: 1. Добавить к программе ввод и вывод данных, чтобы программа работала успешно. 2. Выскакивает...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru