Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2013, 01:28   #1
BumBum4ik
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 40
По умолчанию типы данных-записи

Есть информация о студентах радиофизического факультета, представлена ​​в таком виде:
<фамилия>, <имя>, <отчество>, <пол>, <возраст>, <курс>
Составить программу с процедурами, которая вводит эту информацию и печатает следующие данные:
Фамилии и пол студентов, имеющих распространенные отчество
BumBum4ik вне форума Ответить с цитированием
Старый 16.12.2013, 10:09   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
Type
 Record=info
  Fam,im,ot:string;
  Pol:string[1];
  Vozr,kurs:byte;
 End;
Var
 R:info;
 F:file of info;
...
Assgn(f,'data.dat');
Rewrite(f);
For i:=1 to n do
 Begin
  Readln(r.fam);
  Readln(r.im);
  Readln(r.ot);
  Readln(r.pol);
  Readln(r.vozr);
  Readln(r.kurs);
  Write(f,r);
 End;
Close(f);
...
Reset(f);
While not eof(f) do
 Begin
  Read(f,r);
  If (r.ot='Иванович') or (r.ot='Петрович') then
   Writeln(r.fam,r.pol);
 End;
Close(f);
Так как автор темы не пояснил, что означает распространенные, то решил в мере своего понимания данного термина.

Последний раз редактировалось ZX Spectrum-128; 16.12.2013 в 10:17.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 16.12.2013, 11:00   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати. маленькое замечание.
Цитата:
Код:
Type
 Record=info
  Fam,im,ot:string;
  Pol:string[1];
  Vozr,kurs:byte;
 End;
Var
 R:info;
 F:file of info;
1-е. перепутаны местами тип и название типа.
нужно их переставить местами:
Код:
Type
 info = record
   Fam,im,ot:string;
   Pol:string[1];
   Vozr,kurs:byte;
 End;

во-вторых, такой код нормально откомпилится в TurboPascal, но не в современном компиляторе Pascal, где строка - это уже ССЫЛОЧНЫЙ тип.

самый просто способ обойти это - использовать короткие строки.
Например, вот так:
Код:
Type
 info = record
  Fam,im,ot:string[45]; {м.б. любая длина <=255, достаточная для хранения нужной нам информации}
  Pol:string[1];
  Vozr,kurs:byte;
 End;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2013, 11:11   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Цитата:

во-вторых, такой код нормально откомпилится в TurboPascal, но не в современном компиляторе Pascal, где строка - это уже ССЫЛОЧНЫЙ тип.
Компилируется. Опции компилятора ставил object pascal extension on и free pascal dialect

Исправил еще ошибки:
Код:
const
 n=2;
Type
 info=Record
  Fam,im,ot:string;
  Pol:string[1];
  Vozr,kurs:byte;
 End;
Var
 R:info;
 F:file of info;
 i:integer;

begin
Assign(f,'data.dat');
Rewrite(f);
For i:=1 to n do
 Begin
  write('Введите фамилию '); Readln(r.fam);
  write('Введите имя '); Readln(r.im);
  write('Введите отчество '); Readln(r.ot);
  write('Введите пол '); Readln(r.pol);
  write('Введите возраст '); Readln(r.vozr);
  write('Введите курс '); Readln(r.kurs);
  Write(f,r);
 End;
Close(f);

Reset(f);
While not eof(f) do
 Begin
  Read(f,r);
  If (r.ot='Иванович') or (r.ot='Петрович') then
   Writeln(r.fam,r.pol);
 End;
Close(f);
end.

Последний раз редактировалось ZX Spectrum-128; 16.12.2013 в 11:14.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 16.12.2013, 18:12   #5
BumBum4ik
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 40
По умолчанию

выдаёт ошибки((
BumBum4ik вне форума Ответить с цитированием
Старый 16.12.2013, 18:14   #6
BumBum4ik
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 40
По умолчанию

F:file of info;
пишет что типизированный файл не может содержать элементы такого типа
BumBum4ik вне форума Ответить с цитированием
Старый 16.12.2013, 18:40   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от BumBum4ik Посмотреть сообщение
F:file of info;
пишет что типизированный файл не может содержать элементы такого типа
Чтобы в файл записывать, длина блока данных должна быть определена.
Код:
Type
info=Record
  Fam,im,ot:string[20]; // задать длину строк
  Pol:string[1];
  Vozr,kurs:byte;
End;
type_Oleg вне форума Ответить с цитированием
Старый 16.12.2013, 18:47   #8
BumBum4ik
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 40
По умолчанию

Assign(f,'data.dat');
нет перегруженной подпрограммы с такими типами параметров
BumBum4ik вне форума Ответить с цитированием
Старый 16.12.2013, 19:13   #9
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Наверное AssignFile(f,'data.dat') надо.
type_Oleg вне форума Ответить с цитированием
Старый 16.12.2013, 19:15   #10
BumBum4ik
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 40
По умолчанию

теперь пишет неизвестное имя F
BumBum4ik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинированные типы данных (записи) Фрейтор 40-500 Помощь студентам 2 31.10.2012 13:26
Комбинированные типы данных (записи) Фрейтор 40-500 Помощь студентам 1 28.10.2012 17:52
«Сложные типы данных: массивы, записи, множества, файловые данные». Darkin Паскаль, Turbo Pascal, PascalABC.NET 4 24.04.2012 13:49