Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
196 / 6 / 1
Регистрация: 10.11.2015
Сообщений: 171
1

Ошибка при выполнении программы

26.01.2020, 19:33. Показов 1320. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Проблема следующая: при выполнении программы выдает ошибку, когда начинаю вводить элементы массива (нецелые числа), затем, если даже ввожу целые числа, после ввода 15 элементов также выдает ошибку и дальше программа не выполняется. Понимаю, что где-то видимо с типом переменных ошибка, но не пойму, как исправить и где именно. Буду очень благодарна за помощь.
Задание звучит следующим образом: "Дан массив С[15] нецелых элементов, элементы вводятся с клавиатуры. Вычислить минимальный положительный и максимальный отрицательный элементы и их порядковые номера в массиве С."
Вот наработки:
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 <conio.h>
#include <windows.h>
using namespace std;
 const int N=15;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 float C[N], min_pol, max_otr;
 int i;
 printf("Введите массив из 15 нецелых элементов. \n");
   for (i=0; i<N; i++)
   {
      printf(" Введите элемент [%d]: ", i);
      scanf("%d", &C[i]);
   }
 
  max_otr=C[0];
   for(i=1; i<N; i++)
     if(C[i]<max_otr)
   {
      max_otr=C[i];
   }
 
  min_pol=C[0];
   for(i=1; i<N; i++)
     if ((C[i]<min_pol) && (C[i]>0))
   {
      min_pol=C[i];
   }
 
  printf("\n Максимальный отрицательный элемент = %d.", max_otr);
  printf("\n Минимальный положительный элемент = %d.", min_pol);
  
 getch();
 return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2020, 19:33
Ответы с готовыми решениями:

Ошибка при выполнении программы
Выдает вот такую ошибку при выполнении программы. Компиляция происходит нормально. а работать не...

Ошибка при выполнении программы
//set.h #pragma once typedef unsigned short WORD; class Set { private: int minElem;...

Ошибка при выполнении программы.
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #include &lt;cstdlib&gt; using namespace std;...

При выполнении программы выходит ошибка
Когда выполняется программа выходит ошибка: Необработанное исключение по адресу 0x77A8205E...

11
28 / 20 / 6
Регистрация: 19.11.2017
Сообщений: 91
26.01.2020, 19:35 2
Когда вводите или выводите вещественные числа %d на %f поменяйте
1
196 / 6 / 1
Регистрация: 10.11.2015
Сообщений: 171
26.01.2020, 19:45  [ТС] 3
Andymit, с индексами какая-то беда получается...
0
28 / 20 / 6
Регистрация: 19.11.2017
Сообщений: 91
26.01.2020, 19:55 4
Pretty_Girl, вот мое, может не самое оптимальное, но все же решение)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for (i = 0; i < N; i++)
    {
        printf(" Введите элемент [%d]: ", i);
        scanf("%f", &C[i]);
    }
    min_pol = 0;
    max_otr = 0;
    for (i = 0; i < N; i++)
    {
        if (!min_pol && C[i] > 0)
            min_pol = C[i];
        if (!max_otr && C[i] < 0)
            max_otr = C[i];
        if (C[i] < 0 && C[i] > max_otr)
            max_otr = C[i];
        if (C[i] > 0 && C[i] < min_pol)
            min_pol = C[i];
    }
    printf("\n Максимальный отрицательный элемент = %f.", max_otr);
    printf("\n Минимальный положительный элемент = %f.", min_pol);
1
196 / 6 / 1
Регистрация: 10.11.2015
Сообщений: 171
26.01.2020, 20:07  [ТС] 5
Andymit, А не могли бы вы объяснить, не совсем понимаю, по какому принципу определяются итоговые элементы, я совсем новичок в этом языке...
0
28 / 20 / 6
Регистрация: 19.11.2017
Сообщений: 91
26.01.2020, 20:21 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for (i = 0; i < N; i++)
    {
        printf(" Введите элемент [%d]: ", i);
        scanf("%f", &C[i]);
    }
    // обнуляем наши переменные, т.к. 0 и не отрицательное и не положительное число
    min_pol = 0;
    max_otr = 0;
    for (i = 0; i < N; i++) // проходимся по всему массиву
    {
        if (!min_pol && C[i] > 0) // если мин. положительный элемент = 0 И элемент массива больше нуля
            min_pol = C[i]; // то значит это первый положительный элемент массива и присваиваем его в мин. положительный
        if (!max_otr && C[i] < 0) // если макс. отрицательный = 0 И элемент массива меньше нуля
            max_otr = C[i]; // то тогда это первый отрицательный элемент поэтому присваиваем его в макс. отрицательный
        if (C[i] < 0 && C[i] > max_otr) // если элемент массива меньше нуля И он больше текущего макс. отрицательного
            max_otr = C[i]; // то присваиваем его в макс. отрицательный
        if (C[i] > 0 && C[i] < min_pol) // если элемент массива больше нуля И он меньше текущего мин. положительного
            min_pol = C[i]; // то присваиваем его в мин. положительный
    }
    printf("\n Максимальный отрицательный элемент = %f.", max_otr);
    printf("\n Минимальный положительный элемент = %f.", min_pol);
В кратце, мы проходим с начала массива до конца, когда встретим первый положительный элемент он станет минимальным, то же самое только с отрицательным. После того, как мы заполним первые минимальный и максимальный элементы, мы уже следующие элементы массива будем сравнивать с ними.
Если мы введем все нули то и на выходе будут нули. Если Введем только положительные элементы, то в максимальном отрицательном будет 0 и наоборот.
Написал много, но старался очень подробно, чтобы все ясно было) Надеюсь так и есть
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.01.2020, 20:27 7
Pretty_Girl, Вы в разделе С++. если нужен код на С++:
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
#include <iostream>
using namespace std;
 
int main()
{
    int n1=0, n2=0;
    const int n=15;
    double C[15], min_pos=0., max_neg=0.; 
 
    cout << "Enter " << n << " numbers:\n"; 
    for (int i = 0; i < n; i++)
        {
        cin >> C[i];
        if (C[i]>0. && (min_pos==0. || C[i]<min_pos)) {min_pos=C[i];n1=i+1;}
        if (C[i]<0. && (max_neg==0. || C[i]>max_neg)) {max_neg=C[i];n2=i+1;}
        } 
        
    if (n1) cout << "min positive = " << min_pos << "  number=" << n1 << "\n";
    else cout << "positive elements are absent\n";
    if (n2) cout << "max negative = " << max_neg << "  number=" << n2 << "\n";     
    else cout << "negative elements are absent\n";
    
system("pause");
return 0;
}
1
196 / 6 / 1
Регистрация: 10.11.2015
Сообщений: 171
26.01.2020, 20:35  [ТС] 8
Andymit, Спасибо большое, разобралась, но получается в строке
C++
1
if (C[i] < 0 && C[i] > max_otr)
знак надо поставить <? мы ведь ищем самый отрицательный элемент.
Есть еще вопрос по индексам, в ответе надо вывести индексы найденных элементов, да и при выводе они с нуля идут, можете, пожалуйста, подсказать как их при вводе элементов обозначать с единицы, а не с 0?

Добавлено через 5 минут
Yetty, Спасибо большое!
0
28 / 20 / 6
Регистрация: 19.11.2017
Сообщений: 91
26.01.2020, 20:35 9
Цитата Сообщение от Pretty_Girl Посмотреть сообщение
мы ведь ищем самый отрицательный элемент.
пожалуйста! Ну тут смотря что нужно) как я по условию понял мы ищем максимальный отрицательный.
У нас к примеру ряд чисел:
-5 -4 -3 -2 0 1 2 3 4 5
Тут максимальный отрицательный это -2. Так как из всех отрицательных чисел он больше всех.
А минимальный положительный это 1.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.01.2020, 20:40 10
Цитата Сообщение от Pretty_Girl Посмотреть сообщение
ответе надо вывести индексы найденных элементов
вывести нужно не индексы, а номера:
Цитата Сообщение от Pretty_Girl Посмотреть сообщение
Вычислить ... их порядковые номера
номера начинаются с 1
0
196 / 6 / 1
Регистрация: 10.11.2015
Сообщений: 171
26.01.2020, 20:43  [ТС] 11
Andymit, ну с мин.положительным я тоже сразу поняла, а насчет максимального отрицательного тоже думала как понять правильно эту формулировку...пришла к выводу, что наверное, имелось ввиду "наиболее отрицательный", еще раз большое спасибо за помощь!

Добавлено через 2 минуты
Yetty, да-да, я ошиблась просто словом
0
28 / 20 / 6
Регистрация: 19.11.2017
Сообщений: 91
26.01.2020, 20:43 12
Pretty_Girl, Всегда пожалуйста Но если вдруг нужен наиболее отрицательный элемент, то да, знак следует поменять в проверке
1
26.01.2020, 20:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2020, 20:43
Помогаю со студенческими работами здесь

Ошибка <hash_map> при выполнении программы
При выполнении простого консольного проекта C++ #include &quot;std_lib_facilities.h&quot; int main() {...

Настройка unicode. Ошибка при выполнении программы
Здравствуйте. Знаю, что есть tchar.h, но мне нужно настроить unicode самому. #ifdef UNICODE...

Динамический массив. Ошибка при выполнении программы
Программа должна предоставить заполнение массива пользователю, а дальше вывести массив на экран....

Ошибка при выполнении программы: Куча была повреждена
Не могу найти ошибку. Код: #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; ...


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

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