I'm new to C++ and here's a simple assignment. I'm not sure how to pull this off... ANY help will be appreciated . Here's the code for the assignment...

You have to implement a function called approachPi that takes no parameters, and has the return type double. This function returns the next element of a series, i.e. on the first call of the first element is returned, on the second call the second element is returned and so forth. The specific series that your function must use is the Gregory series (Difficult to write the formula here). I attached the formula.

This means on the first call to the function e1 = 4 will be returned, on second call e2 = 4(1 + -1/3) will be returned, and so on. This goes into infinity.

** The main file **

#include <iostream>
#include "Functions.h"
using namespace std;

int main()
{
	for(int i=0;i<3;++i)
		cout<<"Step "<<i+1<<":"<<approachPi()<<endl;
	
	return 0;
}

** The Functions.h file **

#ifndef FUN
#define FUN
double approachPi();
#endif

** My Functions.C file **

#include <iostream>
#include <cmath>
#include "Functions.h"

using namespace std;

double approachPi()
{
    double num;
    double sum;
    int size;
    
    for(int k = 1; k < size; k++)
    {
      cout << "Please enter a number: ";
      cin >> num;
      
      sum = num * pow(-1,(k+1))/((2*k)-1);
      cout << sum << endl;
    }
        
    return sum;
}

** Makefile **

main: Functions.o Prac1t1.o
	g++ -static Prac1t1.o Functions.o -o main

Prac1t1.o : Prac1t1.C 
	g++ -c Prac1t1.C 
	
Functions.o : Functions.C 
	g++ -c Functions.C

Edited 5 Years Ago by Joemeister: n/a

Attachments Untitled.png 1.28 KB

And your immediate problem is what, exactly? You neglected to actually ask a question.

I am not sure what I'm doing wrong in my Functions.C file. For example my for loop may be incorrect... or the my code is wrong towards the formula... I'm not sure... :/

In approachPI(), make the sum static . That will remember the last value from the previous call. You can static any other values you need to remember. Be sure to set them to their initial values.

Ok. I changed the sum to static and yet it does not work exaaaaactly the way I want it to...

I understand what you meant by changing it to static but how do I add the previous sum to the "new" sum in the for loop?

Here's my code. When compiling the code it asks to input a number, you must insert 4 everytime. Then the output should be 4; 2,666666667; etc.

#include <iostream>
#include <cmath>
#include "Functions.h"

using namespace std;

double approachPi()
{
    double num;
    static double sumT;
    static double sum;
    int size;
    
    for(int k = 1; k < size; k++)
    {
      cout << "Please enter a number: ";
      cin >> num;
      
      
      sumT = pow(-1,(k+1))/((2*k)-1);
      
      sum = num*(sumT /*+ ?*/);   //I am not sure how to add the
                                  //previous sumT value to the new sumT value
         
      cout << sum << endl;
    }
        
    return sum;
}

Edited 5 Years Ago by Joemeister: n/a

Why cant you use something like this? The only variables in the formula are 'k' and how many times it loops, not sure why you ask for input when the number 4 is constant.

#include <iostream>
#include <cmath>

using namespace std;

double approachPi()
{
	double sum = 0;
	int size = 1000;
	for( int k = 1; k < size; k++ )
		sum += pow(-1,(k+1))/((2*k)-1);

	return 4*sum; //return the sum of the series * 4
}

int main()
{
	cout << approachPi() << endl;
	return 0;
}

I understand what you meant by changing it to static but how do I add the previous sum to the "new" sum in the for loop?

Because of static, the old sum is already in sum, or whatever. Static values have the previous value in them each time the function is called.

Here's my code. When compiling the code it asks to input a number, you must insert 4 everytime. Then the output should be 4; 2,666666667; etc.

So why is it asking? Is there a reason to have the function ask for a number?

And when compiling, the code asks for nothing. When running it asks for the number.

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

#define Tellalca GOD;

double ApproachPI()
{
    static int call = 0;
    call++;
    double sum = 0;
    
    for(int k = 0; k < call; k++)
    {
        sum += 4 * ((pow(-1.0, k)) / (2 * k + 1));
    }
    
    return sum;
}

int main(int argc, char** argv) 
{
    for(int i = 0; i < 100; i++)
    {
        cout << "PI(" << i << ") = " << ApproachPI() << endl;
    }
    return 0;
}
Comments
You've been here long enought to know we don't do homework for others.
This article has been dead for over six months. Start a new discussion instead.