Ask your own question, for FREE!
Computer Science 15 Online
OpenStudy (christos):

C++, Help needed! I need a Program that does this: http://screencast.com/t/BFLvrQUh5b Apparently there is something wrong with my code but I don't know why! The behaviour is not correct.

OpenStudy (christos):

#include <iostream> using namespace std; int main() { int InitialValue,NumberOfYears,counter=9,counter2=1,counter3=1,ValueAfterAYear; cout << "Give me the initial value : "; cin >> InitialValue; cout << "Give me the number of the years of that car : "; cin >> NumberOfYears; ValueAfterAYear = InitialValue-InitialValue*30/100; if (NumberOfYears <= 8) { while (counter3 <= NumberOfYears) ValueAfterAYear = ValueAfterAYear-ValueAfterAYear*10/100; counter3++; } if (NumberOfYears > 8) { while (counter2 <= 8) { ValueAfterAYear = ValueAfterAYear-ValueAfterAYear*10/100; counter2++; } while (counter < NumberOfYears) { ValueAfterAYear = ValueAfterAYear-ValueAfterAYear*5/100; NumberOfYears--; } } if (ValueAfterAYear < 500) ValueAfterAYear = 500; cout << "The value of the car is " << ValueAfterAYear; return 0; }

OpenStudy (anonymous):

I'll open up Visual Studio in a minute, just tell me exactly what you want to the program to do. I'm assuming you're getting a logic error since you say "The behaviour is not correct".

OpenStudy (christos):

Yes right, I am getting a logic error. My code's syntax is 100% correct. I don't want you to do me the program. If it's possible just tell me where it lacks logic so that I can learn to make better

OpenStudy (christos):

* * * The program has to do this: http://screencast.com/t/BFLvrQUh5b

OpenStudy (anonymous):

Look here: while (counter3 <= NumberOfYears) ValueAfterAYear = ValueAfterAYear-ValueAfterAYear*10/100; counter3++; It's an infinite loop. Remember that if you don't include {} only the FIRST line is included in the loop. Wrap it in {}.

OpenStudy (christos):

Oh right! Hold on lemme check!

OpenStudy (anonymous):

okay

OpenStudy (christos):

Ok now runs and it gives me results. for example this: Give me the initial value : 5000 Give me the number of the years of that car : 5 The value of the car is 2068 But with the calculator it gives me 2551.5

OpenStudy (anonymous):

Are you using an IDE, like Visual Studio, or a CLI compiler like gpp/g++? Just wondering since debugging things like this is easy with breakpoints, etc

OpenStudy (christos):

hm I am using Xcode (Mac application)

OpenStudy (anonymous):

Alright, well I haven't used that, but just for future reference learning how to use breakpoints will really help things :) Anyway: I'll check the logic of your program, sec

OpenStudy (christos):

I also have Visual Studio 2010 and Visual Studio 2012 I can run the code on those programs too on Virtual Machine

OpenStudy (anonymous):

check the answer of the equation: Initial value: 5000 years: 5 5000 - 5000 * 30/100 = 3500 3500 - 3500 * 10/100 = 3150 3150 - 3150 * 10/100 = 2835 2835 - 2835 * 10/100 = 2551.5 (2552) That accounts for 5 years Your program IS, in fact, actually getting that result consider the value of counter 3, and how many times it's looping

OpenStudy (anonymous):

I hope that's a good hint for you

OpenStudy (christos):

Really? For you it gets this result? Look here: http://screencast.com/t/3uQDOhBe This is the result from me

OpenStudy (anonymous):

You're changing the value from 5000 to 3500 BEFORE the loop; so: First iteration: 3150 Second iteration: 2835 ###Third iteration: 2552 ### Fourth iteration: 2297

OpenStudy (anonymous):

also, you'll notice that it proves the wrong results consistently except for the third iteration in this case

OpenStudy (anonymous):

i'm 90% sure i know why that is, let me just check

OpenStudy (christos):

ok

OpenStudy (anonymous):

Actually, it's fine

OpenStudy (christos):

??

OpenStudy (anonymous):

Think of this

OpenStudy (anonymous):

Initial value: 5000 years: 5 5000 - 5000 * 30/100 = 3500 3500 - 3500 * 10/100 = 3150 3150 - 3150 * 10/100 = 2835 2835 - 2835 * 10/100 = 2551.5 (2552)

OpenStudy (anonymous):

and then this

OpenStudy (anonymous):

You're changing the value from 5000 to 3500 BEFORE the loop; so: First iteration: 3150 Second iteration: 2835 ###Third iteration: 2552 ### Fourth iteration: 2297

OpenStudy (anonymous):

Do you see the problem?

OpenStudy (anonymous):

You're looping through 5 times even though a) the first year (5000) is taken care of, and the second year (removing 30%) is taken care of

OpenStudy (christos):

ooh

OpenStudy (anonymous):

see the problem?

OpenStudy (christos):

I removed that "="

OpenStudy (anonymous):

well consider how many years have already passed when the while loop starts

OpenStudy (anonymous):

i would advise setting your counter to start at that

OpenStudy (christos):

thanks dude

OpenStudy (anonymous):

counter3=2, and while (counter3 < NumberOfYears) fixes your problem

OpenStudy (christos):

Yea I did this and the first part is completely done

OpenStudy (anonymous):

so it's all fixed? :)

OpenStudy (christos):

Hey something last, Would it be possible to tell me how to make use of those "breakpoints" in Visual Studio?

OpenStudy (anonymous):

sure

OpenStudy (christos):

Ok Should I open 2010 or 2012 ??

OpenStudy (anonymous):

2010

OpenStudy (christos):

ok

OpenStudy (anonymous):

http://i.imgur.com/BMAdkTm.png see that red dot the arrow points to?

OpenStudy (christos):

yes

OpenStudy (anonymous):

That's a breakpoint. By putting that there, it tells the program to pause execution at that point.

OpenStudy (anonymous):

You can then press F10 to step through the program, line by line, or F5 to continue until the next breakpoint

OpenStudy (anonymous):

the value of this is it lets you see the values stored in your variables when the program isn't finished yet

OpenStudy (anonymous):

so you can see the use of this when it comes to debugging. For example, I figured out your problem by putting a breakpoint inside the while loop, and checking the value of valueAfterAYear every iteration.

OpenStudy (anonymous):

So put a breakpoint next to ValueAfterAYear = ValueAfterAYear-ValueAfterAYear*10/100; (You can do this by clicking on the gray bar on the far left)

OpenStudy (anonymous):

lemme know when you're put a breakpoint there :)

OpenStudy (christos):

Ok done! Now F10??

OpenStudy (anonymous):

have you started the program in debug mode, and entered your values (5000, and 5) in this case?

OpenStudy (christos):

yes done!

OpenStudy (anonymous):

http://i.imgur.com/uoHs6hZ.png look at where ive highlighted in a red box

OpenStudy (anonymous):

do you see something similar to this?

OpenStudy (christos):

yea there is the same exact box on me too

OpenStudy (anonymous):

k put your mouse over ValueAfterAYear in the code

OpenStudy (anonymous):

when you do that it should come up with "3500", you can do that with any variable within the scope when you're debugging

OpenStudy (anonymous):

try it with other variables too

OpenStudy (christos):

ooh I see!! very useful!!

OpenStudy (anonymous):

ok press F10

OpenStudy (anonymous):

you'll notice the error jump down a line

OpenStudy (anonymous):

and ValueAfterAYear has now changed to 3150

OpenStudy (anonymous):

you can look at it from either the box or from mouseovering it

OpenStudy (christos):

I noticed the 3150 but what do you mean by an error??

OpenStudy (anonymous):

sorry i mean arrow***

OpenStudy (anonymous):

the arrow on the left

OpenStudy (christos):

aaah yea there is one

OpenStudy (anonymous):

ok, keep pressing F10 until you're back at where we are now

OpenStudy (anonymous):

it's 2835 now

OpenStudy (anonymous):

if you want to skip going line by line, you can just pres F5 and it will go to the next breakpoint (since were in a loop it goes back to the same breakpoint)

OpenStudy (anonymous):

you can also set breakpoints while your code is running

OpenStudy (anonymous):

and if you want, double click the value of ValueAfterAYear in the auto's box, you can actually change the value if you want

OpenStudy (anonymous):

things like this are so useful when trying to fix a logic problem

OpenStudy (christos):

but if I change the value will the code change too, so that it corresponds to the changed value?

OpenStudy (anonymous):

the actual code itself doesn't change, but within the program itself, the value changes, so it executes as per your changed value

OpenStudy (anonymous):

you don't change the value mid program much, it's just a useful thing to know in case you ever need to do that

OpenStudy (christos):

oh I see

OpenStudy (anonymous):

think you understand breakpoints now?

OpenStudy (christos):

Yea I will use them a lot with nested loops and such! You have no idea how this helps !! :)

OpenStudy (anonymous):

haha np

OpenStudy (anonymous):

glad i could help

Can't find your answer? Make a FREE account and ask your own questions, OR help others and earn volunteer hours!

Join our real-time social learning platform and learn together with your friends!
Can't find your answer? Make a FREE account and ask your own questions, OR help others and earn volunteer hours!

Join our real-time social learning platform and learn together with your friends!