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

Почему не попадают элементы в массив? - C++

Восстановить пароль Регистрация
 
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
05.02.2014, 16:52     Почему не попадают элементы в массив? #1
Доброго времени суток, форумчане!
Было поставлено задание - инициализировать массив из n элемнтов и нужно посчитать сумму элементов, расположеных по правую сторону от последнего отрицательного. Не понимаю, почему не заполняется массив...
Вот код.

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
#include <iostream>
#include <conio.h>
 
int sum(int n)
{
 
    int *a = new int[n];
    std::cout << "Enter array of numbers \n";
    int id = 0;
    while(getch()!=27)
    {
        std::cin >> a[id];
        id ++;
    }
 
    int sum = 0;
    for (int i = n - 1; i >= 0; --i)
    {
        if (a[i] < 0)
            for (int j = i + 1; j < n; ++ j)
                sum += a[j];
    }
    delete []a;
    return sum;
}
 
int main()
{
    const int n = 10;
    std::cout << sum(n);
    getch();
}
Заранее спасибо!

Добавлено через 6 минут
А еще - значения набираются только со второго раза.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 16:52     Почему не попадают элементы в массив?
Посмотрите здесь:

Дан массив. Переписать его второй, четвертый и т.д. элементы в другой массив такого же размера, расположив элементы подряд с начала массива C++
Все положительные элементы записать в массив Y(k), а все отрицательные элементы - в массив Z(m) C++
C++ Массив: Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные элементы массива В.
Ввести квадратную матрицу целых чисел*. Элементы матрицы, которые не попадают в интервал [a,b] записать в отдельный вектор (массив) C++
Одномерный массив (элементы с четными индексами переписать в массив z.в массиве z поменять местами максимальный и минимальный элементы) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
05.02.2014, 16:54     Почему не попадают элементы в массив? #2
delete
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
05.02.2014, 17:02     Почему не попадают элементы в массив? #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
#include <iostream>
#include <conio.h>
 
int sum(int n)
{
 
    int *a = new int[n];
    std::cout << "Enter array of numbers \n";
    int id = 0;
    while((std::cin >> a[id]) && (++id < n))
        ;
    int sum = 0;
    for (int i = id - 1; i >= 0; --i)
    {
        if (a[i] < 0)
            for (int j = i + 1; j < id; ++ j)
                sum += a[j];
    }
    return sum;
}
 
int main()
{
    const int n = 10;
    std::cout << sum(n);
    getch();
}
Или лучше так, чтоб освобождать память, выделенную под массив:
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
#include <iostream>
#include <conio.h>
 
int sum(int * a, int n)
{
    std::cout << "Enter array of numbers \n";
    int id = 0;
    while((std::cin >> a[id]) && (++id < n))
        ;
    int sum = 0;
    for (int i = id - 1; i >= 0; --i)
    {
        if (a[i] < 0)
            for (int j = i + 1; j < id; ++ j)
                sum += a[j];
    }
    return sum;
}
 
int main()
{
    const int n = 10;
    int * arr = new int[n]; 
    std::cout << sum(arr, n);
    delete [] arr;
    getch();
}
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
05.02.2014, 17:08     Почему не попадают элементы в массив? #4
Цитата Сообщение от Тамика Посмотреть сообщение
А еще - значения набираются только со второго раза.
Первый символ хавает getch(). Поэтому нужно возвращать символ обратно в поток.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
05.02.2014, 17:08  [ТС]     Почему не попадают элементы в массив? #5
Я в функции высвобождаю... А Вы перенесли в мейн инициализацию массива - это чем лучше? Или нет разницы?
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
05.02.2014, 17:18     Почему не попадают элементы в массив? #6
Цитата Сообщение от Тамика Посмотреть сообщение
Я в функции высвобождаю... А Вы перенесли в мейн инициализацию массива - это чем лучше? Или нет разницы?
Это я затупил, да, ваш вариант предпочтительнее, если не нужно использовать массив в функции main.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
05.02.2014, 17:29     Почему не попадают элементы в массив? #7
Цитата Сообщение от Тамика Посмотреть сообщение
C++
1
2
3
4
5
6
for (int i = n - 1; i >= 0; --i)
    {
     if (a[i] < 0)
 for (int j = i + 1; j < n; ++ j)
      sum += a[j];
   }
теперь представь
вот такой массив
-7 1 2 3 -5 4 5 -9 3
как он обработается?
нашли последний отрицательный дальше крутить не надо
примерно так
C++
1
2
3
4
5
6
7
8
9
10
int sum=0;
int i;
for(i=n-1;i>=0;i--) // ищем последний отрицательный
    if(a[i]<0)
       break;
if(i==-1)  // нет отрицательных
   return -1;  // выдаем ошибку
for(i+=1;i<n;i++) // считаем сумму
    sum+=a[i];
return sum;
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
05.02.2014, 17:35  [ТС]     Почему не попадают элементы в массив? #8
Цитата Сообщение от ValeryS Посмотреть сообщение
теперь представь
вот такой массив
-7 1 2 3 -5 4 5 -9 3
как он обработается?
нашли последний отрицательный дальше крутить не надо
Не поняла о чём Вы. У меня, вроде как, так и реализовано. Мотает до первого с конца отрицательного элемента, дабы все не перебирать.

Добавлено через 2 минуты
А, брейка там нет, да. Я его потом уже в своем коде доставила и смотрю - не понимаю в чем разница. Теперь ясно, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 17:41     Почему не попадают элементы в массив?
Еще ссылки по теме:

C++ Из массива Х(N) все положительные элементы записать в массив У(К), а все отрицательные элементы – в массив Z(М)...
C++ Переписать в массив Y положительные элементы а в массив Z отрицательные элементы массива Х N<=40
Дан одномерный массив, найти все отрицательные элементы; элементы, большие данного числа n C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
05.02.2014, 17:41     Почему не попадают элементы в массив? #9
Цитата Сообщение от Тамика Посмотреть сообщение
Мотает до первого с конца отрицательного элемента, дабы все не перебирать.
а дальше?
нашелся первый с конца(последний) элемент
посчиталась сумма, циклом j
вышли из цикла j
и дальше продолжает крутить цикл i
ищет следующий отрицательный элемент
и если найдет то опять запускает цикл j сумма портится

Добавлено через 3 минуты
Цитата Сообщение от Тамика Посмотреть сообщение
А, брейка там нет, да.
ага нет его
Yandex
Объявления
05.02.2014, 17:41     Почему не попадают элементы в массив?
Ответ Создать тему
Опции темы

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