A program will calculate and display the sum of all even even numbers from 2 to n, where n is a positive number inputted by the user. What should I do and what is the expression of that???
Printable View
A program will calculate and display the sum of all even even numbers from 2 to n, where n is a positive number inputted by the user. What should I do and what is the expression of that???
Sounds a lot like homework, so a hint is looking at modulus (%).
You should write code for it. :)
Take a pen and paper, write down the steps that need to be performed, then write the same steps in C# code.
Interesting homework. You can solve it without using a loop. ;) It is just a mathematical problem. The solution is quite simple so I believe you can solve it alone.
It doesn't work. Secondly, why are you trying to do this guys homework for him? Anyone with a week of programming experience in any language should be able to knock that out within 30 minutes in c#.Quote:
Originally Posted by klamath23
Let him at least put up his own attempt.
Also, don't fix your solution, at least make him do that.
How can you say it does'nt work. I have compiled it and seen the result. I should not do his homework, right i will delete for now. But if you say it does'nt work prove it to me , show me in private message. It very easy to just say it does'nt work.Quote:
Originally Posted by Mutant_Fruit
This is one way you can do it .Quote:
Originally Posted by codeexpert123
Code:int sum = 0;
for ( int i = 2; i <= n; i += 2 ) {
sum += i;
}
Well, the problem with your original code (from what i remember, i only glanced at it when i noticed the problem) was that you coded the loop like this:
So unless i misread it, it couldn't have worked. Maybe you transcribed it wrong, or maybe i misread. Either way, if that's what you did write, it was a mistake.Code:for(int i=0; i <= n; n++)
DoStuff();
i didnot write the full code because it was his homework problem , i just wanted to give him hint. I will send the complete code to by private message,Quote:
Originally Posted by Mutant_Fruit
This problem is not new this is asked many times in c++, java etc.
klamath23
Because of post #7 from klamath23 the solution is out now. Therefore I can post my solution too:
The complexness is reduced to O(1) from O(n/2) when using a loop.Code:public uint Calculate(uint n)
{
//ensure the number is an even number
if (n % 2 == 1)
n -= 1;
//calculate sum without a loop because it is a arithmetic progression
return Convert.ToUInt32(n*(n/4 + 0.5));
}
Suppose n=6. The final answer should be 6 + 4 + 2 = 12.Quote:
Originally Posted by torrud
In your code, if n=6, the final answer is 9. That's a bit of a problem ;)
6*(6/4+0.5) = 6 * 2 = 12
Try something like this ((n *n)/4 + (n* 0.5))Quote:
Originally Posted by Mutant_Fruit
if n = 6
then ((6*6)/4 + (6 *0.5)) = 12
Yes, but isn't n*(n/4 + 0.5) exactly the same as (n *n)/4 + (n* 0.5) ?
This works for human, this does'nt work in c# , so if you try something likeQuote:
Originally Posted by Zaccheus
((n *n)/4 + ( n * 0.5)) = 12 in c#.
if you know algebra then you should know thisQuote:
Originally Posted by Zaccheus
c * (a + b) = c * a + c * b;
2 * (3 + 5) = 2 * 3 + 2 *5;
16 = 16 ;
Indeed.
You are correct, because it is integer division!Quote:
Originally Posted by klamath23
It would wouk if he wrote n / 4.0.
:D
Ah, but you're performing integer division, not floating point division.Quote:
Originally Posted by Zaccheus
6/4 == 1
EDIT: It won't actually be completly accurate if you just change it to 4.0. You may end up with an answer like 11.99999999 instead of 12.
To round a floating point number to the *nearest* integer what you need to do is add 0.5 then just cast the float to int.
i.e.
double result = n * (n / 4.0 + 0.5);
int finalAnswer = (int)(result + 0.5);
Alternatively one of the other forms of the equation would be a better way of doing it.
Well, as it happens 1.5, can be accurately reprepresented in binary - but I do take your point. Rounding errors are always an issue in floating point calculations.
:thumb:
There are better ways to do this problemQuote:
Originally Posted by Zaccheus
like this
Code:int sumEven = 0;
for(int i =2; i<=n;n++)
{
if((i % 2)== 0)
sumEven+=i;
}
Console.WriteLine(" the sum of even numbers till n is:"+sumEven);
You are right. It was just a typo mistake of me because I did not test the code. It means n / 4.0 on that part.Quote:
Originally Posted by Zaccheus
But I am understand the point of view for a rounding error. There is a simple solution. You have only to eliminate the fraction inside.
That's it. There should no rounding error any longer. :wave:Code:public uint Calculate(uint n)
{
//ensure the number is an even number
if (n % 2 == 1)
n -= 1;
//calculate sum without a loop because it is a arithmetic progression
return n*(n + 2) >> 2;
}
thanks for the help but I myself solved it:D