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

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru


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

Выпуск № 177
от 15.06.2003, 18:10

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 738
Отправлено ответов: 1321
Активность: 178.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Zensor
Статус: Начальный
Общий рейтинг: 163.63
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.78
URL: Программирование
[Подробней >>]
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 116.88
URL: Пристанище неодинокого программиста
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.15
[Подробней >>]
X-RayMan
Статус: Начальный
Общий рейтинг: 121.42
[Подробней >>]
=FeanaR=
Статус: Начальный
Общий рейтинг: 105.55
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 729. Уважаемые эксперты, а можноли программно ВКЛЮЧИТЬ компьютер, если у меня BIOS поддерживает опцию вкл... (ответов: 1)
Вопрос № 730. Здравствуйте, уважаемые эксперты ! Не могу сообразить, как сделать следующее: Имеется массив Mix: ar... (ответов: 3)
Вопрос № 731. Hi, эксперты. Вот тут два вопроса возникло, надеюсь на вашу помощь. 1) Есть некая программа, врема з... (ответов: 4)

Вопросов: 3, ответов: 8


 Вопрос № 729

Уважаемые эксперты, а можноли программно ВКЛЮЧИТЬ компьютер,
если у меня BIOS поддерживает опцию включения по таймеру?
Но хотелось бы включать эту опцию из под Windows'а.



Вопрос отправлен: 12.06.2003, 12:39
Отправитель: =FeanaR=

[Следующий вопрос >>] [Список вопросов]

Отвечает Zensor

Добрый день, =FeanaR=!
Программно - хз.
А в биосе (если у тебя таковой), можно
настроить, чтоб включался в определенный
момент времени. У моего знакомого такой "будильник".

Ответ отправлен: 12.06.2003, 18:09
Отправитель: Zensor


 Вопрос № 730

Здравствуйте, уважаемые эксперты !
Не могу сообразить, как сделать следующее:
Имеется массив Mix: array [1..MaxNumber] of Byte, необходимо перемешать элементы массива
в случайном порядке, причём этих элементов может быть очень много (до 10000).
Подскажите пожалуйста, как это можно сделать быстро?
Буду признателен за пример.
Заранее спасибо!



Вопрос отправлен: 12.06.2003, 14:44
Отправитель: Alex

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, 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) Запускается прога, работает - все ОК. Но после выхода из проги в памяти остается висеть процесс 'прога.ехе' и отжирает немалые ресурсы. Почему такое проиходит и как с этим бороться?
Заранее спасибо.



Вопрос отправлен: 12.06.2003, 18:08
Отправитель: Nick

[Следующий вопрос >>] [Список вопросов]

Отвечает X-RayMan

Приветствую Вас, 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.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (37)
C / C++ (29)
Perl (7)
Builder / Delphi (20)
Pascal (32)
Basic / VBA (11)
Java / JavaScript (12)
PHP (8)
MySQL / MSSQL (7)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (31)
"Железо" (24)
Поиск информации (16)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (8)
Юристу
Гражданское право (6)
Семейное право (2)
Трудовое право (3)
КоАП (3)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное