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

Элементы после 0 - C++

Восстановить пароль Регистрация
 
Demon__2012
 Аватар для Demon__2012
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 74
19.10.2013, 02:21     Элементы после 0 #1
Нужна программма которая посчитает все элементы массива после ПЕРВОГО 0.
Например есть массив: (1,2,3,4,0,5,6,7,8), то оно должно посчитать 5+6+7+8. А результатом выполнения должно быть 26.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.10.2013, 02:32     Элементы после 0 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
  {
  int a[] = { 1,2,3,4,0,5,6,7,8 };
  bool valid(false);
  long long sum(0);
  for (auto i = std::begin(a); i != std::end(a); ++i)
    if (!(*i))
      {
      valid = true;
      for (auto j = ++i; j != std::end(a); ++j)
        sum += *j;
      break;
      }
  if (valid)
    std::cout << "Sum = " << sum << std::endl;
  else
    std::cout << "No 0 elements found" << std::endl;
  std::cin.get();
  return 0;
  }
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
19.10.2013, 02:35     Элементы после 0 #3
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <numeric>
#include <algorithm>
 
int main ( ) {
    int arr [] = {1,2,3,4,0,5,6,7,8} ;
    const int size = sizeof(arr)/sizeof(*arr) ; 
    std :: cout << std :: accumulate ( std :: find ( arr , arr + size , 0 ) , arr + size , 0 ) << std :: endl ;
}
http://ideone.com/xr5Ohy
Demon__2012
 Аватар для Demon__2012
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 74
19.10.2013, 03:24  [ТС]     Элементы после 0 #4
Цитата Сообщение от Nekto Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
  {
  int a[] = { 1,2,3,4,0,5,6,7,8 };
  bool valid(false);
  long long sum(0);
  for (auto i = std::begin(a); i != std::end(a); ++i)
    if (!(*i))
      {
      valid = true;
      for (auto j = ++i; j != std::end(a); ++j)
        sum += *j;
      break;
      }
  if (valid)
    std::cout << "Sum = " << sum << std::endl;
  else
    std::cout << "No 0 elements found" << std::endl;
  std::cin.get();
  return 0;
  }
[C++ Error] Unit1.cpp(11): E2268 Call to undefined function 'begin'
[C++ Error] Unit1.cpp(11): E2268 Call to undefined function 'end'
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
19.10.2013, 03:34     Элементы после 0 #5
Demon__2012, ваш компилятор не поддерживает С++11, можете обновить его, либо, осознав код, переписать под старый стандарт
Demon__2012
 Аватар для Demon__2012
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 74
19.10.2013, 15:37  [ТС]     Элементы после 0 #6
Цитата Сообщение от MrGluck Посмотреть сообщение
Demon__2012, ваш компилятор не поддерживает С++11, можете обновить его, либо, осознав код, переписать под старый стандарт
Я бы с удовольствием пользовался например Visual Sdudio 2012 но там где я учусь говорят использовать "убогий" C++ Builder6.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
19.10.2013, 15:42     Элементы после 0 #7
Вот Вам без всяких всячин:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int foo ( int * arr , int size ) {
    int * arrEnd = arr + size ;
    int summ = 0 ;
    for ( ; arr != arrEnd && *arr != 0 ; ++ arr ) {
    }
    for ( ; arr != arrEnd; ++ arr ) {
        summ += *arr ;
    }
    return summ ;
}
 
int main () {
    int arr[] = { 1,2,3,4,0,5,6,7,8 };
    std :: cout << foo ( arr , sizeof ( arr ) / sizeof ( *arr ) ) ;
}
Demon__2012
 Аватар для Demon__2012
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 74
19.10.2013, 16:08  [ТС]     Элементы после 0 #8
Цитата Сообщение от Croessmah Посмотреть сообщение
Вот Вам без всяких всячин:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int foo ( int * arr , int size ) {
    int * arrEnd = arr + size ;
    int summ = 0 ;
    for ( ; arr != arrEnd && *arr != 0 ; ++ arr ) {
    }
    for ( ; arr != arrEnd; ++ arr ) {
        summ += *arr ;
    }
    return summ ;
}
 
int main () {
    int arr[] = { 1,2,3,4,0,5,6,7,8 };
    std :: cout << foo ( arr , sizeof ( arr ) / sizeof ( *arr ) ) ;
}
А можно с комментариями
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 16:30     Элементы после 0
Еще ссылки по теме:

В массиве С из 25 целых элементов вывести на экран те элементы, которые расположены после максимального C++
C++ Посчитать все элементы в массиве после последнего отрицательного
C++ Отсортировать по убыванию элементы матрицы, расположенные после второго отрицательного числа

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
19.10.2013, 16:30     Элементы после 0 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int foo ( int * arr , int size ) {
    int * arrEnd = arr + size ; //Определяем указатель на элемент, который находится за последним элементом в массиве
    int summ = 0 ; 
    for ( ; arr != arrEnd && *arr != 0 ; ++ arr ) { //Идем либо пока не выйдем за пределы массива (arr != arrEnd), либо пока не встретим 0 (*arr != 0 )
    }
    //Тут у нас arr "указывает" либо на элемент со значением ноль, либо на элемент за пределами массива (arr == arrEnd)
    for ( ; arr != arrEnd; ++ arr ) { //Считаем сумму, пока не выйдем за пределы массива. Если уже вышли (arr == arrEnd), значит не будет ни одной итеррации
        summ += *arr ;
    }
    return summ ;
}
 
int main () {
    int arr[] = { 1,2,3,4,0,5,6,7,8 };
    std :: cout << foo ( arr , sizeof ( arr ) / sizeof ( *arr ) ) ;
}
Yandex
Объявления
19.10.2013, 16:30     Элементы после 0
Ответ Создать тему
Опции темы

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