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

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

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

 
 Ответить  Открыть новую тему 
> Чтение с Txt файла по метке, Считать строку файла по метке
Foxett
сообщение 1.11.2005 18:54
Сообщение #1


Гость






Здравствуйте! Вот столкнулся с такой проблемой! Работаю в Делфи 7! Значит задача какова написать тест в который читает из файла вопросы и задает их пользователю из другого файла читает ответы это всё должно делаться случайным образом! Самое главное что всё это должно именно через файлы делаться так как база вопросов и ответов должны обновляться при надобности! Вобщем не могу найти способа читать с файла строку точнее даже вопрос по метке то есть
1: -----------------
2: -----------------
И потом Рандом просто выбирает число от 1 до 50 и выводит вопрос или если у кого есть другие идеи реализации то пожалуйста помогите! Вообще рэндом же по идее может повторить вопрос а мне надо чтоб не повторялись! Жду ответов! Заранее спасибо за помощь!
 К началу страницы 
+ Ответить 
volvo
сообщение 1.11.2005 19:01
Сообщение #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
сообщение 1.11.2005 19:33
Сообщение #3


Гость






Спасибо! Но по ходу дела рождаются новые вопросы! Я впервые с таким сталкиваюсь просто! На счет типизированого файла можно подробнее? А то я не совсем понял как оно будет работать!
 К началу страницы 
+ Ответить 
klem4
сообщение 1.11.2005 19:56
Сообщение #4


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Использование типизированного файла дает преимущество в том, что можно осущесталять прямой доступ к 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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.11.2005 20:03
Сообщение #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
сообщение 3.11.2005 18:09
Сообщение #6


Знаток
****

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

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


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


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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