Задача на pascal'e с записями и файлами

интернет компьютеры программирование Linux pascal

Привет, народ. Помогите с программой.

Есть задача, ее надо решить с помощью записей: На основе записной книжки, содержащей сведения: фамилия, год рождения, адрес (город; улица; номер дома; квартира), место работы (учебы) напечатать список лиц, работающих (учащихся) в КГТУ.

Я ее решаю так: сначала пишу одну программу, которая по запросу заполняет типизированный файл, а потом пишу вторую, которая работает с файлом, считывает и проверяет данные на принадлежность к КГТУ.

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

Вроде все сделал по руководствам, но все равно неправильно, BP и FPC выдают разные ошибки.

Программа ввода

type

data = record
surname:string;
year: integer;
city:string;
street:string;
numhouse:integer;
flat:integer;
work:string;
end;

var f:file;
n,i:integer;

begin
write('Сколько записей нужно ввести? ');
readln(n);
assign(f,'zapis.dat');
append(f);
{тут FPC требует либо тип файла text, либо заменить на rewrite, BP с ним солидарен, хотя мне нужен именно такой ход действий, т.е., чтоб вайлом до посинения можно было загонять данные и все были довольны. Как это переписать?}
for i:=1 to n do
with data do
{BP тут зачем-то хочет скобочку “(”, FPC спотыкается дальше}
begin
write('Введите фамилию ');
readln(data.surname);
{здесь, и на дальнейших “data.переменная” говорит “Variable Identifer expected”. Что бы это значило и как это исправить? BP до сюда просто не доходит}
{если убрать “with data do” то BP ставит курсор после data и перед точкой, т.е. “data_.surname” и там просит злосчастную скобочку, FPC пофигу, он по-прежнему хочет свой “Variable identifer”. Есть мнение, что я просто как-то не так обозначил типизированный файл, но все делал по инструкции и перепроверял}
write('Введите год рождения ');
readln(data.year);
write('Введите город ');
readln(data.city);
write('Введите улицу ');
readln(data.street);
write('Введите номер дома ');
readln(data.numhouse);
write('Введите номер квартиры ');
readln(data.flat);
write('Введите место работы/учебы ');
readln(data.work);
Blockwrite(f,data,8240);
end;
close(f);
end.

Программа вывода

type

data = record
surname:string;
year: integer;
city:string;
street:string;
numhouse:integer;
flat:integer;
work:string;
end;


var f:file;

begin
assign(f,'zapis');
reset(f);

while not EOF(f) do
begin
Blockread(f,data,8240);
{FPC тут спотыкается, ждет любимый “Variable Identifer”, т.е., как я понимаю, он не может тупо считать пачку переменных, объединенных одной общей записью. Если может, как это сделать?}
{BP тупо опять просит скобку}
if (data.work='КГТУ') or (data.work='кгту') or (data.work='Кгту') then
begin
writeln(con,'Фамилия: ',data.surname);
{Здесь и далее ему не нравится con, т.е. вывод на консоль, говорит, что не знает такой переменной. Сделал так, чтоб не путался с файлом, на всякий случай, от излишней паранойности. В принципе, она ничего не меняет, если ее убрать, то FPC больше ни на что не жалуется}
writeln(con,' Год рождения: ',data.year);
writeln(con,' Город: ',data.city);
writeln(con,' Улица: ',data.street);
writeln(con,' Номер дома: ',data.numhouse);
writeln(con,' Номер квартиры: ',data.flat);
writeln(con,' Место работы/учебы: ',data.work);
writeln(con);
writeln(con);
end;
end;

close(f);
readln;
end.

Как я понял, я как-то неправильно описываю переменные в записях. Что я делаю не так? Вроде все по инструкциям.

P.S. Я только проблему описывал полчаса где-то. После всего головняка вообще охото тупо решить задачу строками и проверять последние 4 символа.


Примечание:
короч, уже не актуально. отдам баллы первому отписавшемуся
Ответы:
Pascal в Linux это как секс с презервативом - удовольствия никакого и пользы.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.