Here's the question you clicked on:

55 members online
  • 0 replying
  • 0 viewing

Christos

  • 2 years ago

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.

  • This Question is Closed
  1. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    #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; }

  2. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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".

  3. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    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

  4. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  5. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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 {}.

  6. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    Oh right! Hold on lemme check!

  7. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    okay

  8. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    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

  9. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  10. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    hm I am using Xcode (Mac application)

  11. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  12. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  13. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  14. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    I hope that's a good hint for you

  15. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  16. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  17. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  18. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  19. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    ok

  20. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    Actually, it's fine

  21. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    ??

  22. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    Think of this

  23. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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)

  24. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    and then this

  25. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  26. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    Do you see the problem?

  27. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  28. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    ooh

  29. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    see the problem?

  30. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    I removed that "="

  31. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  32. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    i would advise setting your counter to start at that

  33. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    thanks dude

  34. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  35. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    Yea I did this and the first part is completely done

  36. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    so it's all fixed? :)

  37. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  38. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    sure

  39. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    Ok Should I open 2010 or 2012 ??

  40. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    2010

  41. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    ok

  42. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  43. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    yes

  44. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  45. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  46. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  47. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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.

  48. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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)

  49. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  50. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    Ok done! Now F10??

  51. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  52. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    yes done!

  53. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  54. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    do you see something similar to this?

  55. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    yea there is the same exact box on me too

  56. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    k put your mouse over ValueAfterAYear in the code

  57. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  58. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    try it with other variables too

  59. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    ooh I see!! very useful!!

  60. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    ok press F10

  61. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    you'll notice the error jump down a line

  62. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    and ValueAfterAYear has now changed to 3150

  63. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  64. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  65. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    sorry i mean arrow***

  66. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    the arrow on the left

  67. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    aaah yea there is one

  68. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  69. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    it's 2835 now

  70. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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)

  71. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    you can also set breakpoints while your code is running

  72. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  73. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  74. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  75. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

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

  76. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    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

  77. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

    oh I see

  78. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    think you understand breakpoints now?

  79. Christos
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 0

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

  80. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    haha np

  81. Anteara
    • 2 years ago
    Best Response
    You've already chosen the best response.
    Medals 2

    glad i could help

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

    • Attachments:

Ask your own question

Sign Up
Find more explanations on OpenStudy
Privacy Policy