Вопрос пользователя касается возможности использования массивов целых чисел как поля в записи (record) в языке программирования Delphi, который использует Object Pascal. В частности, интересует возможность чтения данных из текстового файла в массив записей, где часть данных представлена оценками за программы и тесты.
Описание структуры записи
Для начала рассмотрим пример объявления записи stype, которая включает в себя поля с данными о студенте, включая массивы целых чисел для оценок за программы (prog) и тесты (test):
Tnametype = record
first: string[10];
mi: string[3];
last: string[30];
end;
Tstype = record
id: integer;
name: Tnametype;
prog: array[1..10] of integer;
test: array[1..3] of integer;
progave, quizave: real;
average: double;
grade: char;
end;
Tsarraytype = array[1..100] of stype;
var
student: Tsarraytype;
Чтение данных из файла
Пользователь столкнулся с трудностью при чтении данных в массивы prog и test. Для решения этой задачи необходимо использовать функцию Readln для каждого поля записи, включая массивы целых чисел. Пример кода:
procedure TStudentData.OpenButtonClick(Sender: TObject);
begin
var i: integer;
if OpenDialog.Execute then
begin
AssignFile(InfFile, OpenDialog.FileName);
Reset(InfFile);
i := 0;
while not Eof(InfFile) do
begin
Inc(i);
if i > High(student) then Break;
with student[i] do
begin
Readln(InfFile, id, name.first[1], name.mi[1], name.last[1]);
// Чтение массивов оценок
for j := Low(prog) to High(prog) do
Readln(InfFile, prog[j]);
for j := Low(test) to High(test) do
Readln(InfFile, test[j]);
end;
end;
end;
end;
Запись данных в файл
Для записи массивов оценок в текстовый файл также используется циклический подход с использованием Writeln:
procedure TStudentData.SaveButtonClick(Sender: TObject);
begin
if SaveDialog.Execute then
begin
AssignFile(Outf, SaveDialog.FileName);
Rewrite(Outf);
for i := Low(student) to High(student) do
with student[i] do
begin
Writeln(Outf, id:4, name.first, name.mi, name.last);
// Запись массивов оценок
for j := Low(prog) to High(prog) do
Writeln(InfFile, prog[j]:5);
for j := Low(test) to High(test) do
Writeln(Outf, test[j]:5);
end;
Close(Outf);
end;
end;
Пример использования
Как было показано в подтвержденном ответе, массивы целых чисел могут быть инициализированы и использованы без каких-либо проблем:
var
a: Tsarraytype;
i, j: Integer;
begin
for i := Low(a) to High(a) do
begin
for j := Low(a[i].test) to High(a[i].test) do
a[i].test[j] := i * 100 + j; // Инициализация значений
// ... другие операции ...
end;
end;
Вывод
Использование массивов целых чисел в полях записи на Pascal не только возможно, но и является стандартной практикой при работе с данными, которые можно логически разделить на отдельные категории (например, оценки за программы и тесты). Приведенные примеры кода демонстрируют, как читать и записывать такие данные в массивы и обратно.
Вопрос касается использования массивов целых чисел в качестве полей записи и работы с ними в языке программирования Delphi, включая чтение данных из файла.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS