.
Hello! Sir. this is my program for the game. I would like some feedbacks. Thank you in advance.
Hello! Coach. I am using visual studio 2017 version. When I use the getRandomNumber function, it just show number over 100. I wrote it that way:
getRandomNumber(1, 100);
I don’t know what is the problem?
/code bool playAgain()
{
// Keep asking the user if they want to play again until they pick y or n.
char ch;
do
{
std::cout << "Would you like to play again (y/n)? ";
std::cin >> ch;
} while (ch != ‘y’ && ch != ‘n’);
return (ch == ‘y’);
}
hey alex i just wanted to ask you… i fully understand the above code and i wrote a similar one to it…. but i didn’t understand the use of ( return (ch == ‘y’))
can you please clarify the use of this return statetment!!!
Right, you weren’t kidding about it getting harder, haven’t spent as much time on the previous questions as question 2, but here it is (any input on how I could have done it better is welcomed):-
int getRandomNumber(int min, int max)
{
static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0); // static used for efficiency, so we only calculate this value once
// evenly distribute the random number across our range
return static_cast<int>(rand() * fraction * (max - min + 1) + min);
}
In This, I understood rand()*fraction part as it will always generate a no. b/w 0 & 1 but can u plz tell me about this (* (max-min+1) + min) and the whole operation !!
rand() generates a number between 0 and RAND_MAX (typically 32767). Fraction is a number between 0 and 1. The rest is just mathematics to produce as even a distribution as possible across the range between min and max.
Sir, Let me thank you for these amazing tutorials! Here’s my solution to question #2
Any suggestions please,
Thank you.
Overall the structure looks good. A few minor details:
1) Don’t use “using namespace std”
2) Don’t start variable names using an underscore
3) Having a variable named option and _option is confusing.
4) The code in function guessNumber_chooseOptions() could go in main since having a main function that just calls another function and does nothing else is silly.
Hello sir. Thank you for the reply. I will surely correct those mistakes.
I cant understand the second hint: "Visual Studio users: Due to a flaw in the Visual Studio implementation of rand(), call rand() once after seeding to discard the first result."
Thank you.
After you call srand(), call rand() once, but don’t use the result for anything because it won’t be properly random.
Got it. Thank you!
Hello! Madhan. I am a new c++ learner and Ic saw your function for a random number. I was wondering how you did it. I would like to have a little explanation. Thank you very much.
My solution.
I am writing this problem part by part and now I have a problem in it(inside void play() function), compiler says that it cannot resolve overloaded function min based on conversion to type int, can you please say what is the problem in it?
For this line of code:
You haven’t defined min and max, so the compiler is complaining it doesn’t know what these variables are. You probably just want to use the literals 0 and 100 here.
why there is a need to write "const double" if we can write only double?
what is the advantage of writing like that?(line 24)
Const just helps ensure you don’t accidentally change anything you don’t intend to be changed. It’s not necessary, but it’s a good practice.
what do you think about my code Alex?
Mostly good. But it’s a little weird how your code calls playGame(), then yesOrNo(), which itself calls playGame again. The code for yesOrNo() could have its logic flipped so it plays a game first and then asks if you want to play again second. Then you don’t need the initial call to playGame() in main.
:))that was fun how you describe it. thanks. i will try to fix it.
My code for question 2 has at least one issue that I would like to fix:
In HiLo.cpp:
[/code]
//Comments redacted due to being a copy and paste of the question
#include "stdafx.h"
#include <iostream>
#include "HighLow.h"
#include "PlayAgainPrompt.h"
int main()
{
do
{
HighLow();
} while (playAgainPrompt());
return 0;
}
[/code]
In HighLow.h:
In getRandomNumber.h
In hiLoConsts.h
In playAgainPrompt.h
In stdafx.h
#include <random> // for std::random_device and std::mt19937
#include <limits>
Hi Alex,
I only modified main for the first question. I used a while loop instead of a do-while loop.
What do you think?
It’s okay, but this necessitates an extra call to calculateAndPrintHeight() after the loop. Not the end of the world, but slightly more repetitive than the do/while version.
I try to #include <ctime> in visual studio 2015 but I have two errors coming up:
1. cannot open source file "SDKDDKVer.h"
2.cannot open include file "SDKDDKVer.h": no such file or directory
what should I do? thanks in advance
It sounds like one of two things has happened:
1) You (or something you uninstalled) uninstalled the Win SDK that Visual Studio 2015 was using, so it can’t find that file any more.
2) Your compiler’s configuration got messed up, so it’s looking in the wrong place.
I’d try reinstalling your compiler.
Hi Alex, I noticed an interesting bug in the ball drop quiz.
If you set the initial height to such a value that the seconds value increments over 10, the values goes from 103.1M to 10M on the next iteration.
For example, if I set the initial height to 500 Meters
the program prints:
At 0 seconds, the ball is at height: 500 meters
At 1 seconds, the ball is at height: 495.1 meters
At 2 seconds, the ball is at height: 480.4 meters
At 3 seconds, the ball is at height: 455.9 meters
At 4 seconds, the ball is at height: 421.6 meters
At 5 seconds, the ball is at height: 377.5 meters
At 6 seconds, the ball is at height: 323.6 meters
At 7 seconds, the ball is at height: 259.9 meters
At 8 seconds, the ball is at height: 186.4 meters
At 9 seconds, the ball is at height: 103.1 meters
At 10 seconds, the ball is at height: 10 meters
At 11 seconds, the ball is on the ground.
At first I thought I had done something wrong, but I tried your solution, someone else’s and mine, and all 3 exhibit the same problem.
Obviously the issue is because we have no way to stop the ball accelerating once it reaches a realistic max speed.
Once we reach 10 seconds, we end up doing the sum (myGravity * 10 * 10) / 2.
Which, if I’ve got my maths right, is equal to 490m/s.
Nearly 1.5 times the speed of sound!
These are an excellent set of tutorials though, and I’m thoroughly enjoying myself.
490 is the distance it has fallen, the speed would be 98.0665 m/s
Is the use of
in this example justified since I don’t think I can use a loop instead since I need to be able to use
later on outside the block?
As far as goto goes, it’s not a pretty good use. Personally, I would have just wrapped that code in a loop, but that’s part of what makes programming fun -- there’s a lot of different ways to solve the same problem.
Hi Alex. I ended making a very different code for point 2. Is this method very bad compared to your solution? I made everything in loops like this:
I have a few thoughts about this code:
1) srand() should be called once at the top of main and that’s it
2) function tooToo() is horribly named and doesn’t really do enough to justify its existence
3) Your main() function has too many nested loops that would be better as separate functions.
I did this instead. Its okay?
It’s a bit confusing. Why not make the > in the top loop a >= instead and do away with the if statement?
For the first question, I instead wrote a new function and called it in main. Is this acceptable?
Yes.
Help! Why does this not work?
main.cpp
constants.h
Your calculateSeconds() function has an infinite loop because you’re re-initializing variable seconds to 0 every iteration.
Didn’t notice that. Thanks! 🙂
solution to problem 2.Have fun playing the game!!!
Hello all! I put some comments in my solution to #2 and I made sure to only call srand() one time. Here is my full improved program.
What do you think? Thanks for the feedback!
Generally looks good. You could improve your 3 consecutive if statements inside playGame() by using if/else.
Hello Alex, here’s my solution for #2, what do you think?
Looks good. Only thing I would have done differently is have the winning/losing cases in playSingleGame() return instead of break.
First, I would like to compliment this C++ tutorial. It is the best C++ tutorial I have found so far and it does a good job of covering a whole lot. Nice job! I really would just like to share my solution to problem number two and get any way I can improve it. I realize I am calling srand() every time the playGame() function is called but besides that, how can I improve? Here is my solution to #2.
This is probably the fifth time I read this tutorial because I want to read the parts that are updated and this is as good as I could get it so far.
Thanks for the feedback!
Your program looks pretty good, outside of the fact that the functions could use some comments.
I dont know why but my program never prints the reached on the gorund line
it prints each line but never prints the final line
i dont understand why this is happening .
can you please tell me what is wrong ?
First off. Excellent tutorials! I am from Economics background and I’ve had very little trouble understanding these tutorials so far. Thank you so much for this website.
Okay so for the Hi-Lo game, I wrote a completely different code. Although I am getting the desired output, could you please tell me how do I make my code better and what to avoid? Thanks In advance!
My code:
P.S: Apologies if I didn't use the syntax highlighter correctly.
The code looks generally okay, outside of the use of “using namespace std;” and goto. You should work on becoming more comfortable using while or do/while loops.
Okay, will try to work on it. Once again, thank you so much 🙂
i used exite() in playGame function accord below:
is it standard coding or not ?
It’s not common to exit programs from non-main functions unless an error occurs. So no, not standard.
You’d be better off using a return statement instead, so the caller can do any necessary cleanup.
hi, i just wanted to share my code for question 2, any feedback is appreciated
I also want to say that i really liked this quiz, thanks a lot.
Visually inspecting this code, it seems fine to me.
I encountered some problems on qn2 in getRandomNumber function while using Mersenne Twister to generate random number. After spending much time got the function working but will this produce any issues??
NOTE I used UINT_MAX instead of RAND_MAX any other better solution for this?
This seems fine to me.
Hi Alex. I have two questions after implementing the game of hi-lo. First, would you say it’s better to use while instead of do while in the case of infinite loop (easier to read, since we spot it right away)? My second question is about the function playAgain(). How would you compare my implementation of the function (below) to yours? Is there any reason you would prefer one over the other?
Yes, if the loop condition is a constant (like yours is) then a while is better than a do-while because you can understand that it’s an infinite loop right away.
For functions as straightforward as playAgain() is, I think it’s mostly a matter of style how you implement it. The only part of yours I think could use improving is that there’s a little bit of cognitive friction to determine what gets returned in the ‘y’ or ‘n’ cases. Because you only have two options here, I think it would be better to just be explicit about the return values:
That’s easier to understand because it makes the return value simpler (no comparison needed).
Hi Alex,
I did question 1 a bit differently than you by putting a for loop into the calculateAndPrintHeight function. Would the way that I did it lead to any issues?
Nope, seems fine to me.
So I tried to validate the input of the guess variable in quiz 2.
Problems start occuring when the user enters values like 0,213 or 5,091.
This input results into a 0 being read in (which is valid) the next time cin is called it will go into failure mode. This makes it very hard to check for valid input since I don’t want to call an extra cin to flush the digits up to the "," (would be really annoying for the users that do enter valid input). Yet I do need to flush those digits to let my cin go into failmode, or it will not recognize the failmode with cin.fail() until the next time I try to read a value. This is in the next iteration of my loops so I can’t use that behaviour. It will print:
guess #1: 5,002
That number is too low!
guess #2:guess#2:
As shown it only goes into failmode in the second iteration, then recognizes and fixes the problem. While the expected output should be:
guess#1: 5,002
guess#1:
I can’t figure a way to properly test my code at something that is presumably an evil mixture of error cases 2 (extraneous input) and 3 (extraction fails) from 5.10.
Am I missing something really easy here?
There are two possibilities here:
1) Read in your input as a string, validating the string, and the converting to a numeric value if the string validates.
2) Do your read, ignore any line breaks, then check if there’s anything left in the iostream buffer. If there is, the user must have entered something invalid, otherwise it would have extracted. Something like this:
Is this bad way to make this game?
Thanks for the great tutorials! Do you think this solution is any good or any bad?
What do you guys say about my code here ?
Your program is called srand() every time you play again. You should only call it once at the top of main().
Your randomNumGenerator() function has a lot of magic numbers, what are they doing?
after two days of struggling with this assignment and almost giving up, i poured through all of the lessons again and looked up different ways of doing things. here is what i came up with. about 40 more lines than yours but i just finished it and haven’t done a second pass to clean it up.
thank you so much for these tutorials!
Alex, can you take a look at my solution for the second question?
Looks good.
This is my solution for the game, but Alex’s solution is cleaner
Been following this tutorial for a while and just wanted to say thanks Alex, it is very awesome!
My version of Quiz 1, less funtions but i think it does the job:
This is my solution to the second quiz, is there anything to be improved? I have used the Mersenne Twister to generate the random number.
Hello, this is my solution to question nr.2
I made this after taking a break for 1 month from learning, so I hope it atleast follows the proper conventions of C++ that we have been taught so far.
Hey Alex, what do you think of my solution to question 2? Unfortunately, using what I’ve covered so far I couldn’t find a way to reject decimal inputs, e.g. 18.5. I tried adding an extra std::cin after I import a value to x to see if there is more data waiting in the buffer - such as a period - but that only works if the user actually entered a decimal value. If the user entered an integer, then computer asks the user to input more data, defeating the purpose. My compromise was to have std::cin truncated decimals and then use cin.ignore to clear the rest of the buffer. Any ideas?