Help with c++ program for series

  • Context: C/C++ 
  • Thread starter Thread starter Isma
  • Start date Start date
  • Tags Tags
    C++ Program Series
Click For Summary

Discussion Overview

The discussion revolves around programming in C++, specifically focusing on creating a program to calculate the value of pi using a series expansion. Participants are attempting to troubleshoot and refine their code, addressing issues related to summation, typecasting, and loop structure.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Homework-related
  • Mathematical reasoning

Main Points Raised

  • One participant presents an initial C++ code snippet intended to compute pi using a series but reports it returns 0.
  • Another participant suggests that the summation variables y and x should be initialized to zero and updated correctly to accumulate the series terms.
  • There are discussions about typecasting issues, particularly how integer division can lead to incorrect results when calculating terms in the series.
  • A more efficient version of the program is proposed, utilizing a single loop to handle both positive and negative terms of the series, along with proper type promotion for calculations.
  • Clarifications are provided regarding the use of the modulus operator and shorthand conditional statements in C++.
  • Additional queries arise about a separate program intended to generate a specific series of integers, leading to further discussions about loop structures and desired outputs.
  • A participant expresses urgency for assistance with a two-dimensional array program to store height and weight data, seeking a correct implementation.

Areas of Agreement / Disagreement

Participants generally agree on the need for proper initialization and typecasting in the C++ code, but multiple approaches and solutions are proposed without a consensus on the best method. The discussion remains unresolved regarding the specific implementation details for the two-dimensional array program.

Contextual Notes

Some participants mention issues with integer division leading to zero results, highlighting the importance of type promotion in calculations. There are also unresolved questions about the desired output format for the series generation program.

Who May Find This Useful

New C++ programmers, students working on homework assignments involving series calculations, and those interested in understanding loop constructs and typecasting in programming.

Isma
Messages
27
Reaction score
0
urgent help with c++ program for series

i want to form program 2 sum this
pie=4[1-1/3 +1/5 -1/7+... 1/n]

{
int n,z,i;
float x,y,pie;
cin>>n;
i=0;
while (i<=n)
{
y=1/((2*i)+1);
i=i+2;
}

for(z=1;z<=n;z=z+2)
{
x=1/((2*z)+1);

}

pie=4*(y-x);
count<<pie;
}



cant understand wat to do...this is wat i did but its giving 0
 
Technology news on Phys.org
Isma said:
y=1/((2*i)+1);
x=1/((2*z)+1);
I don't know much about programming, but shouldn't the two lines above be:
Code:
 y = y + 1/((2*i)+1);
x = x + 1/((2*z)+1);
otherwise, you won't get the sum of the terms, and so y = x, and so you get pie to be 0.
 
Last edited by a moderator:
so will i initialize x nd y first?
 
Yeah, initialize them to zero and make finchie's changes, and it should do what you describe.
 
#include <iostream.h>
void main()
{
int n,z,i;
float x,y,pie;
cin>>n;
i=0;
y=0;
while (i<=n)
{
y=y+1/((2*i)+1);
i=i+2;

}
x=0;
for(z=1;z<=n;z=z+2)
{
x=x+1/((2*z)+1);

}

pie=4*(y-x);
count<<pie;
}
it still won't work
 
1) You can write the program using 1 for loop. You don't need to separate the task of getting the negative part and the positive parts of the series.
2) You have typecasting issues. While doing your calculations you need to promote your ints to floats.

This is pretty much as tight as you can get it:

Code:
#include <iostream>

using namespace std ;

int main( void ) {
  int n; double pi=0 ;
  cin >> n ;
  for( int i=1, j=0 ; i<n+1; i+=2, j+=1 ) {
    j%2 ? pi-=1.0/i : pi+=1.0/i ;
  }
  cout << 4*pi << endl ;
  return 0 ;
}

If you don't understand something in the above code, don't hesitate to ask.
 
You are having problems with 'int' to 'float' conversions.

These lines are the problem:

y=y+1/((2*i)+1);
x=x+1/((2*z)+1);

y is a float, but i and z are integers. Because they are integers, the whole section 1/((2*i)+1) is treated like an integer, and equal to 0 for any value of i larger than 0.

There are a few ways to get around this. Either create a dummy float 'foo' and then do

foo = i;
y=y+1/((2*foo)+1);

or more cleanly look up what the static_cast command does and change the lines to

y=y+(1/((2*static_cast<float>(i))+1));

EDIT: looks like dduardo beat me to it.
 
thanks a lot...i do get it now nd i ll try to form less loops now
thanx a lot for the tipEDIT: please can u tell wat this statement means
j%2 ? pi-=1.0/i : pi+=1.0/i ;
nd y are we doing it?
 
Last edited:
j%2 ? pi-=1.0/i : pi+=1.0/i ;

is just a shorthand for:

Code:
if(j%2){
  pi-=1.0/i ;
} else {
  pi+=1.0/i ;
}

The % operator is called the modulus operator. It gives you the remainder. In this case j%2 gives you the remainder of j divided by 2. If the reminder is 0, then you know the number is even, else it is odd.

Also this:

1.0/i

is identical to this:

1/(double)i

This basically promotes the integer to double
 
Last edited:
  • #10


dduardo said:
1) You can write the program using 1 for loop. You don't need to separate the task of getting the negative part and the positive parts of the series.
2) You have typecasting issues. While doing your calculations you need to promote your ints to floats.

This is pretty much as tight as you can get it:

Code:
#include <iostream>

using namespace std ;

int main( void ) {
  int n; double pi=0 ;
  cin >> n ;
  for( int i=1, j=0 ; i<n+1; i+=2, j+=1 ) {
    j%2 ? pi-=1.0/i : pi+=1.0/i ;
  }
  cout << 4*pi << endl ;
  return 0 ;
}

If you don't understand something in the above code, don't hesitate to ask.
Hi i am new user of c++ language and i didnt get how this loop is working.
 
  • #11


charu said:
Hi i am new user of c++ language and i didnt get how this loop is working.

for( int i=1, j=0 ; i<n+1; i+=2, j+=1 ) {
The for statement is split into three parts with ";"
The first part is only executed once before the start of the loop, this creates variables i and j and sets them to 0.
The second part "i<n+1" is tested each time through the loop, the loop exits when this is false, so in this case when i is greater or equal to n
The third part is executed each time through the loop, it increments i and j for each iteration
 
  • #12


# include <iostream>
using namespace std;
int main(){
int num;
count <<"enter the desired num";
cin >>num ;
count <<"*"<<endl;

for (int j=1;j<=num;j++)

{
for (int i =1;i <=j;i++)
if (i%2==0)
count <<" ";

else
count <<i<<"*"<<" ";
count<<endl;


}


return 0;
}
this is the program and giving the result :
*
1*
1*3*
1*3* 5*

But the desired result is :
*
1*
1*3*
1*3*
1*3*7*
1*3*7*11*


PLease help in getting desired result.
 
  • #13


You mean to say you want to produce a series of integers which increments by 2,4,4 then after that it how does it increment? 2,4,4,6,6,6,8,8,8,8...?

1*3*
1*3*
There is a repeated line here, is that intentional?
 
Last edited:
  • #14


Defennder said:
You mean to say you want to produce a series of integers which increments by 2,4,4 then after that it how does it increment? 2,4,4,6,6,6,8,8,8,8...?

There is a repeated line here, is that intentional?

no i want series should be produce in 2,4,4,4,4,4,4,4, increment...
and result should be,,,,,,,,,,,1,3,7,11,15and so on,,,,,,,,,,,,,
 
  • #15


please reply me soon....
 
  • #16


Well then that isn't too hard. You need an encompassing for loop for loop to print out all the sequences and within it, you need a count statement to print out the initial +2 increment and then another for loop to print out the rest, incrementing the variable by +4 each time.
 
  • #17


Hi tomorrow i have a test and i need your help...
please helo me in calling a two dimensional array
I want two store two values that is height and weight of 10 person in the system by using array array and using switch.As this is a long ques i need help only in this,Please reply me with correct program as soon as possible.

# include <iostream>
using namespace std;
void Array ( int height[],int weight[],int size){
for (int i =0;i<10;i++)
{
count <<"enter the height";
cin >> height ;
count <<"enter the weight";
cin>>weight;

}
}
double abc(int choice)
{
switch (choice)
{
case 1:
Array(int height[],int weight[],10);
}
}


int main(){
int choice;
cin>>choice;
count <<abc(choice);
count <<endl;
return 0;
 

Similar threads

  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 23 ·
Replies
23
Views
3K
Replies
12
Views
2K
Replies
12
Views
3K
  • · Replies 23 ·
Replies
23
Views
3K
  • · Replies 6 ·
Replies
6
Views
12K
  • · Replies 25 ·
Replies
25
Views
3K
  • · Replies 39 ·
2
Replies
39
Views
5K
  • · Replies 36 ·
2
Replies
36
Views
6K
  • · Replies 6 ·
Replies
6
Views
2K