Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 08.04.2011, 12:15   #1 (permalink)
zena
Member
 
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
По умолчанию Паскаль. Записи

Помогите написать программу на турбопаскале с использованием записей.

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

У меня получилось только реализовать ввод данных, а с проверкой одни муки...
Код:
program uydg;
uses crt;
type
    zap=record
    Nomer:integer;
    Fam :string[5];
    adr:string[15];
    data:string[10];
end;
var
 rec:zap;
 cena:string;
 q,i,n,z,t,k,d:integer;
 a:array[1..45] of zap;
 
begin
clrscr;
writeln('Введите количество записей: ');
readln(n);
for i:=1 to n do
with a[i] do
begin
write(' Порядковый номер покупателя: ' , I,': ');
  readln(a[i].Nomer);
write('Фамилия покупателя:',fam,': ');
  readln(a[i].Fam);
write('Адрес покупателя: ' , I,': ');
  readln(a[i].adr);
write('Дата постановки на учёт: ',I,': ');
  readln(a[i].data);
end;
 
 
 
begin
writeln('',a[i].adr,' ',a[i].Nomer,'  ',a[i].data,'   ',a[i].Fam,'');
end;
readln;
end.
zena вне форума   Ответить с цитированием

Старый 08.04.2011, 12:15
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме ранее создавались топики которые так или иначе похожи на ваш

Строки и записи.
Записи
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Посчитать количество различных цифр в записи. Паскаль, программа почти написана.
Записи

Старый 08.04.2011, 12:37   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну, что нибудь в таком роде (еще ввести j:Integer):

Код:
i:=1;
Repeat
 d:=0;
 for j:=i+1 to n do
  if (a[i].fam=a[j].fam) and (a[i].adr=a[j].adr) then
   begin
    for k:=j+1 to n do
     a[k-1]:=a[k];
     Inc(d);
    end;
   end;
 Dec(n,d);
 Inc(i);
Until i>=n;
Извините, не проверял. Попробуйте.
Vladimir_S вне форума   Ответить с цитированием
Старый 08.04.2011, 12:44   #3 (permalink)
zena
Member
 
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Ну, что нибудь в таком роде (еще ввести j:Integer):

Код:
i:=1;
Repeat
 d:=0;
 for j:=i+1 to n do
  if (a[i].fam=a[j].fam) and (a[i].adr=a[j].adr) then
   begin
    for k:=j+1 to n do
     a[k-1]:=a[k];
     Inc(d);
    end;
   end;
 Dec(n,d);
 Inc(i);
Until i>=n;
Извините, не проверял. Попробуйте.
Спасибо, всё работает.
zena вне форума   Ответить с цитированием
Старый 08.04.2011, 12:54   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от zena Посмотреть сообщение
Спасибо, всё работает.
Ох - ну конечно, напортачил! Там end один лишний. Поправьте, пожалуйста.
Надо так:
Код:
i:=1; 
Repeat  
 d:=0;  
 for j:=i+1 to n do   
  if (a[i].fam=a[j].fam) and (a[i].adr=a[j].adr) then    
   begin     
    for k:=j+1 to n do      
     a[k-1]:=a[k];      
    Inc(d);     
   end;    
 Dec(n,d);  
 Inc(i); 
Until i>=n;
Vladimir_S вне форума   Ответить с цитированием
Старый 08.04.2011, 12:58   #5 (permalink)
zena
Member
 
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
По умолчанию

Ну я это сразу заметила
zena вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 08.04.2011, 22:02   #6 (permalink)
zena
Member
 
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
По умолчанию

Тут возникла такая проблемка: если ввести, например 3, разные записи, то выводится только одна. А если ввести 3 записи, две из которых одинаковые, то они обе удаляются(а нужно чтобы удалялась только одна запись).
Не подскажете как это можно подправить?
zena вне форума   Ответить с цитированием
Старый 08.04.2011, 22:55   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от zena Посмотреть сообщение
Тут возникла такая проблемка: если ввести, например 3, разные записи, то выводится только одна. А если ввести 3 записи, две из которых одинаковые, то они обе удаляются(а нужно чтобы удалялась только одна запись).
Не подскажете как это можно подправить?
Видимо, Вы как-то не так состыковали. В общем, отладил. Вот:
Код:
uses crt;
type
    zap=record
    Nomer:integer;
    Fam :string[5];
    adr:string[15];
    data:string[10];
end;
var
 rec:zap;
 cena:string;
 q,i,j,n,k,d:integer;
 a:array[1..45] of zap;

BEGIN
 clrscr;
 writeln('Введите количество записей: ');
 readln(n);
 for i:=1 to n do
  with a[i] do
   begin
    write('Порядковый номер покупателя: ');
    readln(a[i].Nomer);
    write('Фамилия покупателя: ');
    readln(a[i].Fam);
    write('Адрес покупателя: ');
    readln(a[i].adr);
    write('Дата постановки на учет: ');
    readln(a[i].data);
    writeln;
   end;


 for i:=1 to n do
  writeln(a[i].Nomer:2,'  ',a[i].Fam,'  ',a[i].adr,'  ',a[i].data);

 writeln;

 i:=1;
 Repeat
  d:=0;
  for j:=i+1 to n do
   if (a[i].fam=a[j].fam) and (a[i].adr=a[j].adr) then
    begin
     if j<n then
      for k:=j+1 to n do a[k-1]:=a[k];
     Inc(d);
    end;
  Dec(n,d);
  Inc(i);
 Until i>=n;

 for i:=1 to n do
  writeln(a[i].Nomer:2,'  ',a[i].Fam,'  ',a[i].adr,'  ',a[i].data);
 readln;
end.
У меня работает безупречно.
Миниатюры
pigs.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 08.04.2011, 23:12   #8 (permalink)
zena
Member
 
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
По умолчанию

Цитата:
for i:=1 to n do
writeln(a[i].Nomer:2,' ',a[i].Fam,' ',a[i].adr,' ',a[i].data);
Кажется просто этой строки не хватило.
zena вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 16:39.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.