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

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

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

 
 Ответить  Открыть новую тему 
> Динамические переменные, Переделать программу под динамическую
nik-95
сообщение 18.05.2014 16:13
Сообщение #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 байт ) Кол-во скачиваний: 276

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


Бывалый
***

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

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


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

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

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

 



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