Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание и обработка записей в паскале. 
:(
    Опции темы
vladislaff
Дата 19.1.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 19.1.2009

Репутация: нет
Всего: нет



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

Понимаю, что это лишь поверхностное, но вот:
Код

Program Files;
type
   person=record
      Fam:string[15];
      Gor:string[20];
      Ul:string[25];
      Dom:integer;
      Kv:integer;
end;
var
list:file of person;
f,g,u:string;
d,k,i,kol:integer;
rec:person;
begin
writeln('Vvedite colichestvo giteley');
readln(kol);
assign(list,'Giteli');
rewrite(list);
for i:=1 to kol do
    begin
    writeln('Vvedite dannie',i,'-go gitela');
    writeln('Familiya:'); readln(f);
    writeln('Gorod:'); readln(g);
    writeln('Uliza:'); readln(u);
    writeln('Dom:'); readln(d);
    writeln('Kvartira:'); readln(k);
rec.fam:=f; rec.gor:=g; rec.ul:=u; rec.dom:=d; rec.kv:=k;
write(list,rec);
writeln(rec.fam:5,rec.gor:5,rec.ul:5,rec.dom:2,rec.kv:2);
end;
close(list);
writeln;
reset(list);
for i to kol-1 do
    begin
         seek(list,i);
           read(list,i);


Не дайте голодному студенту завалить сессию  smile 
PM MAIL   Вверх
Metalex
Дата 21.1.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Неправильный подход. Я бы использовал with.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Metalex
Дата 22.1.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Код
Program Files;

type
   person=record
      Fam:string[15];
      Gor:string[20];
      Ul:string[20];
      Dom:integer;
      Kv:integer;
end;

CONST Nm=2;

var C:array [1..Nm] of person; M:file of person; i:integer;
begin
assign (M, 'Giteli.Dat');
rewrite (M);
for i:=1 to Nm do
begin with C[i] do
begin
    writeln('Vvedite dannie',i,'-go gitela');
    write('Familiya: '); readln(Fam); write (M, Fam);
    write('Gorod: '); readln(Gor); write (M, Gor);
    write('Ulitsa: '); readln(Ul); write (M, Ul);
    write('Dom: '); readln(Dom); write (M, Dom);
    write('Kvartira: '); readln(Kv); write (M, Kv);
end;
close (M);

reset (M);
for i to Nm do
begin with C[i] do
begin
         read (M, Fam, Gor, Ul, Dom, Kv);
         writeln (Fam:16, Gor:21, Ul:21, Dom:3, Kv:3);
end;
end;
close (M);
readln;
end.


Но здесь есть ошибки. Я пока не понял почему они возникают.

Добавлено через 1 минуту и 26 секунд
Интересно, можно в 
Цитата(Metalex @  22.1.2009,  20:35 Найти цитируемый пост)
type

использовать другой, предыдущий
Цитата(Metalex @  22.1.2009,  20:35 Найти цитируемый пост)
type

??


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
volvo877
Дата 23.1.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Metalex @  22.1.2009,  19:35 Найти цитируемый пост)
здесь есть ошибки. Я пока не понял почему они возникают.
Потому что у тебя M - это File of Perfon, а ты пишешь (по крайней мере пытаешься) в него строки, числа... В типизированный файл вся структура пишется одним оператором:

Код

for i:=1 to Nm do
begin with C[i] do
begin
    writeln('Vvedite dannie',i,'-go gitela');
    write('Familiya: '); readln(Fam);
    write('Gorod: '); readln(Gor);
    write('Ulitsa: '); readln(Ul);
    write('Dom: '); readln(Dom);
    write('Kvartira: '); readln(Kv);

    write(M, C[i]);
end;

Цитата(Metalex @  22.1.2009,  19:35 Найти цитируемый пост)
Интересно, можно в type использовать другой, предыдущий
Можно.

PM MAIL   Вверх
Metalex
Дата 23.1.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Ну тогда все просто:
Код
Program Files;

type
   person=record
      Fam:string[15];
      Gor:string[20];
      Ul:string[20];
      Dom:integer;
      Kv:integer;
end;

CONST Nm=5;    {Количество жителей}

var C:array [1..Nm] of person; M:file of person; i:integer;
begin
assign (M, 'Giteli.Dat');
rewrite (M);

for i:=1 to Nm do
begin with C[i] do
begin
    writeln('Vvedite dannie ',i,'-go gitela');
    write('Familiya: '); readln(Fam);
    write('Gorod: '); readln(Gor);
    write('Ulitsa: '); readln(Ul);
    write('Dom: '); readln(Dom);
    write('Kvartira: '); readln(Kv);

    write(M, C[i]);
end;
end;

close (M);

reset (M);
for i:=1 to Nm do
begin with C[i] do
begin
         read (M, C[i]);
         writeln (Fam:16, Gor:21, Ul:21, Dom:3, Kv:3);
end;
end;
close (M);
readln;
end.



volvo877, проверь на всякий случай..
Волнует меня еще один вопрос.  Нигде не нашел информацию про разрешения типизированных файлов. Можно ли их задавать любые? Или есть ограничения?

vladislaff, это решение в общем виде (правильное вроде). Чтобы вывод был выборочный нужно заменить кусок кода, только я не знаю как сделать, условие "если адрес одинаковый".



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
volvo877
Дата 24.1.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Metalex @  23.1.2009,  17:18 Найти цитируемый пост)
Нигде не нашел информацию про разрешения типизированных файлов.
Если ты про расширения, то файлу совершенно все равно, как он называется. Твоей программе - тоже. Расширение может быть совершенно любым.

Цитата(Metalex @  23.1.2009,  17:18 Найти цитируемый пост)
Чтобы вывод был выборочный нужно заменить кусок кода, только я не знаю как сделать, условие "если адрес одинаковый".

Код

for i := 1 to Nm - 1 do
  for j := i + 1 to Nm do
    if (C[i].Ul = C[j].Ul) and (C[i].Dom = C[j].Dom) and (C[i].Kv = C[j].Kv) then
      writeln (C[i].Fam, ' из города ', C[i].Gor, ' и ', C[j].Fam, ' из города ', C[j].Gor);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

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

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.