Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические переменные
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nik-95
Здравствуйте, дорогие форумчане!

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

Текст задания: реализовать программу с помощью динамических переменных, т.е. сначала из файла считываются все данные в память, обрабатываются и записываются в файл.

Текст задачи: определить переменную "Студент", содержащую следующие поля: имя, фамилия, отчество, название института, номер группы. Данные считать из текстового файла. Вывести данные о студентах, которые учатся в одном и том же институте, и в одной группе.

program stud;
uses crt;
const MaxN=200;
type TGrInst=record
Institute,Group:string[20];
end;

Tstudent=record
num:integer;
FIO:record
F,I,O:string[20];
end;
Institute,Group:string[20];
end;
st=array[1..MaxN] of Tstudent;
var
stud1,stud2:text;
mas:st;
mas1:TGrInst;
i,k:integer;
h:boolean;

{чтение из файла}
procedure reading(var stud1:text; var mas:st; var k:integer);
begin
k:=0;
repeat
k:=k+1;
with mas[k] do
begin
readln(stud1,num);
readln(stud1,FIO.F);
readln(stud1,FIO.I);
readln(stud1,FIO.O);
readln(stud1,Institute);
readln(stud1,Group);
writeln(FIO.F,' ',FIO.I,' ',FIO.O,', ',Institute,', ',Group);
end;
until (eof(stud1));
end;

{ввод}
procedure input(var stud1,stud2:text;var mas:st;var mas1:TGrInst;var k:integer);
begin
clrscr;
writeln('Программа описывает переменную «студент», считывая данные');
writeln('из текстового файла, а затем выводит данные о студентах,');
writeln('которые учатся в одном институте и в одной группе');
writeln;
assign(stud1,'students.txt'); // в этом файле список студентов
reset(stud1);
assign(stud2,'student.txt'); // в этот файл записываются результаты
rewrite(stud2);
reading (stud1,mas,k);
writeln;
writeln('Введите название института');
readln(mas1.Institute);
writeln('Введите номер группы');
readln(mas1.Group);
writeln;
end;

{обработка}
procedure process(var h:boolean; var i,k:integer; var mas1:TGrInst; var mas:st; var stud1,stud2:text);
begin
h:=true;
writeln(stud2,'Студенты, учащиеся в одной группе');
for i:=1 to k do
begin
if ((mas[i].Institute=mas1.Institute) and (mas[i].Group=mas1.Group))
then
begin
writeln(mas[i].FIO.F,' ',mas[i].FIO.I,' ',mas[i].FIO.O,' ',mas[i].Institute,' ',mas[i].Group);
writeln(stud2,mas[i].FIO.F);
writeln(stud2,mas[i].FIO.I);
writeln(stud2,mas[i].FIO.O);
writeln(stud2,mas[i].Institute);
writeln(stud2,mas[i].Group);
writeln;
h:=false;
end;
end;
if h then
begin
writeln('Нет студентов, учащихся в ',mas1.Institute,' гр.',mas1.Group);
rewrite(stud2);
writeln(stud2,'Нет студентов, учащихся в ',mas1.Institute,' гр.',mas1.Group);
end;
close(stud1);
close(stud2);
end;

{основной блок программы}
begin
input(stud1,stud2,mas,mas1,k);
process(h,i,k,mas1,mas,stud1,stud2);
readkey;
end.


+ прикрепляю два файла:
-students.txt - здесь исходные данные Нажмите для просмотра прикрепленного файла
- student.txt - здесь результаты после выбора "МГУ, 250145"Нажмите для просмотра прикрепленного файла
Федосеев Павел
Скорее всего, имеется в виду использование так называемых динамических структур данных. В твоём случае это одно- или двунаправленный список - но не массив записей.
type
TStudent = record
.........................
end;
PList = ^TList;
TList = record
Data: TStudent;
Next: PList;
end;

Примеры динамических структур [1], [2], [3], [4].
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.