Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Тамика
Котовчанин
918 / 462 / 145
Регистрация: 16.02.2010
Сообщений: 3,259
Записей в блоге: 27
#1

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

05.02.2014, 16:52. Просмотров 253. Ответов 8
Метки нет (Все метки)

Доброго времени суток, форумчане!
Было поставлено задание - инициализировать массив из 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 минут
А еще - значения набираются только со второго раза.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 16:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не попадают элементы в массив? (C++):

Ввести квадратную матрицу целых чисел*. Элементы матрицы, которые не попадают в интервал [a,b] записать в отдельный вектор (массив) - C++
Парни, помогите пожалуйста сложить программку вот с таким условием: Ввести квадратную матрицу целых чисел*. Элементы матрицы, которые...

Одномерный массив (элементы с четными индексами переписать в массив z.в массиве z поменять местами максимальный и минимальный элементы) - C++
задан массив x(n).элементы с четными индексами переписать в массив z.в массиве z поменять местами максимальный и минимальный...

Дан массив. Переписать его второй, четвертый и т.д. элементы в другой массив такого же размера, расположив элементы подряд с начала массива - C++
Помогите пожалуйста решить задачи на C++! Я в нем вообще туго соображаю. 1. Дан массив. Переписать его второй, четвертый и т.д....

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Переписать в массив Y положительные элементы а в массив Z отрицательные элементы массива Х N<=40 - C++
Помогите уважаемые программисты Нужно написать программу &quot;X(N) Переписать в массив Y положительные элементы а в массив Z отрицательные...

Скопировать чётные элементы из массива X в массив Y, а нечётные элементы в массив Z - C++
Ребята помогите пожалуиста скопировать четные елементы из масива X в масив Y и нечетные елементы в масив Z. Я использою Дев С++. ...

8
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
05.02.2014, 16:54 #2
delete
0
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();
}
1
Ilot
Модератор
Эксперт С++
1825 / 1183 / 232
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
05.02.2014, 17:08 #4
Цитата Сообщение от Тамика Посмотреть сообщение
А еще - значения набираются только со второго раза.
Первый символ хавает getch(). Поэтому нужно возвращать символ обратно в поток.
1
Тамика
Котовчанин
918 / 462 / 145
Регистрация: 16.02.2010
Сообщений: 3,259
Записей в блоге: 27
05.02.2014, 17:08  [ТС] #5
Я в функции высвобождаю... А Вы перенесли в мейн инициализацию массива - это чем лучше? Или нет разницы?
0
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
05.02.2014, 17:18 #6
Цитата Сообщение от Тамика Посмотреть сообщение
Я в функции высвобождаю... А Вы перенесли в мейн инициализацию массива - это чем лучше? Или нет разницы?
Это я затупил, да, ваш вариант предпочтительнее, если не нужно использовать массив в функции main.
0
ValeryS
Модератор
6786 / 5194 / 497
Регистрация: 14.02.2011
Сообщений: 17,432
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;
1
Тамика
Котовчанин
918 / 462 / 145
Регистрация: 16.02.2010
Сообщений: 3,259
Записей в блоге: 27
05.02.2014, 17:35  [ТС] #8
Цитата Сообщение от ValeryS Посмотреть сообщение
теперь представь
вот такой массив
-7 1 2 3 -5 4 5 -9 3
как он обработается?
нашли последний отрицательный дальше крутить не надо
Не поняла о чём Вы. У меня, вроде как, так и реализовано. Мотает до первого с конца отрицательного элемента, дабы все не перебирать.

Добавлено через 2 минуты
А, брейка там нет, да. Я его потом уже в своем коде доставила и смотрю - не понимаю в чем разница. Теперь ясно, спасибо.
0
ValeryS
Модератор
6786 / 5194 / 497
Регистрация: 14.02.2011
Сообщений: 17,432
05.02.2014, 17:41 #9
Цитата Сообщение от Тамика Посмотреть сообщение
Мотает до первого с конца отрицательного элемента, дабы все не перебирать.
а дальше?
нашелся первый с конца(последний) элемент
посчиталась сумма, циклом j
вышли из цикла j
и дальше продолжает крутить цикл i
ищет следующий отрицательный элемент
и если найдет то опять запускает цикл j сумма портится

Добавлено через 3 минуты
Цитата Сообщение от Тамика Посмотреть сообщение
А, брейка там нет, да.
ага нет его
0
05.02.2014, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 17:41
Привет! Вот еще темы с ответами:

Из массива Х(N) все положительные элементы записать в массив У(К), а все отрицательные элементы – в массив Z(М)... - C++
Пожалуйста помогите решить задачку на си++, заранее спасибо Из массива Х(N) все положительные элементы записать в массив У(К), а все...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные элементы массива В. - C++
Даны массивы целых чисел A и B. Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные...

Все положительные элементы записать в массив Y(k), а все отрицательные элементы - в массив Z(m) - C++
Из массива X(N) все положительные элементы записать в массив Y(k), а все отрицательные элементы - в массив Z(m). Найти в каждом массиве...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru