Уважаемые эксперты, а можноли программно ВКЛЮЧИТЬ компьютер, если у меня BIOS поддерживает опцию включения по таймеру? Но хотелось бы включать эту опцию из под Windows'а.
Добрый день, =FeanaR=! Программно - хз. А в биосе (если у тебя таковой), можно настроить, чтоб включался в определенный момент времени. У моего знакомого такой "будильник". Ответ отправлен: 12.06.2003, 18:09 Отправитель: Zensor
Вопрос № 730
Здравствуйте, уважаемые эксперты ! Не могу сообразить, как сделать следующее: Имеется массив Mix: array [1..MaxNumber] of Byte, необходимо перемешать элементы массива в случайном порядке, причём этих элементов может быть очень много (до 10000). Подскажите пожалуйста, как это можно сделать быстро? Буду признателен за пример. Заранее спасибо!
Приветствую Вас, Alex! Вот какая мысль пришла в голову: 1. Создаем массив из 256 записей: type t1 = record num : byte; count : integer; end; 2. Считаем, сколько раз в исходном массиве попадаются разные значения (т.е. например, значение "1" попалось 10 раз, 2 - 11 и т.д.) и заносим в массив из 256 записей как поле count. 3. проходим массив и удаляем из него все элементы, count которых = 0 со сдвигом остальных элементов вниз. При этом общее количество элементов уменьшается. 4. создаем результирующий массив из 10000 элементов (как ты описал в вопросе). 5. выполняем 10000 раз сл. цикл: 6. получаем случайное число в диапазоне от 1 до количества элементов в массиве записей (там, где было изначально 256). 7. заносим в очередной элемент результирующего массива значение num записи, номер которой укажет случайное число (этап
6). 8. уменьшаем на 1 поле count записи. Если оно станет равно 0, удаляем запись (общее количество записей при этом уменьшается на 1). 9. конец цикла В общем, этот метод основан на том, что у тебя элементы типа byte, а byte может иметь всего 256 различных значений.
* EMan1.2: ---===*** The Eternal Power ***===---
Ответ отправлен: 12.06.2003, 16:52 Отправитель: Bob Johnson Отвечает Артём Шегеда
Приветствую Вас, Alex!
В приложении программа на Delphi с ассемблерными вставками. Каких-либо тормозов я не заметил. Это экстенсивный способ решения твоей проблемы (за счёт оптимизации кода) - наверняка существуют более удачные алгоритмы. Поварьируй длиной цикла перемешивания и сравни результаты.
Приложение: Ответ отправлен: 12.06.2003, 16:04 Отправитель: Артём Шегеда Отвечает vitya
Добрый день, Alex!
Предлагаю топорный алгоритм for i:= 1 to 10000 do {это число должно регулироваться. Насколько более хороший хочешь разброс настолько больше оно должно быть.} begin i1 := random(10000) + 1; i2 := random(10000) + 1; swap(i1, i2); end; плюс наверное надо как-нибудь разбросать крайние элементы. Например случайное число можно генерировать от 0 до 20000, а потом i1 := (random(20000) shr 1) + 1; точно так же поступить с i2. Ответ отправлен: 12.06.2003, 14:53 Отправитель: vitya
Вопрос № 731
Hi, эксперты. Вот тут два вопроса возникло, надеюсь на вашу помощь. 1) Есть некая программа, врема загрузки которой занимает довольно длительное время. Как сделать так, чтобы на время загрузки программы выскакивало какое-либо окошко (надписью что прога грузиться и т.д.) а после появления главной формы убиралось. Я пробовал делать главным окном то, которое с сообщением о загрузке, но ничего не получается - оно все равно появляется уже тогда, когда все загружено. 2) Запускается прога, работает - все ОК. Но после выхода из проги в памяти остается висеть процесс 'прога.ехе' и отжирает немалые ресурсы. Почему такое проиходит и как с этим бороться? Заранее спасибо.
Приветствую Вас, Nick! Такая форма, которая поялвяется перед основной прогой в народе называется SplashScreen. Добавляешь в прогу форму, называешь ее, например, frmSplash. Открываешь окно кода проекта и пишешь между Application.Initialize; и созданием главной формы. frmSplash:=TfrmSplash.Create(Application); frmSplash.Show; frmSplash.Update; А после создания главной формы: frmSplash.Hide; frmSplash.Free; Что-то типа смотри в приложении.
Приложение: Ответ отправлен: 13.06.2003, 11:54 Отправитель: X-RayMan Отвечает Zensor
Здравствуйте, Nick! 1. делай главным, к примеру form1, которая показывает какой- нибудь рисунок. и в событии form1.OnShow грузить вторую форму, только form2.visible:=false; И после того, как во второй форме всё, что нужно просчитается(считать можно OnLoad): form1.close; form2.visible:=true; 2. А как программа завершает свою работу? Может твоя программа грузит в память не только себя, но и что-то другое. Попробуй просто убить процесс того, что грузит программа и процесс самой программы. А вообще, правильное завершение работы программы: application.close; Ответ отправлен: 12.06.2003, 20:28 Отправитель: Zensor Отвечает =FeanaR=
Добрый день, Nick! Попробуй в опциях проекта поменять главную форму - это раз. Если не получиться, сделай, как делал я раньше: Project -> view source и поменяй порядок создания форм. А что касается второго вопроса, попробуй Application.Terminate; или Halt;
Ответ отправлен: 14.06.2003, 22:16 Отправитель: =FeanaR= Отвечает Bob Johnson
Приветствую Вас, Nick! 1. Надо смотреть, что занимает время загрузки. Если это загрузка самого приложения (т.е. только exe файла), то ничего сделать не удастся (по крайней мере я не знаю, как), если же это твоя процедура инициализации, то тогда можно перенести ее в место, которое будет выполняться после появления лого-окна на экране. Пример такого есть у меня в программе Eman (исходники на моей странице в разделе файлы: bobjohnson.nm.ru), там показывается лого, а потом начинается подключение к БД, которое может занять несколько секунд. 2. Видимо ты делаешь Hide главной формы. Попробуй найти ее событие OnClose и в нем поставить Action = caFree. Но именно у главной формы, т.к. дельфи завершает приложение когда главная форма закрывается. Еще можно сделать Application.Terminate, но это не всегда помогает. И наконец, в тот
момент, когда необходимо выйти из программы, можно вызвать API функцию ExitProcess (0) - это поможет на 100%, но выход будет произведен в момент вызова этой функции (т.е. дельфи не вызовет никаких деструкторов объектов и т.д.). Если это тебе подходит - то используй (я использую это в случае критической ошибки, т.к. Application.Terminate не позволяет выйти тут же).
* EMan1.2: ---===*** The Eternal Power ***===---
Ответ отправлен: 13.06.2003, 03:46 Отправитель: Bob Johnson
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.