Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 01:49   #1
_Sequence_
Пользователь
 
Регистрация: 21.10.2010
Сообщений: 15
Сообщение Непонятная "ошибка" (проблема)

Люди, помогите найти ошибку
Суть программы: "Найти сумму отрицательных элементов в массиве"
PHP код:
#include <iostream>

using namespace std;

int main()
{
    
setlocale(LC_ALL"Russian");
    
int scheta;
    
int element;
    
char reset;
    
0;
    do
    {
    
cout << "Введите количество элементов в массиве: ";
    
cin >> element;
        for (
schet 0;schet elementschet++)
    {
    
int massive[element];
    
cin >> massive[element];
    if (
massive[element] < 0)
        {
            
+= massive[element];
        }
    }
    
cout << "Сумма отрицательных элементов: " << << endl;
    
cout << "Хотите попробовать еще, нажмите +" << endl;
    
cin >> reset;
    }
    while (
reset == '+');
    return 
0;

При введении кол-ва эл-тов в массиве "4"; первое значение "-7", 3-е значение массива "-2", программа выдает не то, что нужно.

Заранее благодарен(=
_Sequence_ вне форума Ответить с цитированием
Старый 17.12.2012, 02:12   #2
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Код:
int massive[element];
используйте динамическое выделение памяти.
crymchanin вне форума Ответить с цитированием
Старый 17.12.2012, 02:39   #3
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от _Sequence_ Посмотреть сообщение
Люди, помогите найти ошибку
Суть программы: "Найти сумму отрицательных элементов в массиве"
PHP код:
#include <iostream>

using namespace std;

int main()
{
    
setlocale(LC_ALL"Russian");
    
int scheta;
    
int element;
    
char reset;
    
0;
    do
    {
    
cout << "Введите количество элементов в массиве: ";
    
cin >> element;
        for (
schet 0;schet elementschet++)
    {
    
int massive[element];
    
cin >> massive[element];
    if (
massive[element] < 0)
        {
            
+= massive[element];
        }
    }
    
cout << "Сумма отрицательных элементов: " << << endl;
    
cout << "Хотите попробовать еще, нажмите +" << endl;
    
cin >> reset;
    }
    while (
reset == '+');
    return 
0;

При введении кол-ва эл-тов в массиве "4"; первое значение "-7", 3-е значение массива "-2", программа выдает не то, что нужно.

Заранее благодарен(=
1) Вы пишете int massive[element]; в цикле, то есть обьявляете каждный раз массив по новому, наверное ошибка кроеться в этому. Сделайте так:
Код:
#include <iostream>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    int schet, a;
    int element;
    char reset;
    a = 0;
    do
    {
    cout << "Введите количество элементов в массиве: ";
    cin >> element;

    int massive[element];

        for (schet = 0;schet < element; schet++)
    {
    cin >> massive[element];
    if (massive[element] < 0)
        {
            a += massive[element];
        }
    }
    cout << "Сумма отрицательных элементов: " << a << endl;
    cout << "Хотите попробовать еще, нажмите +" << endl;
    cin >> reset;
    }
    while (reset == '+');
    return 0;
}
И ещё, для этой задачи не оезательно записывать в массив, можна просто считывать число и сумировать, никуда не записывая его
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 17.12.2012, 02:41   #4
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от crymchanin Посмотреть сообщение
Код:
int massive[element];
используйте динамическое выделение памяти.
Это типа так модно? Зачем? Тем более он(а) ещё только учиться и может этого не знать.

Не парьте парню (или девушке).
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 17.12.2012, 03:12   #5
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Это типа так модно? Зачем?
Затем, что это неправильный с++ код, несмотря на то, что некоторые компиляторы позволяют так делать.

_Sequence_, вы создаете массив с element элементами. Нумерация элементов такого массива - от 0 до element-1, Вы же обращаетесь к элементу с индексом element. В зависимости от реализации, Вы можете получить от некого мусорного значения до ошибки выполнения.
У Вас есть цикл по переменной schet, её и используйте для индексирования. И, как уже сказал pufystyj, вынесите объявление массива из цикла.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.12.2012, 04:18   #6
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Затем, что это неправильный с++ код, несмотря на то, что некоторые компиляторы позволяют так делать.

_Sequence_, вы создаете массив с element элементами. Нумерация элементов такого массива - от 0 до element-1, Вы же обращаетесь к элементу с индексом element. В зависимости от реализации, Вы можете получить от некого мусорного значения до ошибки выполнения.
У Вас есть цикл по переменной schet, её и используйте для индексирования. И, как уже сказал pufystyj, вынесите объявление массива из цикла.
Ах да, не заметил. Но все же, чем здесь динамическое выделение памяти спасет? Статические переменные отменили?
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 17.12.2012, 04:25   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Сообщение от pufystyj
Но все же, чем здесь динамическое выделение памяти спасет? Статические переменные отменили?
Конкретно в данной задаче массив, в принципе, не нужен, но если его использовать, то количество его элементов на момент компиляции неизвестно, поэтому массив будет динамическим.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.12.2012, 05:43   #8
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Конкретно в данной задаче массив, в принципе, не нужен, но если его использовать, то количество его элементов на момент компиляции неизвестно, поэтому массив будет динамическим.
Ну в принципе да, но я о записи, зачем писать явно, если это не важно.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 17.12.2012, 11:11   #9
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Сообщение от pufystyj
Ну в принципе да, но я о записи, зачем писать явно, если это не важно.
Еще раз, некоторые компиляторы позволяют так писать, но по стандарту это неправильный код, многими другими компиляторами он не скомпилируется. Если человек будет так писать, то со временем привыкнет, а это плохо.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.12.2012, 11:51   #10
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Прямо холивар) А пример так никто и не написал (я в том числе)
Динамическое выделение памяти:

C++
Код:
int* massive = new int[element];
C
Код:
int* massive = (int*)malloc(element);
Ну и не забываем освобождать память после:

C++
Код:
delete[] massive;
C
Код:
free(massive);
crymchanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка "Expecting a valid name" для оператора "<" в JScript Ратибор Редоран JavaScript, Ajax 0 15.12.2011 14:38
Ошибка:является "поле" но используется как "метод" hitman47IT Помощь студентам 0 22.11.2011 20:55
"Синтаксическая ошибка " или " в чём разница?" vedro-compota PHP 7 07.08.2010 16:45
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06