Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 665
от 12.02.2007, 06:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 469, Экспертов: 61
В номере:Вопросов: 3, Ответов: 7


Вопрос № 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;

STARTUPINFO st;
ZeroMemory(&st,sizeof(st));
st.cb = sizeof(st);
// разрешаем указывать параметр st.wShowWindow
st.dwFlags = STARTF_USESHOWWINDOW;
// задаем visibility
st.wShowWindow = visibility;

// флаги создания
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);

LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf, 0, NULL
);

// добавляем текст сообщения
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'ях работает следующее(может еще где-нибудь):

HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );
Ответ отправил: Fenixk19 (статус: 3-ий класс)
Ответ отправлен: 11.02.2007, 12:35


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.44 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное