Здравствуйте, уважаемые эксперты! Мне необходимо написать тест. Имеется БД пока из 40 вопросов, необходимо при каждом запуске теста выбирать и отображать случайные 10 из БД. Как можно реализовать такой алгоритм? Если просто делать выборку по случаным числам, вопросы будут повторяться, что было бы нежелательно. Помогите пожалуйста. Заранее спасибо!
Приветствую Вас, 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)). Не подскажите как это сделать.
Добрый день, 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
Доброе время суток ,уважаемые эксперты подскажите У меня во время выполнения возникает ошибка "Out of Memory" и в трее(WinXP) появляется значок мол не достаточно виртуальной памяти. Подозреваемые модули в приложении ,скажите в чём-дело.
Доброе время суток, 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.