![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Foxett |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
Здравствуйте! Вот столкнулся с такой проблемой! Работаю в Делфи 7! Значит задача какова написать тест в который читает из файла вопросы и задает их пользователю из другого файла читает ответы это всё должно делаться случайным образом! Самое главное что всё это должно именно через файлы делаться так как база вопросов и ответов должны обновляться при надобности! Вобщем не могу найти способа читать с файла строку точнее даже вопрос по метке то есть
1: ----------------- 2: ----------------- И потом Рандом просто выбирает число от 1 до 50 и выводит вопрос или если у кого есть другие идеи реализации то пожалуйста помогите! Вообще рэндом же по идее может повторить вопрос а мне надо чтоб не повторялись! Жду ответов! Заранее спасибо за помощь! |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
To: Foxett
Делай типизированный файл: Type
TQuestion = Record
s: string[255]; { вопрос }
End;
Var
f: File Of TQuestion;
И для перехода на нужный вопрос пользуйся Seek-ом... Или тебе надо с текстовыми файлами велосипед изобрести? Насчет Random: Var
numbers: Set Of Byte;
X: Byte;
...
numbers := [];
For i := 1 To 50 Do
numbers := numbers + [i];
While ... Do Begin
Repeat
X := Random(50);
Until X in numbers; { вопросы повторяться не будут }
numbers := numbers - [X];
{
Здесь, собственно читаешь вопрос №X из файла
и делаешь с ним, что надо
}
End;
P.S. Перенести в "Дельфи"? |
Foxett |
![]()
Сообщение
#3
|
Гость ![]() |
Спасибо! Но по ходу дела рождаются новые вопросы! Я впервые с таким сталкиваюсь просто! На счет типизированого файла можно подробнее? А то я не совсем понял как оно будет работать!
|
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Использование типизированного файла дает преимущество в том, что можно осущесталять прямой доступ к i-й его записи с помощью seek, как ей пользоваться можешь прочитать на нешем FAQ . Для текстового файла возможность прямого доступа отсутствует. Вот еще банальный пример удобства использования типизированного файла
у тебя есть
type
TMatrix = array[1..10,1..10] of integer;
var
m : Tmatrix;
f : file of TMatrix;
после заполнения матрицы, для того чтобы сохранить ее в файле достаточно написать write(f, m); (а не делать это поэлементно) далее можно с такойже легкостью прочитать матрицу из файла и работать с ней ... read(f,m); -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Что именно непонятно? Как считать вопрос №X?
Var
f: File Of TQuestion;
Rec: TQuestion;
...
Seek(f, Pred(X)); { Отсчет ведется с 0, поэтому Pred }
Read(f, Rec);
Как записать обновленную базу данных? Пишешь маленькую программку (или процедуру): Var Rec: TQuestion;
ReWrite(f);
For i := 1 To newN Do Begin { newN - число вопросов в новой базе }
{
Заносишь новые вопросы в строку S; кстати, их можно читать и из другого файла.
Эта процедура нужна только для того, чтобы записать их не в текстовый файл,
а в File Of TQuestion
}
ReadLn(s);
Rec.s := s;
Write(f, s);
End;
Это все только стандартными средствами Паскаля... Т.к. я не знаю, чем тебе разрешено пользоваться... |
Romtek |
![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Алгоритмов генерации неповторяющихся чисел я не знаю, но можно обойтись булевым массивом размером кол-ва вопросов. Каждый раз после генерации числа проверять в массиве, не генерировалось ли ранее.
С текстом проще работать через текстовые файлы, а не типизированные. Тогда нужно считать весь файл в память в массив структуры строк, а потом уже искать вопросы и ответы по индексам (генерируемым числам) этого массива. Притом не стоит пренебрегать шифрованием текста, чтобы некоторые хитро-мудрые не подсмотрели результат. -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 1:12 |