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

Прерывается выполнение программы - C++

Восстановить пароль Регистрация
 
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
08.12.2013, 22:48     Прерывается выполнение программы #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
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
cout<<"elementov v macccive 100"<<endl;
 float a[100];//объявляем массив
 int n;
 cout<<"Vvedite n<=100 (kol-vo elementov v maccive)"<<endl;
cin>>n;
 for (int i=0; i<n; i++)
 {cout<<"a["<<i<<"]=";cin>>a[i];}
 int one=0, second;// One=0 если максимальный элемент стоит первым
 float maxim, minim;
 maxim=a[0];
  minim=a[0];
 
 for (int i=1; i<n; i++)
 {
 if (maxim<a[i])
 {maxim=a[i];//нашел максимум
one=i;}
 
if (minim>=a[i])
 {minim=a[i];//нашел минимум
second=i;}
 }
 
if (one<second)//если максимальный элемент первее минимального, то выполняется цикл под условием
 {float s=0;
 for (int j=one+1; j<second; j++)
 {s+=a[j];}//считаем сумму меж макс. и миним.
 cout<<"s="<<s<<endl;}
else
 cout<<"Maksimal'nyj jelement vstrechaetsja pozzhe minimal'nogo"<<endl;
 
 
 
 return 0;}
Миниатюры
Прерывается выполнение программы   Прерывается выполнение программы  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
08.12.2013, 22:51     Прерывается выполнение программы #2
filimoncc, а вы не боитесь выхода за границы массива в 32 - 33 строках?
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
08.12.2013, 23:15  [ТС]     Прерывается выполнение программы #3
Ryuk, боюсь, однако в каком он месте выходит за границу? Можете правильный код дать?
И вообще, когда максимальный элемент первее минимального, то программа работает, а когда наоборот, то вылетает.
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
08.12.2013, 23:20     Прерывается выполнение программы #4
filimoncc, я же вам указал строки, в которых ошибка. У вас элемент массива j, может быть равен 15, в то время как в массиве всего 10 элементов.
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
08.12.2013, 23:25  [ТС]     Прерывается выполнение программы #5
А ещё такая штука странная выходит (см. скриншот):
Миниатюры
Прерывается выполнение программы  
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
08.12.2013, 23:27     Прерывается выполнение программы #6
filimoncc, вы о последних двух строках?
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
08.12.2013, 23:32  [ТС]     Прерывается выполнение программы #7
Почему, когда заполняю массив цифрами 1 2 3 4 5 - вылетает, а 1 1 1 1 5 - работает?!?

Добавлено через 4 минуты
Ryuk, я о том, что программа в разных вариациях чисел ведет себя по разному.
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
08.12.2013, 23:52     Прерывается выполнение программы #8
filimoncc, для начала избавьтесь от выхода за границы массива. В проверке на минимум, у вас стоит условие >=, если будут два одинаковых минимальных элемента в начале и в конце массива, то у вас i, всегда будет равно последнему индексу элемента. В начале программы вы сначала объявляете массив, а затем даете ему размерность 100, хотя потом вводите n как размерность. По последним стандартам С++, можно сначала ввести n, а затем объявить массив
C++
1
float a[n];
Я указал на ошибки которые попались на глаза. Исправьте их, а потом посмотрим.
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 00:13  [ТС]     Прерывается выполнение программы #9
Цитата Сообщение от Ryuk Посмотреть сообщение
filimoncc, для начала избавьтесь от выхода за границы массива. В проверке на минимум, у вас стоит условие >=, если будут два одинаковых минимальных элемента в начале и в конце массива, то у вас i, всегда будет равно последнему индексу элемента. В начале программы вы сначала объявляете массив, а затем даете ему размерность 100, хотя потом вводите n как размерность. По последним стандартам С++, можно сначала ввести n, а затем объявить массив
C++
1
float a[n];
Я указал на ошибки которые попались на глаза. Исправьте их, а потом посмотрим.
1)Не понимаю о каком выходе заграницу массива вы говорите, всё там верно.
2) Про поиск минимального. В условие сказано, что Подсчитать сумму элементов, расположенных между первым максимальным и последним минимальными элементами.
3) Сделал по новому стандарту
В итоге прога перестала вылетать, странно как-то.
Код:
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
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
cout<<"Vvedite kol-vo elementov v maccive"<<endl;
 int n;
cin>>n;
 float a[n];//объявляем массив
 
 
 for (int i=0; i<n; i++)
 {cout<<"a["<<i<<"]=";cin>>a[i];}
 int one=0, second;// One=0 если максимальный элемент стоит первым
 float maxim, minim;
 maxim=a[0];
  minim=a[0];
 
 for (int i=1; i<n; i++)
 {
 if (maxim<a[i])
 {maxim=a[i];//нашел максимум
one=i;}
 
if (minim>=a[i])
 {minim=a[i];//нашел минимум
second=i;}
 }
 
if (one<second)//если максимальный элемент первее минимального, то выполняется цикл под условием
 {float s=0;
 for (int j=one+1; j<second; j++)
 {s+=a[j];}//считаем сумму меж макс. и миним.
 cout<<"s="<<s<<endl;}
else
 cout<<"Maksimal'nyj jelement vstrechaetsja pozzhe minimal'nogo"<<endl;
 
 
 
 return 0;}
Добавлено через 4 минуты
Ryuk, помогите в этой теме, а то уже забыли В чём ошибка?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 00:29     Прерывается выполнение программы
Еще ссылки по теме:

По условию, заново выполнение программы? C++
C++ Выполнение программы через функцию
Некорректное выполнение программы C++

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

Или воспользуйтесь поиском по форуму:
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
09.12.2013, 00:29     Прерывается выполнение программы #10
filimoncc, странного ничего нет, ваш массив объявлялся изначально из 100 элементов, затем вы крутили циклы до введенного n, а если n = 20, то остальные 80 элементов просто висят в памяти.
Yandex
Объявления
09.12.2013, 00:29     Прерывается выполнение программы
Ответ Создать тему
Опции темы

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