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

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


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

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

Выпуск № 856
от 23.09.2007, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 483, Экспертов: 64
В номере:Вопросов: 4, Ответов: 9


Вопрос № 102373: Здравствуйте! Помогите пожалуйста...Не могу никак найти алгоритм сортировки методом квадратичной выборки...Не могли бы показать как сортировать(хотя бы простой одномерный массив)...Пожалуйста...Буду боагодарен......
Вопрос № 102377: Здравствуйте! У меня проблемы с трафиком и потому с поиском в инете мне приходиться ограничиваться емайлом и аськой. Ввиду чего прошу Вас выслать мне исходник программы подсчитывающей интернет трафик локально или подсказать ресурс на котором есть...
Вопрос № 102445: Здравстуйте, уважаемые. Пишу программу (MFC), которая должна использовать плагины dll (не обязательно MFC!). В плагинах будет часто повторяться одинаковый функционал, поэтому хотелось бы вынести набор функций отдельно (реализовать в главной прогр...
Вопрос № 102446: Здравствуйте, уважаемые эксперты! Приходится совершать много однообразных действий на разных компах, решил сделать программу для ускорения самых занудных, но в программировании чайник. Использую Borland C++ Builder 6, буду очень признателен за ответы...

Вопрос № 102.373
Здравствуйте!
Помогите пожалуйста...Не могу никак найти алгоритм сортировки методом квадратичной выборки...Не могли бы показать как сортировать(хотя бы простой одномерный массив)...Пожалуйста...Буду боагодарен...
Отправлен: 17.09.2007, 19:48
Вопрос задал: Лукьянчиков Дмитрий Сергеевич (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Boriss
Здравствуйте, Лукьянчиков Дмитрий Сергеевич!
Могу и сам написать, но зачем? Если много на эту тему написано? :))
Вот хорошая (паскалевская) ссылка:
http://www.pascal.hop.ru/cgi-bin/index.pl?0,11

---------
Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: mte
WWW: Программирование на Паскале
----
Ответ отправлен: 18.09.2007, 10:35
Оценка за ответ: 5

Отвечает: Sov
Здравствуйте, Лукьянчиков Дмитрий Сергеевич!
Описание метода
http://webdesign.tria.lv/tutorials/database/sort/sort_8.htm

Изначальный массив может быть несколько больше количества сортируемых элементов. Это сделано для удобства, чтобы количество элементов в группах было равным. Последняя группа, если необходимо дополняется фиктивными элементами. Далее все группы сортируются с помощью функции qsort из stdlib и выводятся в отсортированном виде. Строится список минимальных элементов из каждой группы и далее основной цикл.

Если убрать комментарий и закомментировать строки
for(int i=0;i<group;i++)
qsort((void *)(mas+i*kol_vo_el_v), kol_vo_el_v, sizeof(mas[0]), qsort_function);
...
for(int i=0;i<group;i++)
{
spisok[i]=mas[i*kol_vo_el_v];
mas[i*kol_vo_el_v]=60000;
}
То группы сортироваться не будут, получится классический вариант сортировки

Приложение:

Ответ отправил: Sov (статус: 7-ой класс)
Ответ отправлен: 18.09.2007, 10:48
Оценка за ответ: 5
Комментарий оценки:
Круто!!
Спасибо большое!

Отвечает: Терсков Сергей
Здравствуйте, Лукьянчиков Дмитрий Сергеевич!
Вариант решения вашей задачи смотрите в приложении... (Компилятор MS VS 2005)

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 19.09.2007, 05:39
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное!
Буду разбираться!


Вопрос № 102.377
Здравствуйте!
У меня проблемы с трафиком и потому с поиском в инете мне приходиться ограничиваться емайлом и аськой. Ввиду чего прошу Вас выслать мне исходник программы подсчитывающей интернет трафик локально или подсказать ресурс на котором есть этот исходник на языке си.
Отправлен: 17.09.2007, 20:31
Вопрос задал: KuchumHan (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Fenixk19
Здравствуйте, KuchumHan!
Есть хорошая библиотека - pcap(winpcap для windows). Она может быть использована для сниффинга пакетов, а также для мониторинга трафика. В документации к ней есть пример написания программы подсчета трафика. Можете воспользоваться им.

Приложение:

Ответ отправил: Fenixk19 (статус: 3-ий класс)
Ответ отправлен: 19.09.2007, 22:25


Вопрос № 102.445
Здравстуйте, уважаемые.
Пишу программу (MFC), которая должна использовать плагины dll (не обязательно MFC!). В плагинах будет часто повторяться одинаковый функционал, поэтому хотелось бы вынести набор функций отдельно (реализовать в главной программе). Собственно вопрос заключается в следущем: какими методами лучше предоставлять dll-ке функции, реализованые в клиенте? Например плагины могут сохранять какие-то данные, но хотелось бы это сделать централизовано, а не чтоб каждый по своему писал в свой отдельный файл. И таких функций будет не мало, поэтому просто их перечислять в параметрах функций dll тоже не хотелось бы.
Зарание спасибо.
Отправлен: 18.09.2007, 11:57
Вопрос задал: Sn8p
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Delph
Здравствуйте, Sn8p!

Есть такой вариант: пишете ещё одну DLL-ку (не плагин), в которой реализуется общая функциональность, а из плагинов эту DLL-ку подгружаете и используете. Ведь динамичаская библиотека лишь немногим отличается от обычной программы, и нет никаких запретов на вызов одной DLL-библиотеки из другой. Это, пожалуй, наиболее простой вариант. Возможно ещё экспортировать функции из обычного приложения в подключаемые библиотеки, но я не знаю, как это делается в Вашей среде (Visual C++, если не ошибаюсь?).
---------
Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: 9-ый класс)
Ответ отправлен: 18.09.2007, 12:09
Оценка за ответ: 4
Комментарий оценки:
Спасибо. О таком варианте я тоже думал. Но хотелось бы узнать, может кто-то еще как-то решал подобные задачи. (верно, использую Visual C++ 2005)

Отвечает: Aristos
Здравствуйте, Sn8p!

Можно вынести общий функционал в отдельную dll библиотеку. Тогда все плагины будут его использовать наравне с основной программой.
---------
нет ничего невозможного
Ответ отправил: Aristos (статус: 6-ой класс)
Ответ отправлен: 18.09.2007, 12:46
Оценка за ответ: 4
Комментарий оценки:
Спасибо. Такой вариант уже звучал. На данный момент пока единственный.

Отвечает: Решетник Д
Здравствуйте, Sn8p!
Есть еще вариант. Он немного некрасивый, но зато наглядный и простой:
Просто передавать указатель на функцию из программы в длл.
В программе например вызываете некую экспортируемую из длл функцию и передаете аргумент(ы) - указатели на функцию.
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 18.09.2007, 13:11
Оценка за ответ: 3
Комментарий оценки:
Спасибо. Но этот вариант описан в самом вопросе. Он бы подошел, если бы нужно было передать 1-2 указателя на функции, но их может быть много.


Вопрос № 102.446
Здравствуйте, уважаемые эксперты! Приходится совершать много однообразных действий на разных компах, решил сделать программу для ускорения самых занудных, но в программировании чайник. Использую Borland C++ Builder 6, буду очень признателен за ответы! Общая ситуация такая: по нажатию кнопки должно выполняться действие с файлом, имя и путь к которому берется из поля с кнопкой Обзор.
1. Открыть файл в той программе, которая ассоциирована с данным расширением. Можно ли открыть файл в какой-то определенной проге (например, на rtf стоит Word, а надо открыть его в WordPad)?
2. Запустить программу.
3. Скопировать/переместить/удалить файл или папку.
4. Добавить в реестр информацию из файла БЕЗ подтверждений.
Как это все организовать? Если есть статья или книга, где это описано, дайте ссылку. И еще - как сделать кнопки как в WinXP? Вроде для этого нужны дополнительные компоненты, где их можно найти и как установить? Где можно взять другие компоненты для смены оформления (бесплатные)?
Отправлен: 18.09.2007, 12:05
Вопрос задал: xBuzzee (статус: 8-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Решетник Д
Здравствуйте, xBuzzee!
1. Добавить в список библиотек (сверху, где написано uses>) библиотеку ShellApi
Добавьте кнопку на форму и нажмите два раза на ней (двойной клик). появится обработчик. в нем напишите один из вариантов:
а) ShellExecute(Handle, "open", "filename", NULL, NULL, 0);
//это запустит выпонит файл "filename", как в проводнике.
б) ShellExecute(Handle, "open", "c:...word.exe", "document path", NULL, 0);
//а это запустит ворд и откроет с его помощью файл "document path.
//вместо параметра c:..word.exe можно указать любую программа. для системных приложений полный путь писать необязательно
2. Смотрите предыдущий пример
3.Builder'a у меня сейчас нет, чтобы проверить примеры. для реализации 3-й задачи можно воспользоваться функцией SHFileOperation Единственный ее аргумент - структура SHFILEOPSTRUCT. для выполнения операций нужно ее создать (структуру) и заполнить. Тип операции (удалить, копировать, переместить) задается полем wFunc структуры. Варианты:
FO_MOVE = $0001;
FO_COPY = $0002;
FO_DELETE = $0003;
FO_RENAME = $0004;
4. Вообще это можно сделать используя первый ответ. Для этого нужно программу regedit запустить с параметром /s
5. В принципе есть есть много ссылок и книг. основные это: google.ru, msdn.com
6. Для того, чтобы ваша программа имела интерфейс в стиле, который активирован на данный момент в системе, нужно использовать манифест поищите в поисковике примеры. Там есть 2 варианта: создать еще один файл с манифестом и скомпилировать проект с дополнительным ресурсом... это для сведения, что искать.

---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 18.09.2007, 13:06
Оценка за ответ: 5
Комментарий оценки:
Спасибо, буду копать.

Отвечает: Aristos
Здравствуйте, xBuzzee!

1-2. Тут вам поможет функция ShellExecute. Она позволяет выполнять стандартные действия с файлами для пользователя.
Так откроет документ с пом. зарегистрированной программы:
ShellExecuteA(NULL, "open", "test.rtf", NULL, NULL, SW_SHOWNORMAL);
А так с помощью указанной. Возможно, потребуется указать полный путь до программы.
ShellExecuteA(NULL, "open", "wordpad.exe", "test.rtf", NULL, SW_SHOWNORMAL);
Запуск приложения на исполнение:
ShellExecuteA(NULL, "open", "test.exe", NULL, NULL, SW_SHOWNORMAL);

3. Для файлов функции - CopyFile (копирование), MoveFile (перемещение или переименование), DeleteFile (удаление). CreateDirectory - создание директории. RemoveDirectory - удаление директории.
С директориями чуть сложнее, поскольку удалить и переместить можно только пустую директорию. Поэтому сначало необходимо произвести действия над файлами. В приложении код для рекурсивного удаление директории со вложенными директориями.

BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);
BOOL MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName);
BOOL DeleteFile(LPCTSTR lpFileName);
BOOL RemoveDirectory(LPCTSTR lpPathName);
BOOL CreateDirectory(LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);

lpExistingFileName - путь до копируемого или перемещаемого файла.
lpNewFileName - новое расположение или имя файла.
bFailIfExists - при копировании перезаписывать ли файл по новому пути, если уже существует. При переименовании и/или перемещении файла с новым именем быть не должно.
lpFileName - имя файла или пустой директории при удалении. Read-only файлы так не удаляются. Для них сначало надо снять защиту от записи функцией SetFileAttributes.
lpPathName - имя и путь создаваемой или удаляемой директории.
lpSecurityAttributes - агрумент отвечающий за безопасность (если поддерживается файловой системой). В большинстве случаев можно спокойно передать NULL.

4. Функция RegLoadKey.
LONG RegLoadKey(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpFile);
hKey - раздел реестра - HKEY_LOCAL_MACHINE или HKEY_USERS. В разделы HKEY_CLASSES_ROOT и HKEY_CURRENT_USER этой функцией записать нельзя.
lpSubKey - базовый путь в реестре. Относительно него будут записываться ключи из файла. Можно указать NULL, если в файле полные пути в реестре.
lpFile - путь до reg-файла.

Приложение:

---------
нет ничего невозможного

Ответ отправил: Aristos (статус: 6-ой класс)
Ответ отправлен: 18.09.2007, 14:46
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо, исключительно четкий и понятный ответ! Жалко, не могу поставить 6.


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.60 от 22.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное