Ask an Expert: URGENT: Mathematics Programming

 Posts: 5
 Joined: Sat Oct 08, 2005 2:59 pm
URGENT: Mathematics Programming
I am doing one of your mathematics ideas and I am using QBASIC to do the HiLo Project or namely The Effects of Card Counting on a Card Game.
I need help on the programming. My programming so far is:
CLS
RANDOMIZE TIMER
FOR x = 1 TO 10000
PRINT INT(RND*13)+1
NEXT
Help me out here!
I need help on the programming. My programming so far is:
CLS
RANDOMIZE TIMER
FOR x = 1 TO 10000
PRINT INT(RND*13)+1
NEXT
Help me out here!
As always, I would suggest a Google Search to help find information about QBASIC.
However, it does seem as though you have at least a basic knowledge of QBASIC (sorry, I don't), so I would be inclined to think that it is more a problem of inspiration than knowledge. Try thinking about what needs to happen in the program for your project, and think about the ways in which a program could carry out what you want it to do.
What is the first thing the program will need to do in order for it to get itself ready to do all the calculations that might be required for a project such as yours? Program this if you can, then think about the next thing.. Just go through the testing process in your head, and translate that, through QBASIC, into a program that will carry out what you want it to do for the project.
And it sounds like a neat project, indeed! The outcome could have an effect on the way you play cards, you never know..
However, it does seem as though you have at least a basic knowledge of QBASIC (sorry, I don't), so I would be inclined to think that it is more a problem of inspiration than knowledge. Try thinking about what needs to happen in the program for your project, and think about the ways in which a program could carry out what you want it to do.
What is the first thing the program will need to do in order for it to get itself ready to do all the calculations that might be required for a project such as yours? Program this if you can, then think about the next thing.. Just go through the testing process in your head, and translate that, through QBASIC, into a program that will carry out what you want it to do for the project.
And it sounds like a neat project, indeed! The outcome could have an effect on the way you play cards, you never know..

 Posts: 5
 Joined: Sat Oct 08, 2005 2:59 pm
I have done some basic C programming, and it seems that in order for your variable value to increase, you need to set it up so that it would be
a = a + 1 ( can you have an increment (++) in QBASIC? so that it would look like: a++ )
And you probably should review the project so that you can continue programming the rest of the code.
a = a + 1 ( can you have an increment (++) in QBASIC? so that it would look like: a++ )
And you probably should review the project so that you can continue programming the rest of the code.

 Former Expert
 Posts: 181
 Joined: Wed Aug 31, 2005 2:47 pm
 Occupation: Retired  Information Technology Software Development and Systems Support since 1969.
Hi ZeroTakenaka.
You are definitely on the right track.
Here is some of your QBASIC code, modified some,
that you may be able to use as a skeleton program
for your project:
=======
CLS
RANDOMIZE TIMER
FOR x = 1 TO 10000
r = INT(RND * 13) + 1
n = r
IF r > 7 THEN n = r  1
IF r < 7 THEN n = r + 1
PRINT "Card Showing "; r; " Card Count Next Card "; n
PRINT "Press any Key to continue or type x to Stop.": INPUT a$
IF a$ = "x" OR a$ = "X" THEN GOTO GameOver
a$ = ""
NEXT
GameOver:
END
=======
Good Luck!
You are definitely on the right track.
Here is some of your QBASIC code, modified some,
that you may be able to use as a skeleton program
for your project:
=======
CLS
RANDOMIZE TIMER
FOR x = 1 TO 10000
r = INT(RND * 13) + 1
n = r
IF r > 7 THEN n = r  1
IF r < 7 THEN n = r + 1
PRINT "Card Showing "; r; " Card Count Next Card "; n
PRINT "Press any Key to continue or type x to Stop.": INPUT a$
IF a$ = "x" OR a$ = "X" THEN GOTO GameOver
a$ = ""
NEXT
GameOver:
END
=======
Good Luck!
Best Regards,
Lewis Whaley
Ask an Expert Forum
Science Buddies
Lewis Whaley
Ask an Expert Forum
Science Buddies

 Former Expert
 Posts: 181
 Joined: Wed Aug 31, 2005 2:47 pm
 Occupation: Retired  Information Technology Software Development and Systems Support since 1969.
Hi ZeroTakenaka.
One more thing, just a suggestion.
This would be a really cool project to do using
Microsoft Excel spreadsheet and VBA, Visual Basic for Applications,
Macros instead of QBASIC
if you have access to Microsoft Excel, included with Microsoft Office.
You could capture all of the results and "populate" the spreadsheet Cells,
Rows, and Columns, from your Macro program code,
plus you would have a GUI interface using Message Boxes
and Input Boxes.
You can convert QBASIC code fairly easy to Microsoft VBA code.
You would just need to know the specifics about populating the
spreadsheet with the results which is not that difficult.
If you decide to try this, I can help you and I am sure there
are a lot of other Mentors that are better at this than I am.
Let us know what you think about this.
Good Luck!
One more thing, just a suggestion.
This would be a really cool project to do using
Microsoft Excel spreadsheet and VBA, Visual Basic for Applications,
Macros instead of QBASIC
if you have access to Microsoft Excel, included with Microsoft Office.
You could capture all of the results and "populate" the spreadsheet Cells,
Rows, and Columns, from your Macro program code,
plus you would have a GUI interface using Message Boxes
and Input Boxes.
You can convert QBASIC code fairly easy to Microsoft VBA code.
You would just need to know the specifics about populating the
spreadsheet with the results which is not that difficult.
If you decide to try this, I can help you and I am sure there
are a lot of other Mentors that are better at this than I am.
Let us know what you think about this.
Good Luck!
Best Regards,
Lewis Whaley
Ask an Expert Forum
Science Buddies
Lewis Whaley
Ask an Expert Forum
Science Buddies

 Posts: 5
 Joined: Sat Oct 08, 2005 2:59 pm
[quote][i]First, you should play the game a bit by yourself. Develop your own strategy for playing the game (for example, if the card is greater than 7 you always guess lower, if the card is less than 7 you always guess higher) and then test it out by taking a deck of cards and keeping track of how often you can correctly guess whether the next card is higher or lower than the one you turned over. If you can guess right more than 70% of the time, you've probably got the right strategy. The next thing you need to do is pick a programming language. If you've never programmed before, you should start with QBASIC, which is available for free at many internet sites, and is as close to English as any programming language. You'll write a computer simulation that will play thousands of hands of this card game Your simulation program needs two parts  the first is a shuffling routine to make sure the deck is random. The second is the actual gameplaying strategy. You'll also have to write some data collection routines so you know how many times you've won or lost, and on which cards. Programming the strategy is the most involved part of this project, and can lead to a lot of results about how to play the game. [/i][/quote]
This is what i have to do and I updated on your skeleton but it is not counting all numbers that are in the FOR.
Updated Skeleton:
CLS
RANDONIZE TIMER
FOR x = 1 TO 10000
n = INT(RND * 13) + 1
NEXT
a = 0
b = 0
c = 0
IF n > 7 THEN a = a + 1
IF n = 7 THEN b = b + 1
IF n < 7 THEN c = c + 1
PRINT a; b; c
END
Any help on this is appreciated.
This is what i have to do and I updated on your skeleton but it is not counting all numbers that are in the FOR.
Updated Skeleton:
CLS
RANDONIZE TIMER
FOR x = 1 TO 10000
n = INT(RND * 13) + 1
NEXT
a = 0
b = 0
c = 0
IF n > 7 THEN a = a + 1
IF n = 7 THEN b = b + 1
IF n < 7 THEN c = c + 1
PRINT a; b; c
END
Any help on this is appreciated.

 Former Expert
 Posts: 181
 Joined: Wed Aug 31, 2005 2:47 pm
 Occupation: Retired  Information Technology Software Development and Systems Support since 1969.
Hi ZeroTakenaka.
Here is the latest skeleton for you to use.
You need to use REM statements to document
your Changes.
Programs like this tend to "Evolve" and it is real easy
to lose your place if you have many copies around.
This should be close to what you are trying to accomplish.
Try different ways to "Count" the Next Card Number,
like adding 2 instead of 1 or subtracting 2 instead of 1
or use a Random Number for the Card Number showing,
like:
n = RND(r)  1 or n = RND(r) + 1
instead of
n = r  1 or n = r + 1
You will just have to change the variable "n" in different ways
until you find a good algorithm that works closest
to providing the best number of matches.
New Program:
=======
REM: Card Counting Analysis Program
REM: Program Written:
REM: 10092005 09:12 AM EDT
REM: Change Log:
REM: 10092005 08:12 PM EDT Add and print Total Counts for Match / Unmatch.
REM:
REM:
CLS
DEFINT AZ
a = 0
b = 0
c = 0
n = 0
amatch = 0
bmatch = 0
cmatch = 0
aunmatch = 0
bunmatch = 0
cunmatch = 0
RANDOMIZE TIMER
FOR x = 1 TO 10000
r = INT(RND * 13) + 1
p = n
n = r
IF r > 7 THEN n = r  1: a = a + 1: IF p = n THEN amatch = amatch + 1
IF r = 7 THEN b = b + 1: IF p = n THEN bmatch = bmatch + 1
IF r < 7 THEN n = r + 1: c = c + 1: IF p = n THEN cmatch = cmatch + 1
PRINT "Card Showing "; r; " Card Count Next Card "; n
PRINT "Press any Key to continue or type x to Stop.": INPUT a$
IF a$ = "x" OR a$ = "X" THEN GOTO GameOver
a$ = ""
NEXT
GameOver:
aunmatch = a  amatch
bunmatch = b  bmatch
cunmatch = c  cmatch
PRINT
PRINT "Total number of Cards : "; x
PRINT
PRINT "Card > 7 Number of times : "; a; " Matched: "; amatch; " Unmatched: "; aunmatch
PRINT "Card = 7 Number of times : "; b; " Matched: "; bmatch; " Unmatched: "; bunmatch
PRINT "Card < 7 Number of times : "; c; " Matched: "; cmatch; " Unmatched: "; cunmatch
END
=======
Note  The following similar Counts are displayed at the END of program.
Total number of Cards : 101
Card > 7 Number of times : 46 Matched: 8 Unmatched: 38
Card = 7 Number of times : 9 Matched: 2 Unmatched: 7
Card < 7 Number of times : 45 Matched: 2 Unmatched: 43
=======
Good Luck!
Here is the latest skeleton for you to use.
You need to use REM statements to document
your Changes.
Programs like this tend to "Evolve" and it is real easy
to lose your place if you have many copies around.
This should be close to what you are trying to accomplish.
Try different ways to "Count" the Next Card Number,
like adding 2 instead of 1 or subtracting 2 instead of 1
or use a Random Number for the Card Number showing,
like:
n = RND(r)  1 or n = RND(r) + 1
instead of
n = r  1 or n = r + 1
You will just have to change the variable "n" in different ways
until you find a good algorithm that works closest
to providing the best number of matches.
New Program:
=======
REM: Card Counting Analysis Program
REM: Program Written:
REM: 10092005 09:12 AM EDT
REM: Change Log:
REM: 10092005 08:12 PM EDT Add and print Total Counts for Match / Unmatch.
REM:
REM:
CLS
DEFINT AZ
a = 0
b = 0
c = 0
n = 0
amatch = 0
bmatch = 0
cmatch = 0
aunmatch = 0
bunmatch = 0
cunmatch = 0
RANDOMIZE TIMER
FOR x = 1 TO 10000
r = INT(RND * 13) + 1
p = n
n = r
IF r > 7 THEN n = r  1: a = a + 1: IF p = n THEN amatch = amatch + 1
IF r = 7 THEN b = b + 1: IF p = n THEN bmatch = bmatch + 1
IF r < 7 THEN n = r + 1: c = c + 1: IF p = n THEN cmatch = cmatch + 1
PRINT "Card Showing "; r; " Card Count Next Card "; n
PRINT "Press any Key to continue or type x to Stop.": INPUT a$
IF a$ = "x" OR a$ = "X" THEN GOTO GameOver
a$ = ""
NEXT
GameOver:
aunmatch = a  amatch
bunmatch = b  bmatch
cunmatch = c  cmatch
PRINT "Total number of Cards : "; x
PRINT "Card > 7 Number of times : "; a; " Matched: "; amatch; " Unmatched: "; aunmatch
PRINT "Card = 7 Number of times : "; b; " Matched: "; bmatch; " Unmatched: "; bunmatch
PRINT "Card < 7 Number of times : "; c; " Matched: "; cmatch; " Unmatched: "; cunmatch
END
=======
Note  The following similar Counts are displayed at the END of program.
Total number of Cards : 101
Card > 7 Number of times : 46 Matched: 8 Unmatched: 38
Card = 7 Number of times : 9 Matched: 2 Unmatched: 7
Card < 7 Number of times : 45 Matched: 2 Unmatched: 43
=======
Good Luck!
Best Regards,
Lewis Whaley
Ask an Expert Forum
Science Buddies
Lewis Whaley
Ask an Expert Forum
Science Buddies

 Posts: 5
 Joined: Sat Oct 08, 2005 2:59 pm
Ah yes... so sorry for waiting to reply, I gave up on my project for a moment. I needed to examine and update my program. Here is a good upadated program but I need to run a simulation hilo game and I wanna know how to save the last random number generated.
CLS
RANDOMIZE TIMER
a = 0
b = 0
c = 0
FOR x = 1 TO 10000
G = INT(RND * 13) + 1
IF G > 7 THEN a = a + 1
IF G = 7 THEN b = b + 1
IF G < 7 THEN c = c + 1
NEXT x
PRINT a; b; c
CLS
RANDOMIZE TIMER
a = 0
b = 0
c = 0
FOR x = 1 TO 10000
G = INT(RND * 13) + 1
IF G > 7 THEN a = a + 1
IF G = 7 THEN b = b + 1
IF G < 7 THEN c = c + 1
NEXT x
PRINT a; b; c

 Former Expert
 Posts: 181
 Joined: Wed Aug 31, 2005 2:47 pm
 Occupation: Retired  Information Technology Software Development and Systems Support since 1969.
Hi ZeroTakenaka.
You just need to use the Random Number generated each time
to calculate the next number, then save it in a,b,c
like for example, change your program code as follows:
RANDOMIZE TIMER
a = 0
b = 0
c = 0
FOR x = 1 TO 10000
G = INT(RND * 13) + 1
IF G > 7 THEN a = G + 1
IF G = 7 THEN b = G + 1
IF G < 7 THEN c = G  1
NEXT x
PRINT a; b; c
If you want to save all 10,000 Random numbers,
you will need three Arrays for a,b,c.
Let us know if this helps you and what you are doing next.
Good Luck ZeroTakenaka!
You just need to use the Random Number generated each time
to calculate the next number, then save it in a,b,c
like for example, change your program code as follows:
RANDOMIZE TIMER
a = 0
b = 0
c = 0
FOR x = 1 TO 10000
G = INT(RND * 13) + 1
IF G > 7 THEN a = G + 1
IF G = 7 THEN b = G + 1
IF G < 7 THEN c = G  1
NEXT x
PRINT a; b; c
If you want to save all 10,000 Random numbers,
you will need three Arrays for a,b,c.
Let us know if this helps you and what you are doing next.
Good Luck ZeroTakenaka!
Best Regards,
Lewis Whaley
Ask an Expert Forum
Science Buddies
Lewis Whaley
Ask an Expert Forum
Science Buddies

 Posts: 5
 Joined: Sat Oct 08, 2005 2:59 pm

 Former Expert
 Posts: 181
 Joined: Wed Aug 31, 2005 2:47 pm
 Occupation: Retired  Information Technology Software Development and Systems Support since 1969.
Hi ZeroTakenaka.
The program I Posted the second time we discussed this
does what you need.
I changed the program to write a text file you can open in Notepad
or WordPad.
Output File Name is TextFileName = "C:\ZTaka01.txt"

Posted: Sun Oct 09, 2005 8:37 pm Post subject:

Hi ZeroTakenaka.
Here is the latest skeleton for you to use.
You need to use REM statements to document
your Changes.
Programs like this tend to "Evolve" and it is real easy
to lose your place if you have many copies around.
This should be close to what you are trying to accomplish.
Try different ways to "Count" the Next Card Number,
like adding 2 instead of 1 or subtracting 2 instead of 1
or use a Random Number for the Card Number showing,
like:
n = RND(r)  1 or n = RND(r) + 1
instead of
n = r  1 or n = r + 1
You will just have to change the variable "n" in different ways
until you find a good algorithm that works closest
to providing the best number of matches.
New Program:
=======
REM: Card Counting Analysis Program
REM: Program Written:
REM: 10092005 09:12 AM EDT
REM: Change Log:
REM: 10092005 08:12 PM EDT Add and print Total Counts for Match / Unmatch.
REM: 10052005 07:23 PM EDT Add Output File for Saved Results.
REM:
REM:
CLS
DEFINT AZ
a = 0
b = 0
c = 0
n = 0
amatch = 0
bmatch = 0
cmatch = 0
aunmatch = 0
bunmatch = 0
cunmatch = 0
TextFileName = "C:\ZTaka01.txt"
Open TextFileName For Output As #1
RANDOMIZE TIMER
FOR x = 1 TO 10000
r = INT(RND * 13) + 1
p = n
n = r
IF r > 7 THEN n = r  1: a = a + 1: IF p = n THEN amatch = amatch + 1
IF r = 7 THEN b = b + 1: IF p = n THEN bmatch = bmatch + 1
IF r < 7 THEN n = r + 1: c = c + 1: IF p = n THEN cmatch = cmatch + 1
Record = Record + 1
Result$ = "Record_" + Record +"Card Showing " + r + " Card Count Next Card " + n
PRINT #1,Result$
PRINT Result$
REM: Comment Now: PRINT "Card Showing "; r; " Card Count Next Card "; n
PRINT "Press any Key to continue or type x to Stop.": INPUT a$
IF a$ = "x" OR a$ = "X" THEN GOTO GameOver
a$ = ""
NEXT
GameOver:
aunmatch = a  amatch
bunmatch = b  bmatch
cunmatch = c  cmatch
PRINT
PRINT "Total number of Cards : "; x
PRINT
PRINT "Card > 7 Number of times : "; a; " Matched: "; amatch; " Unmatched: "; aunmatch
PRINT "Card = 7 Number of times : "; b; " Matched: "; bmatch; " Unmatched: "; bunmatch
PRINT "Card < 7 Number of times : "; c; " Matched: "; cmatch; " Unmatched: "; cunmatch
CLOSE
END
=======
Note  The following similar Counts are displayed at the END of program.
Total number of Cards : 101
Card > 7 Number of times : 46 Matched: 8 Unmatched: 38
Card = 7 Number of times : 9 Matched: 2 Unmatched: 7
Card < 7 Number of times : 45 Matched: 2 Unmatched: 43
=======

The program I Posted the second time we discussed this
does what you need.
I changed the program to write a text file you can open in Notepad
or WordPad.
Output File Name is TextFileName = "C:\ZTaka01.txt"

Posted: Sun Oct 09, 2005 8:37 pm Post subject:

Hi ZeroTakenaka.
Here is the latest skeleton for you to use.
You need to use REM statements to document
your Changes.
Programs like this tend to "Evolve" and it is real easy
to lose your place if you have many copies around.
This should be close to what you are trying to accomplish.
Try different ways to "Count" the Next Card Number,
like adding 2 instead of 1 or subtracting 2 instead of 1
or use a Random Number for the Card Number showing,
like:
n = RND(r)  1 or n = RND(r) + 1
instead of
n = r  1 or n = r + 1
You will just have to change the variable "n" in different ways
until you find a good algorithm that works closest
to providing the best number of matches.
New Program:
=======
REM: Card Counting Analysis Program
REM: Program Written:
REM: 10092005 09:12 AM EDT
REM: Change Log:
REM: 10092005 08:12 PM EDT Add and print Total Counts for Match / Unmatch.
REM: 10052005 07:23 PM EDT Add Output File for Saved Results.
REM:
REM:
CLS
DEFINT AZ
a = 0
b = 0
c = 0
n = 0
amatch = 0
bmatch = 0
cmatch = 0
aunmatch = 0
bunmatch = 0
cunmatch = 0
TextFileName = "C:\ZTaka01.txt"
Open TextFileName For Output As #1
RANDOMIZE TIMER
FOR x = 1 TO 10000
r = INT(RND * 13) + 1
p = n
n = r
IF r > 7 THEN n = r  1: a = a + 1: IF p = n THEN amatch = amatch + 1
IF r = 7 THEN b = b + 1: IF p = n THEN bmatch = bmatch + 1
IF r < 7 THEN n = r + 1: c = c + 1: IF p = n THEN cmatch = cmatch + 1
Record = Record + 1
Result$ = "Record_" + Record +"Card Showing " + r + " Card Count Next Card " + n
PRINT #1,Result$
PRINT Result$
REM: Comment Now: PRINT "Card Showing "; r; " Card Count Next Card "; n
PRINT "Press any Key to continue or type x to Stop.": INPUT a$
IF a$ = "x" OR a$ = "X" THEN GOTO GameOver
a$ = ""
NEXT
GameOver:
aunmatch = a  amatch
bunmatch = b  bmatch
cunmatch = c  cmatch
PRINT "Total number of Cards : "; x
PRINT "Card > 7 Number of times : "; a; " Matched: "; amatch; " Unmatched: "; aunmatch
PRINT "Card = 7 Number of times : "; b; " Matched: "; bmatch; " Unmatched: "; bunmatch
PRINT "Card < 7 Number of times : "; c; " Matched: "; cmatch; " Unmatched: "; cunmatch
CLOSE
END
=======
Note  The following similar Counts are displayed at the END of program.
Total number of Cards : 101
Card > 7 Number of times : 46 Matched: 8 Unmatched: 38
Card = 7 Number of times : 9 Matched: 2 Unmatched: 7
Card < 7 Number of times : 45 Matched: 2 Unmatched: 43
=======

Best Regards,
Lewis Whaley
Ask an Expert Forum
Science Buddies
Lewis Whaley
Ask an Expert Forum
Science Buddies

 Former Expert
 Posts: 675
 Joined: Thu Feb 03, 2005 3:38 pm
Re: copy and paste
Hi shaukmio!
Yes, of course it's possible. And, in fact, it's the preferred method, so errors an exact copy is made, and errors are not introduced. In fact, I used above for your ID!
Yes, of course it's possible. And, in fact, it's the preferred method, so errors an exact copy is made, and errors are not introduced. In fact, I used above for your ID!
Cheers!
Dave
Dave

 Former Expert
 Posts: 675
 Joined: Thu Feb 03, 2005 3:38 pm
Re: copy and paste
Speaking of errors, it was a case of "the pot calling the kettle black." In my last post, I had an extra "errors." The correct text is:
Yes, of course it's possible. And, in fact, it's the preferred method, so an exact copy is made, and errors are not introduced. In fact, I used above for your ID!
P.S.: One really needs to proofread AND spell check!
Yes, of course it's possible. And, in fact, it's the preferred method, so an exact copy is made, and errors are not introduced. In fact, I used above for your ID!
P.S.: One really needs to proofread AND spell check!
Cheers!
Dave
Dave
Return to “Math & Computer Science Sponsored by Hyperion Solutions Corp”