Вопрос № 74365: Доброе время суток, уважаемые эксперты.
Никогда не думал, что решусь на подобный шаг в решении проблемы, но другого выбора - нэтъ. Очень прошу Вас помочь, ибо как говорится, горю.
Излагаю ситуацию.
Задача.
Совмещение ломаных. Две...Вопрос № 74447: Здраствуйте эксперты.
Кто может подсказать как из типа IPicture m_IPicture; перегнать в тип CBitmap m_CBitmap; и обратно....Вопрос № 74508: Привет эксперты !!!
Короче мне тут "Tek" ответил что можно CMD сделать не видимой вот >>> http://rusfaq.ru/?Step=info&Action=Question&ID=74007
Да я использую функцию main(). Но мне не нужно не чего водить в консоль, она про...
Вопрос № 74.365
Доброе время суток, уважаемые эксперты.
Никогда не думал, что решусь на подобный шаг в решении проблемы, но другого выбора - нэтъ. Очень прошу Вас помочь, ибо как говорится, горю.
Излагаю ситуацию.
Задача.
Совмещение ломаных. Две ломаные построены по ребрам сеточной области с целочисленными координатами. Требуется составить алгоритм—программу проверки совпадения двух ломаных, составленных из отрезков, с точностью до параллельного переноса и поворота на 90°, 180°, 270°. Исходные данные — число отрезков ломаных и значения координат их концов — определяются в текстовом файле. Выходной файл результатов должен содержать признак 1, если ломаные совпадают, и 0 — в противном случае.
Пример файла исходных данных:
4 — количество отрезков первой ломаной
0 0 1 0 3 0 2 0 1 0 2 0 3 0 3 1
2 — количество отрезков второй ломаной
1 1 1 4 0 4 1 4
Пример файла результатов:
1 — ломаные совпадают.
Нужно реализовать этот немудренный проэкт на любом доступном языке программирования. Желательно HTML.
Всем откликнувшимся заранее огромное спасибо.
Отправлен: 06.02.2007, 10:19
Вопрос задал: Kitaynik (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 8)
Отвечает: Igor_
Здравствуйте, Kitaynik!
Не совсем понятно, каким образом задаются координаты в примере..
4 — количество отрезков первой ломаной
0 0 1 0 3 0 2 0 1 0 2 0 3 0 3 1
Как у нас ломанная задается? Координатами точек?
Если у нас 2 координаты точки (x,y), то 4 отрезка ни как не получется..
Но, это в общем, по сути:
Я бы сделал следующим образом:
- исходная ломанная преобразуется в ломанную, где минимизировано количество отрезков (т.е. отрезки, которые могут составить прямую - сливаются в один)
вход: (1,1)(2,1)(3,1)(5,5) => (1,1)(3,1)(5,5)
- Делаем перенос системы координат ломаной так, чтобы ее первый отрезок лежал на оси X (либо на любой другой оси, главное чтобы на одной и той же :) )
- после чего можно просто сравнивать одну ломанную с другой по точкам. Если все точки равны, значит и ломанные равны.
Ответ отправил: Igor_ (статус: 1-ый класс)
Ответ отправлен: 06.02.2007, 11:26 Оценка за ответ: 5 Комментарий оценки: Визуально себе это представил - понравилось. Единственное что вызвало недопонимание - так это процесс переноса системы координат. Точнее сама реализацию. В любом случае - большое спасибо за дельный совет. На данный момент информации предостаточно. Теперь обсужу все это с преподавателем, с чего так сказать начать практически реализовать задание. Еще раз
всем спасибо.
Вопрос № 74.447
Здраствуйте эксперты.
Кто может подсказать как из типа IPicture m_IPicture; перегнать в тип CBitmap m_CBitmap; и обратно.
Отправлен: 06.02.2007, 18:10
Вопрос задал: Bushmen (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: ramok
Здравствуйте, Bushmen!
попробуйте примерно так:
попустим у нас
IPicture *m_IPicture;
CBitmap *m_CBitmap;
===
OLE_HANDLE hPic;
m_IPicture->get_Handle(&hPic);
CBitmap *m_CBitmap = CBitmap::FromHandle((HBITMAP)hPic);
Ответ отправил: ramok (статус: Студент)
Ответ отправлен: 06.02.2007, 19:02 Оценка за ответ: 5
Вопрос № 74.508
Привет эксперты !!!
Короче мне тут "Tek" ответил что можно CMD сделать не видимой вот >>> http://rusfaq.ru/?Step=info&Action=Question&ID=74007
Да я использую функцию main(). Но мне не нужно не чего водить в консоль, она просто должна работать и её не должно быть видно.
Как это можно сделать ? помогите ребятки !!!
Отправлен: 07.02.2007, 01:37
Вопрос задал: NARCOMAN (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: estiGi
Здравствуйте, NARCOMAN!
Что то я не заметил, чтобы вам там ответили, что консоль можно сделать невидимой. Вообще не понятно, зачем вам она нужна, если ввод/вывод вас не интересует. Если нужна программа без окна, то делайте win-окно, как вам уже советовали.
Если уж сильно-сильно по каким то причинам нужна невидимая консоль, то есть 2 выхода.
1. Создать консоль и сразу ее программно спрятать. Но она все равно успеет показаться где-то на полсекунды. Прячется она вот так:
ShowWindow (GetConsoleWindow (), SW_HIDE);
2. Запускать свою консоль с помощью другой программы, через CreateProcess с параметром dwCreationFlags = CREATE_NO_WINDOW. Насколько я знаю, Винду нельзя "попросить" запустить приложение с таким флагом, т.е. нужно запускать самому, вручную. Для этого можно использовать невидимое win-окно :)))
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 07.02.2007, 02:25
Отвечает: Igor_
Здравствуйте, NARCOMAN!
Может быть поможет такая функция (рабочая, я ее использую):
PROCESS_INFORMATION FileUtils::creProcess(AnsiString path, bool visibility, bool newConsole)
Параметры:
- path - программа, которую нужно запустить
- visibility - нужно ли показывать консоль
- newConsole - нужно ли создавать новую консоль
Пример использования - ниже, фунция FileUtils::WinExecAndWait(...)
А теперь, собственно, сама функция:
//! Создаем процесс - используется функциями WinExecAndWait, если не получилось
//! то возбуждаем исключение.
// static
PROCESS_INFORMATION FileUtils::creProcess(AnsiString path, bool visibility, bool newConsole)
{
PROCESS_INFORMATION pi;
// флаги создания
DWORD dwCreationFlags = 0;
if (newConsole){
dwCreationFlags = dwCreationFlags | CREATE_NEW_CONSOLE;
}
if (false == CreateProcess(
NULL, // pointer to name of executable module
path.c_str(), // указатель командной строки
NULL, // указатель на процесс атрибутов безопасности
NULL, // указатель на поток атрибутов безопасности
false, // флаг родительского обработчика
dwCreationFlags, // флаги создания
NULL, // указатель на новую среду процесса
NULL, // указатель на имя текущей директории
&st, // указатель на STARTUPINFO
&pi)) // указатель на PROCESS_INF
{
AnsiString sErr = "FileUtils::WinExecAndWait(): Can't run the process - " + path + "
";
("Ошибка при запуска процесса - : " + path);
// добавляем текст сообщения
sErr += (char*)(lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
throw Exception(sErr);
}
else {
return pi;
}
}
// Запуск приложения с ожиданием его завершения.
int FileUtils::WinExecAndWait(AnsiString path, bool visibility, bool newConsole/* = true*/)
{
unsigned long result;
// создаем процесс, если не получится, то будет исключение
PROCESS_INFORMATION pi = creProcess(path, visibility, newConsole);
// ждем завершения процесса, и при этом время от времени (0.3 c) обновляем свое приложение
while (WAIT_TIMEOUT == WaitForSingleObject(pi.hProcess, 300)) {
Application->ProcessMessages();
}
// вертаем результат
GetExitCodeProcess(pi.hProcess, &result);
return result;
}
Ответ отправил: Igor_ (статус: 1-ый класс)
Ответ отправлен: 07.02.2007, 10:03
Отвечает: Tamashev Denis M
Здравствуйте, NARCOMAN!
C++ глазами хакера тебе в помошь скажу только что нужно заюзать...
FindWindow
SendMessage =)
Вроде так в проблему я не вникал =
Если что пиши на Zako3@mail.ru помогу...
Ответ отправил: Tamashev Denis M (статус: 3-ий класс)
Ответ отправлен: 07.02.2007, 10:34
Отвечает: kool
Здравствуйте, NARCOMAN!
Создай проект как пустое "Приложение Win32"
и используй вместо main - WinMain().
(см. документацию по ней (MSDN))
Удачи!
--------- I am.
Ответ отправил: kool (статус: 7-ой класс)
Ответ отправлен: 07.02.2007, 12:46
Отвечает: Fenixk19
Здравствуйте, NARCOMAN!
В XP'ях работает следующее(может еще где-нибудь):