Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 17.07.2012
Сообщений: 38
1

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

23.07.2012, 13:52. Показов 4453. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите программу, печатающую на экране сумму четных элементов заданного массива вещественных чисел.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2012, 13:52
Ответы с готовыми решениями:

Найти суммы четных элементов (элементов с четным номером) массива вещественных чисел A(22) и нечетных элементов
Здравствуйте, дорогие форумчане. Не могли бы вы мне помочь? Мне нужно составить программу с таким...

Составить программу вычисления и печати суммы отрицательных элементов среди четных элементов массива
#include <math.h> #include <stdio.h> #include<malloc.h> void pech_m(float *, int, int); void...

Подсчет количества, суммы и произведения четных положительных элементов массива
помогите пожалуйста! разработка программы для подсчета количества, суммы и произведения четных...

Найти произведение и сумму четных элементов массива, разность произведения и суммы
Ввести массив А(N). Найти произведение и сумму четных элементов массива, разность произведения и...

27
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
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;
}
0
137 / 126 / 14
Регистрация: 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;
}
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
23.07.2012, 14:28 4
Intel~lect, нулевой элемент пропустил
1
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 14:45 5
Цитата Сообщение от kravam Посмотреть сообщение
Intel~lect, нулевой элемент пропустил
Да, спасибо. Я уже исправил
0
1458 / 795 / 257
Регистрация: 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;
}
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
23.07.2012, 15:00 7
а почему сумма беззнаковая?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 15:34 8
Удалил
0
1458 / 795 / 257
Регистрация: 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;
}
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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;
}
//-------------------------------------------------------
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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/... ef2ad4bb42
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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;
}
//-------------------------------------------------------
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.07.2012, 18:35 13
Avazart, никто не гарантирует в каком порядке будет обходиться массив алгоритмом accumulate и сколько раз функтор будет копироваться.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 18:47 14
Ну про порядок да, понятно.
Но разве фунтур не живет все время обхода? Зачем ему копироваться?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Это из нового стандарта. В старом как было - смотреть лень.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 19:02 16
Вообщето нет, порядок должен быть четко определен по логике вещей так как тогда нельзя было определять такие вещи как деление и вычитание, к примеру

Добавлено через 4 минуты
Как минимум 1 раз функтор точно копируется
Ну да хотя бы потому что я не создавал объект класса функтура.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.07.2012, 19:05 17
C++
1
F<int>()
а это что по твоему?)
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 19:14 18
А разве это одно и тоже с
C++
1
2
F<int> fobj; 
int sum= std::accumulate(&A[0],&A[size],0,fobj );
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.07.2012, 19:17 19
Avazart, Без оптимизаций - конечно да. Например студия, при примерно таком коде, если вставить в copy конструктор вывод - получим что один раз объект создается и копируется (в первом случае мы используем временный объект, который создается и затем копируется, если включены оптимизации - конструктор копии вызван не будет, во втором случае мы создаем объект, который затем так же копируется).
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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>() );
Вызывает конструктор- деструктор
0
23.07.2012, 19:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2012, 19:51
Помогаю со студенческими работами здесь

Вывод элементов массива, стоящих на четных позициях, а затем – на нечетных
добрый времени суток помогите решить задачку: разработайте программу, в которой реализован ввод...

Суммирование элементов массива и правильный вывод суммы на экран
Программа определяет, сколько экспертов сказали, что товар i лучше товара j. По всем товарам. Такая...

Рекурсия (вычисление суммы, вывод элементов одномерного массива в обратном порядке)
Я хочу реализовать рекурсивные функции:1)вычисления суммы k первых членов арифметической...

Вывод на экран подсчета суммы элементов массива между первым и вторым отрицательными элементами
На С++ написана программа подсчета суммы элементов массива между первым и вторым отрицательными...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru