Christos
  • 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.
Computer Science
  • Stacey Warren - Expert brainly.com
Hey! We 've verified this expert answer for you, click below to unlock the details :)
SOLVED
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
chestercat
  • chestercat
I got my questions answered at brainly.com in under 10 minutes. Go to brainly.com now for free help!
Christos
  • Christos
#include 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; }
anonymous
  • 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".
Christos
  • 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

Looking for something else?

Not the answer you are looking for? Search for more explanations.

More answers

Christos
  • Christos
* * * The program has to do this: http://screencast.com/t/BFLvrQUh5b
anonymous
  • 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 {}.
Christos
  • Christos
Oh right! Hold on lemme check!
anonymous
  • anonymous
okay
Christos
  • 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
anonymous
  • 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
Christos
  • Christos
hm I am using Xcode (Mac application)
anonymous
  • 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
Christos
  • Christos
I also have Visual Studio 2010 and Visual Studio 2012 I can run the code on those programs too on Virtual Machine
anonymous
  • 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
anonymous
  • anonymous
I hope that's a good hint for you
Christos
  • Christos
Really? For you it gets this result? Look here: http://screencast.com/t/3uQDOhBe This is the result from me
anonymous
  • 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
anonymous
  • anonymous
also, you'll notice that it proves the wrong results consistently except for the third iteration in this case
anonymous
  • anonymous
i'm 90% sure i know why that is, let me just check
Christos
  • Christos
ok
anonymous
  • anonymous
Actually, it's fine
Christos
  • Christos
??
anonymous
  • anonymous
Think of this
anonymous
  • 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)
anonymous
  • anonymous
and then this
anonymous
  • 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
anonymous
  • anonymous
Do you see the problem?
anonymous
  • 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
Christos
  • Christos
ooh
anonymous
  • anonymous
see the problem?
Christos
  • Christos
I removed that "="
anonymous
  • anonymous
well consider how many years have already passed when the while loop starts
anonymous
  • anonymous
i would advise setting your counter to start at that
Christos
  • Christos
thanks dude
anonymous
  • anonymous
counter3=2, and while (counter3 < NumberOfYears) fixes your problem
Christos
  • Christos
Yea I did this and the first part is completely done
anonymous
  • anonymous
so it's all fixed? :)
Christos
  • Christos
Hey something last, Would it be possible to tell me how to make use of those "breakpoints" in Visual Studio?
anonymous
  • anonymous
sure
Christos
  • Christos
Ok Should I open 2010 or 2012 ??
anonymous
  • anonymous
2010
Christos
  • Christos
ok
anonymous
  • anonymous
http://i.imgur.com/BMAdkTm.png see that red dot the arrow points to?
Christos
  • Christos
yes
anonymous
  • anonymous
That's a breakpoint. By putting that there, it tells the program to pause execution at that point.
anonymous
  • anonymous
You can then press F10 to step through the program, line by line, or F5 to continue until the next breakpoint
anonymous
  • anonymous
the value of this is it lets you see the values stored in your variables when the program isn't finished yet
anonymous
  • 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.
anonymous
  • 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)
anonymous
  • anonymous
lemme know when you're put a breakpoint there :)
Christos
  • Christos
Ok done! Now F10??
anonymous
  • anonymous
have you started the program in debug mode, and entered your values (5000, and 5) in this case?
Christos
  • Christos
yes done!
anonymous
  • anonymous
http://i.imgur.com/uoHs6hZ.png look at where ive highlighted in a red box
anonymous
  • anonymous
do you see something similar to this?
Christos
  • Christos
yea there is the same exact box on me too
anonymous
  • anonymous
k put your mouse over ValueAfterAYear in the code
anonymous
  • 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
anonymous
  • anonymous
try it with other variables too
Christos
  • Christos
ooh I see!! very useful!!
anonymous
  • anonymous
ok press F10
anonymous
  • anonymous
you'll notice the error jump down a line
anonymous
  • anonymous
and ValueAfterAYear has now changed to 3150
anonymous
  • anonymous
you can look at it from either the box or from mouseovering it
Christos
  • Christos
I noticed the 3150 but what do you mean by an error??
anonymous
  • anonymous
sorry i mean arrow***
anonymous
  • anonymous
the arrow on the left
Christos
  • Christos
aaah yea there is one
anonymous
  • anonymous
ok, keep pressing F10 until you're back at where we are now
anonymous
  • anonymous
it's 2835 now
anonymous
  • 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)
anonymous
  • anonymous
you can also set breakpoints while your code is running
anonymous
  • 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
anonymous
  • anonymous
things like this are so useful when trying to fix a logic problem
Christos
  • Christos
but if I change the value will the code change too, so that it corresponds to the changed value?
anonymous
  • anonymous
the actual code itself doesn't change, but within the program itself, the value changes, so it executes as per your changed value
anonymous
  • 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
Christos
  • Christos
oh I see
anonymous
  • anonymous
think you understand breakpoints now?
Christos
  • Christos
Yea I will use them a lot with nested loops and such! You have no idea how this helps !! :)
anonymous
  • anonymous
haha np
anonymous
  • anonymous
glad i could help

Looking for something else?

Not the answer you are looking for? Search for more explanations.