|
From what link?
I assumed the array elements were initially assigned to 100 based on the while statement's
expression.
Did I miss where you perhaps moved that closing curley bracket down (past where something in
the arrays actually gets changed?
Mark
|
|
|
|
|
|
Here's what I got from the link. This code will get stuck in the while loop.
What have you changed to make this work?
for(int c = 0; c < amountofGames[a][b]; c++)
{
randomMonth = 200;
randomDay = 200;
while(randomMonth == 200 || randomDay == 200 ||
teamOpponents[a][randomMonth][randomDay] != 100 ||
teamOpponents[b][randomMonth][randomDay] != 100)
{
randomMonth = rand()%6;
randomDay = rand()%31;
}
teamOpponents[a][randomMonth][randomDay] = b;
teamOpponents[b][randomMonth][randomDay] = a;
random = rand()%2;
if (random == 0)
{
home[a][randomMonth][randomDay] = 1;
home[b][randomMonth][randomDay] = 0;
}else
{
home[a][randomMonth][randomDay] = 0;
home[b][randomMonth][randomDay] = 1;
}
}
|
|
|
|
|
No, this code doesn't get stuck at all...it won't get stuck until I change
while(randomMonth == 200 || randomDay == 200 ||
teamOpponents[a][randomMonth][randomDay] != 100 ||
teamOpponents[b][randomMonth][randomDay] != 100)
to
while(randomMonth == 200 || randomDay == 200 ||
teamOpponents[a][randomMonth][randomDay] != 100 ||
teamOpponents[b][randomMonth][randomDay] != 100 ||
(randomMonth == 3 && randomMonth == 9))
I assigned the value 100 to all the parts of the array.
So, if the array value isn't 100 (which means that it HAS been altered), keep generating a randomMonth and randomDay until the value of a DIFFERENT teamOpponents[a][randomMonth][randomDay] is 100 (meaning it hasn't been altered.)
Sorry if this is confusing, but if you have time to read the entire script, you might understand.
Thanks for your help though, any other ideas about why adding one conditional will cause it to halt?
|
|
|
|
|
Ok let me get my head out of my... disregard the previous infinite loop stuff.
This is what I got from the link, right?
for(int c = 0; c < amountofGames[a][b]; c++)
{
randomMonth = 200;
randomDay = 200;
if(randomMonth == 3 && randomDay == 9)
randomMonth = rand()%6;
randomDay = rand()%31;
while(randomMonth == 200 || randomDay == 200 ||
teamOpponents[a][randomMonth][randomDay] != 100 ||
teamOpponents[b][randomMonth][randomDay] != 100)
{
randomMonth = rand()%6;
randomDay = rand()%31;
}
if(randomMonth == 3 && randomDay == 9)
randomMonth = rand()%6;
randomDay = rand()%31;
teamOpponents[a][randomMonth][randomDay] = b;
teamOpponents[b][randomMonth][randomDay] = a;
random = rand()%2;
if (random == 0)
{
home[a][randomMonth][randomDay] = 1;
home[b][randomMonth][randomDay] = 0;
}else
{
home[a][randomMonth][randomDay] = 0;
home[b][randomMonth][randomDay] = 1;
}
}
|
|
|
|
|
Yes, but the code between the two // works (doesn't halt) and the two // fails (halts) don't check again to see if the value in the teamOpponents array is 100...
I want the script to be this, but this doesn't work unless I take out the ||(randomMonth == 3 & randomDay == 9) part:
for(int c = 0; c < amountofGames[a][b]; c++)<br />
{<br />
do<br />
{<br />
randomMonth = rand()%6;<br />
randomDay = rand()%31;<br />
}<br />
while(teamOpponents[a][randomMonth][randomDay] != 100 ||<br />
teamOpponents[b][randomMonth][randomDay] != 100 ||<br />
(randomMonth == 3 & randomDay == 9))<br />
<br />
<br />
teamOpponents[a][randomMonth][randomDay] = b;<br />
teamOpponents[b][randomMonth][randomDay] = a;<br />
<br />
random = rand()%2;<br />
<br />
if (random == 0)<br />
{<br />
home[a][randomMonth][randomDay] = 1;<br />
home[b][randomMonth][randomDay] = 0;<br />
}else<br />
{<br />
home[a][randomMonth][randomDay] = 0;<br />
home[b][randomMonth][randomDay] = 1; <br />
}<br />
<br />
}
-- modified at 17:48 Thursday 25th January, 2007
|
|
|
|
|
Try changing
while(teamOpponents[a][randomMonth][randomDay] != 100 ||
teamOpponents[b][randomMonth][randomDay] != 100 ||
(randomMonth == 3 & randomDay == 9))
to
while(teamOpponents[a][randomMonth][randomDay] != 100 ||
teamOpponents[b][randomMonth][randomDay] != 100 ||
(randomMonth == 3 && randomDay == 9))
|
|
|
|
|
Sorry, I meant &&, but neither & nor && works...
...could you try compiling it yourself to see how it works? Maybe that way you could help me better...
...thanks for all your effort though
|
|
|
|
|
I don't have the initialization code.
It will take longer and longer to find uninitialized spots in the arrays.
Are you sure it's not just grinding away waiting to hit the right random numbers?
Mark
|
|
|
|
|
What do you mean by initialization?
And I posted all the code that I'm using in the link.
Yes, the program keeps running until it hits the right random number, but since the computer can select 162 days out of 183 games (it works fine), I doubt that the computer can't select 162 days out of 182 days...
If you have time, could you look over the entire code?
|
|
|
|
|
I ran your code and it doesn't halt anywhere.
Mark
|
|
|
|
|
Ok I made the change. It's indeed stuck in the while loop. I have one of my 4 processors
grinding away on it (CPU pegged at 25% LOL) while I try to figure out why it never exits
Mark
|
|
|
|
|
Do you know any way of figuring out what's wrong with it? If you get it fixed, thanks so much!!!!
|
|
|
|
|
Something's wrong with the outer loops.
When it gets to a==22 b==29 c==4 there's no more pairs where both amountofGames[a][x][x] and
amountofGames[b][x][x] are both 100.
Are you sure this is correct?
for(int a = 0; a < 30; a++)
{
for(int b = (a+1); b < 30; b++)
{
for(int c = 0; c < amountofGames[a][b]; c++) {
|
|
|
|
|
Yeah, now, I finally think it's mathematically impossible...any ideas to make it possible?
Maybe I'll try to group games together for 2-game, 3-game series instead...maybe that'll work better.
But thanks for all your work...
...but if you think of any better ideas, tell me.
|
|
|
|
|
compmaniac wrote: I'm trying to create a program that will, in a 30-team league, assign each team to play 6 times each against 17 teams, and 5 times each against 12 teams.
With each team playing a total of 162 games?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Thanks everybody for your help. I've already figured out a way to get this working.
|
|
|
|
|
I'm doing a MFC Application from using CFormView, I want to create an accelerator to call a dialog. I have tried to add it in but i cannot get it work i was wondering could anyone help me with this. I have also tried KeyDown but and i could get it to work in CView but not in CFormView so i scrapped that idea so now i am back on to Accelerators
...so if anyone knows how i can add an accelerator for this please help, thanking you in advance, Jenn
|
|
|
|
|
What if you put the keydown processing in the CMainFrame ?
It might not have shown up in the CFormView, since the CFormView tries to act like a dialog tmepalte host, and since there was nothing to accept the keystrokes (or there was and it ate all of them), no KeyDown handling occurred.
I have had pretty good results making 'pseudo-accelerators' or 'hotkey-like' processing in CMainFrame.
|
|
|
|
|
When i did it i put it in the view class so i'll give it a go cheers... I'll let you know how i get on, thanks again for your help!;)
|
|
|
|
|
Hi just wanted to let you know how i got on with all that. Not too good, no matter what i tried i couldn't get the accelerator to work so i decided to put it as a menu item and that calls the dialog.
Thanks for your help, much appreciated.
JennK
|
|
|
|
|
So, I need to run dmake.exe and his brothers in command window. Want to launch from external program (mine), so I'll receive output from that window and will filter it.
Something may print out. Now, once I launch in ::ShellExceute like "cmd.exe dmake" it will popup DOS window, correct? I do not want it. Thanks.
|
|
|
|
|
Will this[^] article help?
/ravi
|
|
|
|
|
Thank you! Very useful. Exactly what I was looking for
|
|
|
|
|