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