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

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

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

 
 Ответить  Открыть новую тему 
> Динамические переменные, Переделать программу под динамическую
сообщение
Сообщение #1





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

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


Здравствуйте, дорогие форумчане!

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

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

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

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 - здесь исходные данные Прикрепленный файл  students.txt ( 213 байт ) Кол-во скачиваний: 493

- student.txt - здесь результаты после выбора "МГУ, 250145"Прикрепленный файл  student.txt ( 121 байт ) Кол-во скачиваний: 477
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

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

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


Скорее всего, имеется в виду использование так называемых динамических структур данных. В твоём случае это одно- или двунаправленный список - но не массив записей.
type
TStudent = record
.........................
end;
PList = ^TList;
TList = record
Data: TStudent;
Next: PList;
end;

Примеры динамических структур [1], [2], [3], [4].
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 23.12.2024 19:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name