08.04.2011, 12:15 | #1 (permalink) |
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. |
08.04.2011, 12:15 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На форуме ранее создавались топики которые так или иначе похожи на ваш Строки и записи. Записи Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Посчитать количество различных цифр в записи. Паскаль, программа почти написана. Записи |
08.04.2011, 12:37 | #2 (permalink) |
Специалист
Регистрация: 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; |
08.04.2011, 12:44 | #3 (permalink) | |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Цитата:
|
|
08.04.2011, 12:54 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ох - ну конечно, напортачил! Там 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; |
08.04.2011, 12:58 | #5 (permalink) |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Ну я это сразу заметила
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.04.2011, 22:02 | #6 (permalink) |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Тут возникла такая проблемка: если ввести, например 3, разные записи, то выводится только одна. А если ввести 3 записи, две из которых одинаковые, то они обе удаляются(а нужно чтобы удалялась только одна запись).
Не подскажете как это можно подправить? |
08.04.2011, 22:55 | #7 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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. |
|
08.04.2011, 23:12 | #8 (permalink) | |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|