C/C++ Learn C++ for Loop: Finding the Total of a Series with Example Code

  • Thread starter Thread starter loli12
  • Start date Start date
  • Tags Tags
    C++ Loop
AI Thread Summary
The discussion revolves around programming issues related to calculating sums and approximations using loops in C++. The initial problem involves using a for loop to compute the total of a series of fractions, specifically 1/30 + 2/29 + ... + 30/1. The primary issue identified is the use of integer arithmetic, which leads to incorrect results because integer division truncates decimal values. The solution suggested includes using floats or doubles for the numerator and denominator or employing static casting to ensure the division yields a double result.Additionally, another user seeks help with a separate problem involving nested for loops to create a table that approximates a mathematical series. The series in question alternates between adding and subtracting fractions, and the user needs guidance on how to structure the program to display the term number alongside its corresponding approximation value. The discussion emphasizes the importance of correctly handling data types and structuring loops to achieve the desired output in programming tasks.
loli12
I am learning how to use the for loop to find out the total of:
1/30 + 2/29 + 3/28 + ... + 29/2 + 30/1
and i wrote the following. but it doesn't work and give the correct total.
can you guys tell me what's wrong?
Thanks

#include <iostream>
using namespace std;
int main ()
{
int num, den; //numerator, denominator
double total=0;

for (num = 1, den = 30; num < 31; num++, den--)
total += (num/den);
cout << "Total is " << total<< endl;
return 0;
}
 
Technology news on Phys.org
The for loop looks fine. The problem is that you're trying to do integer arithmetic with non-integer values (fractions). Try using floats or doubles instead.

- Warren
 
The problem is that the answer of num/den would be taken as an interger, then put into a double. So it would convert 0 into...0. The easiest solution would be to declare den as a float (or double).
 
OH! I see.. THanks both of you guys!
 
You can still keep the integers, but use static casting to convert the result of division to double without truncation:

Code:
total += static_cast< double >( num ) / den;

den, being an integer will be coerced to a double by the compiler.
 
Last edited:
This will correct the problem for you!

#include<stdio.h>

#define POUNDS_PER_KILO 2.2406
#define OZ_ALCOHOL_PER_DRINK 0.54
#define PERCENT_WATER_MALE 0.58
#define PERCENT_WATER_FEMALE 0.49
#define GRAMS_ALC_PER_OZ 23.36
#define PERCENT_WATER_BLOOD 0.806
#define METABOLISM_RATE 0.012

int main(void)
{

float numDrinks, weight, bac, mlWater, gramsAlc, alcPerMlWater, alcPerMlBlood, timeDrinking;
char gender = 'c';

printf("Welcome to the Percent Blood Alcohol Calculator!\n\n");
printf("Enter the number of drinks you've had so far: ");
scanf("%f", &numDrinks);

printf("How many hours ago did you start drinking: ");
scanf("%f", &timeDrinking);

printf("Enter your gender(m or f): ");
while((gender!='m')&&(gender!='M')&&(gender!='f')&&(gender!='F')) {

scanf("%c", &gender);
}

printf("How much do you weigh (yes, your real weight): ");
scanf("%f", &weight);

if (gender == 'M' || gender == 'm') {
mlWater = weight/POUNDS_PER_KILO * PERCENT_WATER_MALE*1000;
}else if(gender=='F' || gender == 'f') {
mlWater = weight/POUNDS_PER_KILO * PERCENT_WATER_FEMALE*1000;
}

gramsAlc = numDrinks*OZ_ALCOHOL_PER_DRINK*GRAMS_ALC_PER_OZ;
alcPerMlWater = gramsAlc / mlWater;
alcPerMlBlood = alcPerMlWater * PERCENT_WATER_BLOOD;
bac = alcPerMlBlood * 100;
bac = bac - METABOLISM_RATE * timeDrinking;

printf("Your BAC is: %f\n", bac);

printf("\n**Discalimer: The information from this calculator is only an estimate**\n");
printf(" In fact, you're probably not the least bit inebriated, go have five more.\n");

return 0;
}
 
can anyone help

im having trouble with the for loop within the for loop.

i have to to write a program that asks the user to enter the amount of terms they would like to use for an approximatoin. then print out a table that shows term number and approximation.
the formula is p = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + ....and so on.
the table should look like this. if the user enters 5,


Term Approximation Value
1 x.xxxxxx
2 x.xxxxxx
3 x.xxxxxx
4 x.xxxxxx
5 x.xxxxxx
 

Similar threads

Replies
22
Views
3K
Replies
1
Views
2K
Replies
1
Views
2K
Replies
5
Views
3K
Replies
39
Views
4K
Replies
1
Views
1K
Back
Top