patterncppMinor
Count number of even and odd numbers from input
Viewed 0 times
countnumbernumbersinputandevenfromodd
Problem
I had to write a program that accepted five numbers from the user. Then it will display the number of odd and even numbers, and a total sum of all numbers.
#include
using namespace std;
int main()
{
int a;
int b;
int c;
int d;
int e;
int sum;
int remainder;
int bremainder;
int cremainder;
int dremainder;
int eremainder;
int even;
int odd;
int total = 0;
int Ototal = 0;
cout > a;
cin >> b;
cin >> c;
cin >> d;
cin >> e;
remainder = a % 2;
bremainder = b % 2;
cremainder = c % 2;
dremainder = d % 2;
eremainder = e % 2;
sum = (a + b + c + d + e);
if (remainder = 0)
{
total+=remainder;
}
else {
Ototal += remainder;
}
if (bremainder = 0)
{
total += bremainder;
}
else {
Ototal += bremainder;
}
if (cremainder = 0)
{
total += cremainder;
}
else {
Ototal += cremainder;
}
if (dremainder = 0)
{
total += dremainder;
}
else {
Ototal += dremainder;
}
if (eremainder = 0)
{
total += eremainder;
}
else {
Ototal += eremainder;
}
cout << total << "\n";
cout << Ototal << "\n";
cout << sum << "\n";
system("PAUSE");
return 0;
}Solution
- Do not use
system("pause"). Read
this
- Stop using
using namespace std. Read
this
- You have an unneccessary amount of variables. You don't need to have
a variable to hold the remainder for each number.
- Just have a function that determines whether the input number is odd
or even. I think you might have to rethink the logic of your
program.
//Your function should do the following:
//MAX is a const int. In your case it is 5
for(int i=0; i<MAX; i++){
if(numbers[i] % 2 == 0)
evenNumbers++;
else
oddNumbers++;
sum += numbers[i];
}Here is how I would have done it:
#include
#include
#include
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main(){
int value = 0;
int oddNumbers(0), evenNumbers(0), sum(0);
std::istream_iterator begin(cin);
std::istream_iterator end;
//while(cin >> value)
// numbers.push_back(value);
//Instead of a while loop, I use input stream iterators.
vector numbers;
std::back_insert_iterator> iter (numbers);
std::copy(begin,end,iter);
//Range based for-loop (C++11)
for(auto i : numbers){
if(i % 2 == 0){
evenNumbers++;
}else {
oddNumbers++;
}
sum += i;
}
cout << "# of odd numbers: " << oddNumbers << "\n";
cout << "# of even numbers: " << evenNumbers << "\n";
cout << "Sum of all numbers: " << sum << endl;
}Code Snippets
//Your function should do the following:
//MAX is a const int. In your case it is 5
for(int i=0; i<MAX; i++){
if(numbers[i] % 2 == 0)
evenNumbers++;
else
oddNumbers++;
sum += numbers[i];
}#include <iostream>
#include <vector>
#include <iterator>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main(){
int value = 0;
int oddNumbers(0), evenNumbers(0), sum(0);
std::istream_iterator<int> begin(cin);
std::istream_iterator<int> end;
//while(cin >> value)
// numbers.push_back(value);
//Instead of a while loop, I use input stream iterators.
vector<int> numbers;
std::back_insert_iterator<std::vector<int>> iter (numbers);
std::copy(begin,end,iter);
//Range based for-loop (C++11)
for(auto i : numbers){
if(i % 2 == 0){
evenNumbers++;
}else {
oddNumbers++;
}
sum += i;
}
cout << "# of odd numbers: " << oddNumbers << "\n";
cout << "# of even numbers: " << evenNumbers << "\n";
cout << "Sum of all numbers: " << sum << endl;
}Context
StackExchange Code Review Q#66465, answer score: 5
Revisions (0)
No revisions yet.