Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) purpose of using functions

 

Possible purposes of using functions are (incomplete list):

 

Below is an example that asks the user for two values and calculates whether these and the sum of these values are prime. The first piece of code does not use functions, the second does. In comment is shown which of the four purposes are served.

 

 

 

 

 

Example without functions

 

#include <cmath>
#include <iostream>

//code has twice as many lines!
//Less clear what main() does
int main()
{
  int value1 = -1; //value1 cannot be const
  //value1 must be at main() scope to be summed (scope bloat)
  int value2 = -1; //value2 cannot be const
  //value2 must be at a main() scope to be summed (scope bloat)
  {
    //This code is copied three times and modified
    //Unclear what the code fragment does
    std::cin >> value1;
    bool isPrime = true; //Extra variable needed
    const int max  = static_cast<int>(std::sqrt(static_cast<double>(value1))) + 1;

    for(int i=2; i!=max; ++i)
    {
      if (value1 % i == 0) { isPrime = false; break; }
    }

    std::cout << "Value1 is " << (isPrime ? "" : "not ") << "prime\n";
  }

  {
    //This code is copied three times and modified
    //Unclear what the code fragment does
    std::cin >> value2;
    bool isPrime = true; //Extra variable needed
    const int max  = static_cast<int>(std::sqrt(static_cast<double>(value2))) + 1;
  
    for(int i=2; i!=max; ++i)
    {
      if (value2 % i == 0) { isPrime = false; break; }
    }

    std::cout << "Value2 is " << (isPrime ? "" : "not ") << "prime";
  }

  {
    //This code is copied three times and modified
    //Unclear what the code fragment does
    const int valueSum = value1 + value2;
    bool isPrime = true; //Extra variable needed
    const int max = static_cast<int>(std::sqrt(static_cast<double>(valueSum))) + 1;

    for(int i=2; i!=max; ++i)
    {
      if(valueSum % i == 0) { isPrime = false; break; }
    }

    std::cout << "Value1 + value2 is " << (isPrime ? "" : "not ") << "prime\n";
  }
}

 

 

 

 

 

Example with functions

 

#include <cmath>
#include <iostream>

//From http://www.richelbilderbeek.nl/CppIsPrime.htm
//Clear what the code fragment does
bool IsPrime(const int x)
{
  const int max = static_cast<int>(std::sqrt(static_cast<double>(x))) + 1;
  for(int i=2; i!=max; ++i)
  {
    if(x % i == 0) return false;
  }
  return true;
}

//Clear what the code fragment does
int AskUserInput()
{
  int x; //Temporary variable 'x' as local as possible
  std::cin >> x;
  return x;
}

//code has twice as few lines!
//Clear(er) what main() does
int main()
{
  const int value1 = AskUserInput(); //value1 is const
  const int value2 = AskUserInput(); //value2 is const
  std::cout << "Value1 is " << (IsPrime(value1) ? "" : "not ") << "prime\n";
  std::cout << "Value2 is " << (IsPrime(value2) ? "" : "not ") << "prime\n";
  std::cout << "Value1 + value2 is " << (IsPrime(value1 + value2) ? "" : "not ") << "prime\n";
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict