Рябета такая проблема. Я у меня в файл записаны вопросы и ответы
И при выводе он бывает считывает один и тот же вопрос (повторяет)
ТАк как это убрать?
вот так считывает и указатель на номер считывание ставит всегда в случайное положение, поэтому и повтор идет
randomize;
assign(f1, 'D:\BP\all\1.bin');
reset(f1);
n:=random(filesize(f1));
seek(f1,n);
read(f1, s1);
close(f1);
Размер файла большой?
Если до 256 элементов, то заводи множество, и при установке позиции запоминай ее во множестве, а при генерации - пропускай варианты, которые уже были...
Множества попробуем, спасибо
тогда придется использовать 2 множества
а насчет файла, вообще предполагается что больше 256 элементов
{------------------------}
посмотри пожалуйста, я просто в множествах не силен,а это последние действие к моему курсовику
множество задаю так
var
ms: set of 0..250;
begin
randomize;
assign(f1, 'D:\BP\all\1.bin');
reset(f1);
n:=random(filesize(f1));
while n in ms do n:=random(filesize(f1));
ms:=[n];
seek(f1,n);
read(f1, s1);
close(f1);
end;
извращенный вариант: добавить к записи еще одно поле (логическое) с информацией о том, был ли элемент считан
проблема в том, что придется обнулять при завершении работы.
или можно завести отдельный файл, в котором в соответсвующем порядке будут записаны логические переменные....
или номера использованных вопросов (только искать долго будет.. а если по порядку - долго вставлять)
или сделать динамический список с номерами использованных ответов
Добавлено через 1 мин.
кстати, никогда не пробовала: может, массив множеств сделать? тогда можно будет хранить информацию о большом количестве вопросов.
а что с множеством
народ так почему не работает
где ошибка
var
ms: set of 0..250;
begin
randomize;
assign(f1, 'D:\BP\all\1.bin');
reset(f1);
n:=random(filesize(f1));
while n in ms do n:=random(filesize(f1)); {вот тут наверно}
ms:=[n];
seek(f1,n);
read(f1, s1);
close(f1);
end;
var
ms: set of 0..250;
begin
ms := [];
randomize;
assign(f1, 'D:\BP\all\1.bin');
reset(f1);
// ... Здесь - какой-то цикл
repeat
n:=random(filesize(f1));
until not (n in ms);
ms:=ms + [n]; // <-- Вот тут...
seek(f1,n);
read(f1, s1);
// ... Конец цикла
close(f1);
end;
благодарю вас всех, попробуем щас
Если много вопросов, можно делать хотя бы так:
{проверяла в Делфи, TP нет под рукой}
var mas: array[0..1] of set of byte;
a: integer;
begin
a:=random(500); //в смысле, а - это номер твоего вопроса
include(mas[a div 255],a mod 255);
end;