IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Неповторное считывание
John
сообщение 7.06.2007 21:51
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Рябета такая проблема. Я у меня в файл записаны вопросы и ответы
И при выводе он бывает считывает один и тот же вопрос (повторяет)
ТАк как это убрать?
вот так считывает и указатель на номер считывание ставит всегда в случайное положение, поэтому и повтор идет

randomize;
assign(f1, 'D:\BP\all\1.bin');
reset(f1);
n:=random(filesize(f1));
seek(f1,n);
read(f1, s1);
close(f1);



Сообщение отредактировано: John - 7.06.2007 21:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2007 22:10
Сообщение #2


Гость






Размер файла большой?

Если до 256 элементов, то заводи множество, и при установке позиции запоминай ее во множестве, а при генерации - пропускай варианты, которые уже были...
 К началу страницы 
+ Ответить 
John
сообщение 7.06.2007 22:19
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


Множества попробуем, спасибо
тогда придется использовать 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;



Сообщение отредактировано: John - 7.06.2007 22:47
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 7.06.2007 23:47
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


извращенный вариант: добавить к записи еще одно поле (логическое) с информацией о том, был ли элемент считан
проблема в том, что придется обнулять при завершении работы.
или можно завести отдельный файл, в котором в соответсвующем порядке будут записаны логические переменные....
или номера использованных вопросов (только искать долго будет.. а если по порядку - долго вставлять)
или сделать динамический список с номерами использованных ответов

Добавлено через 1 мин.
кстати, никогда не пробовала: может, массив множеств сделать? тогда можно будет хранить информацию о большом количестве вопросов.

Цитата
Размер файла большой? Если до 256 элементов, то заводи множество, и при установке позиции запоминай ее во множестве, а при генерации - пропускай варианты, которые уже были...

имхо, тут речь должна идти не о размере файла, а о количестве задаваемых за один запуск вопросов.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
John
сообщение 7.06.2007 23:49
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


а что с множеством
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2007 23:57
Сообщение #6


Гость






Цитата
кстати, никогда не пробовала: может, массив множеств сделать?

Ты об этом: http://volvo71.narod.ru/faq_folder/set_type.htm#set_bigger ?



Добавлено через 1 мин.
Цитата
имхо, тут речь должна идти не о размере файла, а о количестве задаваемых за один запуск вопросов.
Правда? А что толку от количества задаваемых вопросов, если я первым же задаю вопрос №290... Запихнешь его номер во множество?
 К началу страницы 
+ Ответить 
John
сообщение 8.06.2007 0:00
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  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;



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.06.2007 0:04
Сообщение #8


Гость






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;
 К началу страницы 
+ Ответить 
John
сообщение 8.06.2007 0:07
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Женя

Репутация: -  1  +


благодарю вас всех, попробуем щас
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 8.06.2007 1:26
Сообщение #10


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Если много вопросов, можно делать хотя бы так:

{проверяла в Делфи, 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;

почти хэш-таблица smile.gif)

если количество вопросов заранее неизвестно - массив не подойдет, придется динамическую структуру ваять.

Сообщение отредактировано: мисс_граффити - 8.06.2007 15:14


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 8.06.2007 8:43
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(мисс_граффити @ 8.06.2007 2:26) *

если количество вопросов заранее неизвестно - массив не подойдет, придется динамическую структуру ваять.

Тогда, как ты раньше правильно и сказала, лучше ориентироваться на кол-во задаваемых вопросов и заносить их в массив. Не так красиво проверка будет выглядеть, ну что ж..
ps а массив не с нуля ? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 8.06.2007 15:14
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
а массив не с нуля

с нуля, конечно.... исправила, спасибо.
Цитата
Не так красиво проверка будет выглядеть, ну что ж..

проходить по всему массиву? тогда уж лучше список... вставлять на "правильное" место - будет быстрее искаться.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 31.07.2025 21:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"