|
OK, thanks to all of the great feedback, I have a better understanding about recursion.
I am now attempting to apply it and I have come across a problem that I can't seem to pinpoint.
I have written the "eight queens" program, but for some reason, I get an infinite loop. I think my base case is ok. Can someone help me figure out what I am doing wrong here?
Thanks in advance,
Eric
<br />
#include <iostream><br />
<br />
using namespace std;<br />
<br />
<br />
const int BOARD_SIZE = 8;<br />
<br />
void fillBoard( int [], int, int );<br />
bool noConflict( int [], int, int );<br />
void printBoard( int [], int );<br />
<br />
<br />
int main()<br />
{<br />
int chessboard[ BOARD_SIZE ];
int column = 0; <br />
int count = 0;
<br />
fillBoard( chessboard, column, count );
<br />
return 0;
}
<br />
<br />
void fillBoard( int board[ BOARD_SIZE ], int c, int cnt )<br />
{<br />
for( int r = 0; r <= 7; r ++ )
{<br />
board[ c ] = r;
<br />
<br />
if( noConflict( board, r, c ) )
{<br />
if( c == 7 )
{<br />
printBoard( board, cnt);
}<br />
<br />
else <br />
{<br />
fillBoard( board, c + 1, cnt );
}<br />
}<br />
}<br />
}
<br />
<br />
bool noConflict( int board[ BOARD_SIZE ], int r, int c )<br />
{<br />
for( int col = c - 1; col >= 0; col-- )
{<br />
if( board[ col ] == r
|| board[ col ] == r + c - col
|| board[ col ] == r + col - c )
{<br />
return false;
}<br />
else<br />
{<br />
return true;
}<br />
}<br />
return true;
}
<br />
<br />
void printBoard( int board [ BOARD_SIZE ], int cnt )<br />
{<br />
cout << "Count = " << ++cnt << endl;
<br />
for( int r = 0; r <= 7; r++ )
{<br />
for( int c = 0; c <= 7; c++ )
{<br />
if( board[ c ] == r )
{ <br />
cout << "Q ";
}<br />
<br />
else<br />
{<br />
cout << "- ";
}<br />
}<br />
cout << endl;<br />
}<br />
cout << endl;<br />
}
<br />
|
|
|
|
|
Hello everyone,
I'm writing a simple class to handle FTP SEND of a file from a WinCE 4.2 box. I'm having some trouble with the FtpPutFile call. I've tried several FTP servers using a valid username & password and get the same error every time.
InternetOpen succeeds, InternetConnect succeeds, FtpPutFile returns FALSE, GetLastError returns 12018.
The error message 12018 is defined in WinInet.h as follows
#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE 12018
The type of handle supplied is incorrect for this operation.
Any input is greatly appreciated!
<br />
void CWinInetTestDlg::OnPut() <br />
{<br />
DWORD err = 0;<br />
CString str;<br />
<br />
<br />
HINTERNET hInternet = 0;<br />
<br />
<br />
LPCTSTR agent = _T("FTP");<br />
DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG;<br />
LPCTSTR proxy = 0;<br />
LPCTSTR bypass = 0;<br />
DWORD flags = 0;<br />
<br />
<br />
LPCTSTR server = _T("X.X.X.X");<br />
INTERNET_PORT port = INTERNET_DEFAULT_FTP_PORT;<br />
LPCTSTR user = _T("user_name");<br />
LPCTSTR pass = _T("password");<br />
DWORD service = INTERNET_SERVICE_FTP;<br />
DWORD context = 0;<br />
<br />
<br />
LPCTSTR szLocalFile = _T("\\TEST.TXT");<br />
LPCTSTR szRemoteFile = _T("\\TEST.TXT");<br />
<br />
<br />
<br />
hInternet = InternetOpen(agent, dwAccessType, proxy, bypass, flags);<br />
if (hInternet) {<br />
<br />
flags = 0;<br />
if (InternetConnect(<br />
hInternet, <br />
server, <br />
port, <br />
user, <br />
pass, <br />
service, <br />
flags, <br />
context)) {<br />
<br />
flags = INTERNET_FLAG_TRANSFER_BINARY;<br />
<br />
if ( FtpPutFile(<br />
hInternet, <br />
szLocalFile, <br />
szRemoteFile, <br />
flags, <br />
context) ) {<br />
<br />
MessageBox(<br />
_T("FtpPutFile Success!"), <br />
_T("WinInet FTP Test"),<br />
MB_OK);<br />
<br />
}else{<br />
err = GetLastError();<br />
str.Format(_T("FtpPutFile Error: %d"), err);<br />
MessageBox(str, _T("WinInet FTP Test"),MB_OK);<br />
}
<br />
}else{<br />
err = GetLastError();<br />
str.Format(_T("InternetConnect Error: %d"), err);<br />
MessageBox(str, _T("WinInet FTP Test"),MB_OK);<br />
}
<br />
if (!InternetCloseHandle(hInternet)) {<br />
err = GetLastError();<br />
str.Format(_T("Error %d"), err);<br />
MessageBox(str, _T("WinInet FTP Test"),MB_OK);<br />
}
<br />
}else{<br />
err = GetLastError();<br />
str.Format(_T("InternetOpen Failed with code %d"), err);<br />
MessageBox(str, _T("WinInet FTP Test"),MB_OK);<br />
}
<br />
}
-Ryan Bradley
|
|
|
|
|
Two problems. 1) InternetConnect() return a HINTERNET but you're treating it like it returns a bool . 2) You're passing the wrong handle to FtpPutFile() , you need to pass it the handle returned by InternetConnect() .
--Mike--
Visual C++ MVP
LINKS~! Ericahist | NEW!! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ
|
|
|
|
|
Outstanding! Thank you!
Ryan Bradley
Systems Engineer
Industrial Networks
|
|
|
|
|
Hi,
In release mode , the project is searching for MFC42UD.lib file.
Any idea why and where we have to chnge the project settings, because to my knowledge somebody tampered with the settings
cheers,
Super
------------------------------------------
Too much of good is bad,mix some evil in it
|
|
|
|
|
Dont worry.
I figured it myself.
Somebody has changed the release setting to debug settings.
cheers,
Super
------------------------------------------
Too much of good is bad,mix some evil in it
|
|
|
|
|
Hello everyone!
Am I reading my file correctly?
for (int i = 0; i <= HEIGHT/32; i++)<br />
{<br />
char * curLine = new char[WIDTH/32];<br />
f[x]->getline(curLine, WIDTH/32);<br />
<br />
for (int j = 0; j <= WIDTH/32; j++)<br />
{<br />
<br />
char v = curLine[j];<br />
<br />
if (!f[x]->good())<br />
return;<br />
<br />
if (x == 0)<br />
fputc(v, outputz);
I noticed that if I open the file in Notepad, the character counter says 16, but if I count the chars with my fingers, I only get 15!
I want to get each line, and then write each character in that line to another file, individually. What's the right way of doing it? Much thanks!
PS: I've been struggling with this program for more than 1 month... I suck...
Lord Kixdemp
www.SulfurMidis.com
www.SulfurSoft.tk
[ftp://][http://][hotline://]tsfc.ath.cx
|
|
|
|
|
Update! I got the main problem away (NULL characters showing up at end of each line)
But now, the last line doesn't get written... Here's the updated code:
for (int i = 0; i <= HEIGHT/32; i++)<br />
{<br />
char * curLine = new char[WIDTH/32];<br />
f[x]->getline(curLine, WIDTH/32);<br />
<br />
for (int j = 0; j < WIDTH/32-1; j++)<br />
{<br />
<br />
char v = curLine[j];<br />
<br />
if (!f[x]->good())<br />
return;<br />
<br />
if (x == 0)<br />
fputc(v, outputz);
Much thanks!
Lord Kixdemp
www.SulfurMidis.com
www.SulfurSoft.tk
[ftp://][http://][hotline://]tsfc.ath.cx
|
|
|
|
|
hi,
i'm new to c++, still learning it. i am trying to learn some basic registry functions for use in other programs i may make. i have a subkey: currentuser/software/name/program
inside "program" i have a few values (all strings). how can i get the list of all values in the subkey?
i'm looking for the simplest possible way.RegCloseKey(hKey);
thanks in advance,
sam kline
-- modified at 18:46 Friday 17th February, 2006
|
|
|
|
|
|
ok, i've tried this code, but i cant figure out how to display 'cchValue'. any ideas?
thanks in advance,
sam kline
TCHAR achKey[MAX_KEY_LENGTH];
DWORD cbName;
TCHAR achClass[MAX_PATH] = TEXT("");
DWORD cchClassName = MAX_PATH;
DWORD cSubKeys=0;
DWORD cbMaxSubKey;
DWORD cchMaxClass;
DWORD cValues;
DWORD cchMaxValue;
DWORD cbMaxValueData;
DWORD cbSecurityDescriptor;
FILETIME ftLastWriteTime;
HKEY hKey;
DWORD i, retCode;
char temp[9999];
TCHAR achValue[MAX_VALUE_NAME];
DWORD cchValue = MAX_VALUE_NAME;
RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\name\\something"), 0, KEY_QUERY_VALUE, &hKey);
retCode = RegQueryInfoKey(
hKey,
achClass,
&cchClassName,
NULL,
&cSubKeys,
&cbMaxSubKey,
&cchMaxClass,
&cValues,
&cchMaxValue,
&cbMaxValueData,
&cbSecurityDescriptor,
&ftLastWriteTime);
for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++)
{
cchValue = MAX_VALUE_NAME;
achValue[0] = '\0';
retCode = RegEnumValue(hKey, i, achValue, &cchValue, NULL, NULL, NULL, NULL);
if (retCode == ERROR_SUCCESS )
{
sprintf(temp, "%d: %s - ", i, achValue);
somelistbox.AddString(temp);
}
}
RegCloseKey(hKey);
-- modified at 10:55 Saturday 18th February, 2006
|
|
|
|
|
You can use this function:
Here you have to pass the valueName to access it's value.
Specify the Root key where your subkey is located
CString YourClassName::GetValueFromRegistry(CString regValuName)
{
char lszValue[255];
CString str ;
HKEY hKey;
LONG returnStatus;
DWORD dwType=REG_SZ;
DWORD dwSize=255;
returnStatus = RegOpenKeyEx(HKEY_CURRENT_USER, "currentuser\\software\\name\\program", 0L, KEY_ALL_ACCESS, &hKey);
if (returnStatus == ERROR_SUCCESS)
{
returnStatus = RegQueryValueEx(hKey,regValuName, NULL, &dwType,(LPBYTE)&lszValue, &dwSize);
if(returnStatus == ERROR_SUCCESS)
{
str = (LPCTSTR)lszValue;
}
else
{
str="";
}
}
else
{
str="";
}
RegCloseKey(hKey);
return str;
}
Cheers
"Peace of mind through Technology"
|
|
|
|
|
oh, i just realized that that code worked!
thanks a lot!
sam kline
|
|
|
|
|
Hi everybody,
I want to include few external DLL files into my executable file as a static Library.
Microsoft Visual C++ can do that with MFC,my question is: How can I do to insert external DLL's files?
I hope any body can help me!
Thanks
aLx
aLx
|
|
|
|
|
@LX wrote: I want to include few external DLL files into my executable file as a static Library.
That is not possible.
John
|
|
|
|
|
|
OK, let the world be more "friendly" to this guy (or gal?)... If you want to do that with say MYDLL.DLL, then you must locate (or steal or beg or borrow or build) the .LIB file MYDLL.LIB. If you have the source code of MYDLL.DLL, then building the LIB file is a piece of cake. After you get the LIB file, link it statically by adding it to the Link tab of Project settings (do not forget to add its path to the Library path list in Tools --> Options --> Directories).
If you do not have (or cannot get) the LIB file, you cannot do it.
Koushik Biswas
|
|
|
|
|
Hi. Can anyone tell me how I can establish the "Class Name" for my application's window?
I want to use the FindWindow API that looks like this: LONG FindWindowA(class, title) .
What I want to do for my C++ app, MyCPPApp.exe, is establish the "Class Name" to be something like "JohnsApp".
I have used Spy++ to look at other Class Names,
XLMAIN - MS Excel
OpusApp - Word97
...
I also want to use FindWindowA( ) to send messages between two applications.
Thanks,
Johnny
|
|
|
|
|
john john mackey wrote: I have used Spy++ to look at other Class Names...
Ok, so what does it indicate for your application's window?
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
It gives some generic name like,
AfxFrameOrView
Since I don't understand, it could be possible that there may exist other windows of this same class (that I don't want to attach to.)
So, I still would like to be able to set my own Class Name for my application/window.
Thanks,
Johnny
|
|
|
|
|
So just use AfxRegisterClass() to register a new class name of your liking.
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
Thanks! I'll look into this function.
Best regards,
Johnny
|
|
|
|
|
Sending messages between two applications or instances of the same application can be tricky business, so be warned. Here are a few ideas:
a)
You could use FindWindow() with a NULL class name. That will return the handle of any window that has the specified Window name. This is only useful if you know your window name is unique to your application and your application does not change the window title, for example to include the name of the file currently open.
b)
You could use the GetClassName() API function to obtain the class name at runtime. I notice with MFC, though, that it creates a new window class for every instance of the application. That's one serious bummer - it means you cannot predict what the class name of another instance of the same application will be.
c)
The easiest way I can think of to send messages between applications is to first register a unique message with ::RegisterWindowMessage() . You then use SendMessage() with a HWND value of HWND_BROADCAST to send the message to every top-level window in the system, as in:
<br />
UINT uMyOwnWndMessage = ::RegisterWindowMessage(_T("SomeSillyMessage"));<br />
...<br />
::SendMessage(HWND_BROADCAST, uMyOwnWndMessage, 42, 0x4A);<br />
You register the message at the very beginning of your application. If another instance has already registered the message you will get the same message ID value. Obviously you should pick a unique message "name", otherwise the chance exists that another application may have already registered a message with the same name and the end result will be chaos.
Be careful with sending messages between applications, though. You cannot send messages containing pointers. That includes string pointers (LPCTSTR and LPTSTR). The second instance will receive the message but the pointer will be meaningless outside the context of the instance that created the pointer. Sending window handles should be OK but be careful with child windows.
You could also use the WM_COPYDATA message to send string data (and other stuff) accross, but then again you will need to know HWND of the destination window ... and you still have the pointer issue.
d)
You could register you own window class with ::RegisterClass() and create a hidden window using this class that can serve as a type of "proxy" for your messages. Not all too easy to implement, though.
e)
Consider using a more "controlled" form of IPC, like shared memory or a named pipe to communicate between instances of an app.
– Johannes de Rek
|
|
|
|
|
Example: Key in 234 ==> two hundred and thirty four.
key in 1000==> one thousand.
key in 2040==> two thousand and forty.
|
|
|
|
|
There are dozens of examples on the Internet of how to convert money (or currency) to words. Here is one.
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|