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

Вывод суммы четных элементов массива - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
Ressyx
0 / 0 / 0
Регистрация: 17.07.2012
Сообщений: 38
23.07.2012, 13:52     Вывод суммы четных элементов массива #1
Напишите программу, печатающую на экране сумму четных элементов заданного массива вещественных чисел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 13:52     Вывод суммы четных элементов массива
Посмотрите здесь:

Найти сумму четных элементов массива, стоящих на четных местах C++
Массивы: Определить частное от деления суммы положительных элементов массива на модуль суммы отрицательных элементов C++
Вычислить сумму S = P1 + P2 произведения P1 четных элементов массива xi и произведения P2 четных элементов массива yi , i = 1, 2, 3 C++
Рекурсия (вычисление суммы, вывод элементов одномерного массива в обратном порядке) C++
Найти сумму четных элементов массива cтоящих в четных местах(Ошибка компиляции error C2065: необъявленный идентификатор) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
23.07.2012, 14:19     Вывод суммы четных элементов массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string>
#define razmer 7
using namespace std;
 
 
 
int main () {
 float array [razmer]= {3.9, 4.5, 2.3, 8.56, 1.23, 45.6, 4.78};
 
 float summa= 0;
 
 for (int i= 0; i< razmer; i++) 
  if (!(i%2))
   summa+= array [i];
 
 printf ("summa= %f\n", summa);
 getchar ();
 return 0;
}
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 14:26     Вывод суммы четных элементов массива #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string>
#define razmer 7
using namespace std;
 
int main () {
 float array [razmer]= {3.9, 4.5, 2.3, 8.56, 1.23, 45.6, 4.78};
 
 float summa= 0;
 
 for (int i= 0; i< razmer; i += 2) 
   summa+= array [i];
 
 printf ("summa= %f\n", summa);
 getchar ();
 return 0;
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
23.07.2012, 14:28     Вывод суммы четных элементов массива #4
Intel~lect, нулевой элемент пропустил
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 14:45     Вывод суммы четных элементов массива #5
Цитата Сообщение от kravam Посмотреть сообщение
Intel~lect, нулевой элемент пропустил
Да, спасибо. Я уже исправил
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.07.2012, 14:55     Вывод суммы четных элементов массива #6
Вот небольшой вариант с использованием STL, если надо будет:
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <Windows.h>
using namespace std;
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    cout<<"Введите требуемое количество елементов в массиве: ";
    size_t size(0);
    cin>>size;
    vector<int> arr;
    generate_n(back_inserter(arr), size, []{ return std::rand() % 100; });
    cout<<"Все данные в массиве:\n";
    for (int n: arr)
        cout<<n<<" ";
    size_t sum(0);
    for (size_t i = 0; i<arr.size(); i+=2) 
        sum+=arr[i];
    cout<<"\n\nСумма всех четных елементов массива: "<<sum;
    cout<<endl;
    system("pause");
    return 0;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
23.07.2012, 15:00     Вывод суммы четных элементов массива #7
а почему сумма беззнаковая?
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 15:34     Вывод суммы четных элементов массива #8
Удалил
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.07.2012, 15:37     Вывод суммы четных элементов массива #9
Цитата Сообщение от neske Посмотреть сообщение
а почему сумма беззнаковая?
Немного подправил код для генерации отрицательных
чисел:
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 <iterator>
#include <vector>
#include <algorithm>
#include <ctime>
#include <Windows.h>
using namespace std;
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    srand(time(0));
    cout<<"Введите требуемое количество елементов в массиве: ";
    size_t size(0);
    cin>>size;
    vector<int> arr;
    std::generate_n(back_inserter(arr), size, []{ return -100 + std::rand() % 201; });
    cout<<"Все данные в массиве:\n";
    for (int n: arr)
        cout<<n<<" ";
    int sum(0);
    for (size_t i = 0; i<arr.size(); i+=2) 
        sum+=arr[i];
    cout<<"\n\nСумма всех четных елементов массива: "<<sum;
    cout<<endl;
    system("pause");
    return 0;
}
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 15:46     Вывод суммы четных элементов массива #10
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
#include <iostream>
#include <numeric>
//-------------------------------------------------------
template<class T> 
struct F
{
T operator()(T a,T b) 
  { 
   if(b%2) return a;
   else    return a+b; 
  }
};  
//-------------------------------------------------------
int main(int argc, char **argv)
{   
const size_t size=10;   
int a[]= {1,2,3,4,5,6,7,8,9,0};
 
int sum= std::accumulate(&a[0],&a[size],0,F<int>());
 
std::cout<<sum<<std::endl;
return 0;
}
//-------------------------------------------------------
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2012, 15:55     Вывод суммы четных элементов массива #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
#include <iostream>
#include <numeric>
 
int main()
{
   std::vector<double> vec = {1.2,3.5,4.0, 5.0, .0, 6.0};
   std::cout << "Sum is: " << std::accumulate(vec.begin(), vec.end(), .0,
   [](const double sum, const double current)
   {
      return (static_cast<int>(current) % 2) ? sum + current : sum;
   }) << std::endl;
}
http://liveworkspace.org/code/13b715...6a03ef2ad4bb42
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 16:09     Вывод суммы четных элементов массива #12
Если имелось ввиду четные номера массивов

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
#include <iostream>
#include <numeric>
//-------------------------------------------------------
template<class T> 
struct F
{
 F():parity(true){};    
    
 T operator()(T a,T b)
   {  
     if(parity){ parity = !parity; return a+b;}
     else      { parity = !parity; return a; }  
   }
  
private:
   bool parity;
};  
//-------------------------------------------------------
int main(int argc, char **argv)
{   
const size_t size=10;   
int A[]= {1,2,3,4,5,6,7,8,9,0};
 
int sum= std::accumulate(&A[0],&A[size],0,F<int>());
std::cout<<sum<<std::endl;
 
return 0;
}
//-------------------------------------------------------
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2012, 18:35     Вывод суммы четных элементов массива #13
Avazart, никто не гарантирует в каком порядке будет обходиться массив алгоритмом accumulate и сколько раз функтор будет копироваться.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 18:47     Вывод суммы четных элементов массива #14
Ну про порядок да, понятно.
Но разве фунтур не живет все время обхода? Зачем ему копироваться?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2012, 18:49     Вывод суммы четных элементов массива #15
Avazart, Могут вызываться другие алгоритмы, об этом тоже ничего не сказано в стандарте. Как минимум 1 раз функтор точно копируется, ибо accumulate принимает T, а не T&.

Кстати. Я не прав. Прошу прощения.
template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);
template <class InputIterator, class T, class BinaryOperation>
T accumulate(InputIterator first, InputIterator last, T init,
BinaryOperation binary_op);
1 Effects: Computes its result by initializing the accumulator acc with the initial value init and then
modifies it with acc = acc + *i or acc = binary_op(acc, *i) for every iterator i in the range
[first,last) in order.288
2 Requires: T shall meet the requirements of CopyConstructible (Table 21) and CopyAssignable (Table
23) types. In the range [first,last], binary_op shall neither modify elements nor invalidate
iterators or subranges.289
Это из нового стандарта. В старом как было - смотреть лень.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 19:02     Вывод суммы четных элементов массива #16
Вообщето нет, порядок должен быть четко определен по логике вещей так как тогда нельзя было определять такие вещи как деление и вычитание, к примеру

Добавлено через 4 минуты
Как минимум 1 раз функтор точно копируется
Ну да хотя бы потому что я не создавал объект класса функтура.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2012, 19:05     Вывод суммы четных элементов массива #17
C++
1
F<int>()
а это что по твоему?)
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 19:14     Вывод суммы четных элементов массива #18
А разве это одно и тоже с
C++
1
2
F<int> fobj; 
int sum= std::accumulate(&A[0],&A[size],0,fobj );
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2012, 19:17     Вывод суммы четных элементов массива #19
Avazart, Без оптимизаций - конечно да. Например студия, при примерно таком коде, если вставить в copy конструктор вывод - получим что один раз объект создается и копируется (в первом случае мы используем временный объект, который создается и затем копируется, если включены оптимизации - конструктор копии вызван не будет, во втором случае мы создаем объект, который затем так же копируется).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 19:51     Вывод суммы четных элементов массива
Еще ссылки по теме:

C++ Найти суммы четных элементов (элементов с четным номером) массива вещественных чисел A(22) и нечетных элементов
C++ Вывод элементов массива, стоящих на четных позициях, а затем – на нечетных
Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
23.07.2012, 19:51     Вывод суммы четных элементов массива #20
Что-то не понимаю состояние объекта после выполнения алгоритма не сохраняется?
Добавлено через 10 минут
В g++
C++
1
int sum= std::accumulate(&A[0],&A[size],0,fobj );
Вызывает копирующий конструктор - деструктор
C++
1
int sum= std::accumulate(&A[0],&A[size],0,F<int>() );
Вызывает конструктор- деструктор
Yandex
Объявления
23.07.2012, 19:51     Вывод суммы четных элементов массива
Ответ Создать тему
Опции темы

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