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

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


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


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

Выпуск № 332
от 18.05.2004, 02:00

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


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

CrackLab
Статус: Доверительный
Общий рейтинг: 158.06
[Подробней >>]
sir henry
Статус: Профессиональный
Общий рейтинг: 161.12
[Подробней >>]
THE_PRO
Статус: Профессиональный
Общий рейтинг: 136.58
URL: THE_PRO
Телефон: (994 +12) 989647
[Подробней >>]
 
Boriss
Статус: Профессиональный
Общий рейтинг: 161.71
URL: Программирование на Паскале
[Подробней >>]
Pawel
Статус: Профессиональный
Общий рейтинг: 155.93
[Подробней >>]


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

Вопрос № 1534. Здравствуйте, уважаемые эксперты! Мне необходимо написать тест. Имеется БД пока из 40 вопросов, необ... (ответов: 4)
Вопрос № 1535. Народ! Возникла небольшая проблема. Под Delphi5 надо в консоли вывести цветной текст, но я не нашел ... (ответов: 4)
Вопрос № 1536. Доброе время суток ,уважаемые эксперты подскажите У меня во время выполнения возникает ошибка &quo... (ответов: 2)

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


 Вопрос № 1534

Здравствуйте, уважаемые эксперты!
Мне необходимо написать тест. Имеется БД пока из 40 вопросов, необходимо при каждом запуске теста выбирать и отображать случайные 10 из БД. Как можно реализовать такой алгоритм? Если просто делать выборку по случаным числам, вопросы будут повторяться, что было бы нежелательно. Помогите пожалуйста. Заранее спасибо!



Вопрос отправлен: 13.05.2004, 13:15
Отправитель: Stas (stasal@rambler.ru)

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

Отвечает CrackLab

Приветствую Вас, Stas!
Я бы просто завел integer массив на 40 элементов, обнулил его, и выставлял в 1 элементы массива с номерами уже выпавших вопросов. После получения случайного числа проверял , не выпадал ли уже этот вопрос. Еще можно организовать массив на 10 элементов и завести переменную, хранящую кол-во уже выпавших вопросов, записывать по очереди номера выпавших вопросов в этот массив и после получения случайного числа пробегаться по массиву от 0-го элемента до i (i - кол-во уже выпавших вопросов) и сравнивать случайное число с уже выпадавшими номерами вопросов. Однако мне первый вариант кажется лучше, потому что он быстрее и проще. А памяти будет занимать всего 40х4 = 160 байт =) Так что ничего страшного. что используется массив на 40 элементов а не на 10, зато быстрее и проще. Организовать предложенный цикл выпадения и контроля вопросов на С++ можно так:
int AllQuestions[40], Questions[10], newnum;
ZeroMemory(&AllQuestions, 40*4);
randomize();
for(int i=0;i<10;i++)
{
do { newnum=random(40); } while (AllQuestions[newnum]!=0);
Questions[i] = newnum;
AllQuestions[newnum] = 1;
}
После этого цикла массив Questions будет содержать 10 различных случайных номеров вопросов.

Ответ отправлен: 13.05.2004, 14:28
Отправитель: CrackLab


Отвечает sir henry

Доброе время суток, Stas!
А Вы сделайте проверку выбираемых с помощью случайных чисел вопросов. Генерируйте номера вопросов последовательно. Если номер вопроса уже есть, то генерировать следующий номер. После этого в условие запроса включите предложение:
faild_with_namber_of_quest IN ()
и в скобках, через запятую, номера вопросов.


Ответ отправлен: 13.05.2004, 13:49
Отправитель: sir henry


Отвечает THE_PRO

Доброе время суток, Stas!
Zapisivay nomera vibrannix voprosov i pri povtorax prosto poprobuy yeshe raz.

Ответ отправлен: 13.05.2004, 16:05
Отправитель: THE_PRO


Отвечает Boriss

Доброе время суток, Stas!
Самое простое - массив с номерами уже вызванных, желательно упорядоченных, что облегчит поиск в нем. Либо множество set of byte - проверять с помощью IN (if NOT (Numb in MySet) then begin ...; MySet:=MySet + [Numb]; end;

Ответ отправлен: 14.05.2004, 11:30
Отправитель: Boriss


 Вопрос № 1535

Народ! Возникла небольшая проблема. Под Delphi5 надо в консоли вывести цветной текст, но я не нашел функции смены цвета (в Pascal TextColor(Color)). Не подскажите как это сделать.


Приложение:


Вопрос отправлен: 13.05.2004, 21:47
Отправитель: Serg

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

Отвечает Boriss

Добрый день, Serg!
Ну ессно, для консольных приложений у Windows нет ничего для раскраски. По этой причине остается либо прямой вывод в видеопамять.
Либо - Артём Шегеда (shegeda@chat.ru) написал аналог ДОСовского модуля CRT, но для консольных. У меня есть. Куда прислать?

Ответ отправлен: 14.05.2004, 08:52
Отправитель: Boriss


Отвечает Pawel

Добрый день, Serg!
SetConsoleTextAttribute

Ответ отправлен: 15.05.2004, 20:54
Отправитель: Pawel


Отвечает sir henry

Здравствуйте, Serg!
В самой Дельфи такой фичи не предусмотрено, но можно воспользоваться функцией WinAPI:
function SetConsoleTextAttribute(hConsoleOutput: THandle; wAttributes: Word): BOOL;
Однако лучше всего скачать модуль Crt для Дельфи (аналог TPшного, но написаный с применением функций работы с консолью в виндах).
Можно скачать здесь:
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=19810
Я сам пользуюсь этим модулем, когда надо сделать цветную консоль :).


Ответ отправлен: 14.05.2004, 04:32
Отправитель: sir henry


Отвечает CrackLab

Добрый день, Serg!
hCon := GetStdHandle(STD_OUTPUT_HANDLE);
// hCon : integer;
SetConsoleTextAttribute(hCon, $4E);
// $4E = 4 (red bacground) + $E (yellow text)
Writeln('LaLala!');
readln;

Ответ отправлен: 15.05.2004, 13:40
Отправитель: CrackLab


 Вопрос № 1536

Доброе время суток ,уважаемые эксперты подскажите
У меня во время выполнения возникает ошибка
"Out of Memory" и в трее(WinXP) появляется значок
мол не достаточно виртуальной памяти. Подозреваемые модули
в приложении ,скажите в чём-дело.


Приложение:


Вопрос отправлен: 14.05.2004, 18:36
Отправитель: MichoN

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

Отвечает Pawel

Доброе время суток, MichoN!
Скорее всего второй модуль.
Тут может быть проблема с обьёмом обробатываемых данных, размером загружаемых файлов.

Ответ отправлен: 16.05.2004, 14:00
Отправитель: Pawel


Отвечает sir henry

Доброе время суток, MichoN!
Так может и в самом деле памяти не хватает? Вы бы взглянули на диспетчере задач.

Ответ отправлен: 17.05.2004, 05:27
Отправитель: sir henry



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (24)
C / C++ (14)
Perl (2)
Builder / Delphi (16)
Pascal (18)
Basic / VBA (2)
Java / JavaScript (3)
PHP (11)
Криптография (5)
WinAPI (7)
Радиоэлектроника (5)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (50)
"Железо" (28)
Поиск информации (15)
Администратору
Windows NT/2000/XP (24)
Linux / Unix (8)
Юристу
Гражданское право (9)
Семейное право (7)
Трудовое право (8)
КоАП (6)

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




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


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

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


В избранное