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

Цитата:
Сообщение от lerenia Посмотреть сообщение
допустим в первой процедуре узнать все фамилия проживающие в разных городах; во второй процедуре (работая уже с фамилиями из первой процедуры) вывести все фамилии с одинаковыми адресами а в третьей процедуре упорядочить фамилии. Ну а в последней процедуре создать новый файл и перезаписать в него данные. Мой вопрос заключается в следующем: как сравнить города и адреса? Я не понимаю этот нюанс. Нам дано неизвестное количество людей(т.е. решать нужно для любого числа) . Подскажите как отфильтровать
Вы знаете, не имея программы, очень трудно дать ответ.
Но так, в общем, очень просто:
строится цикл типа
Код:
for i:=1 to n-1 do
 for j:=i+1 to n do
  If (data[i].address=data[j].address) and (data[i].town<>data[i].town) then
   begin
     Ink(k);
     Q[k]:=data[i];
     Ink(k);
     Q[k]:=data[j];
   end;
Здесь во вспомогательном массиве записей Q мы собрали данные о людях, имеющих одинаковые адреса, но в разных городах. Беда только в том, что если таких людей (имеющих одинаковый адрес в разных городах) больше двух, то возникнут повторы, которые нужно как-то исключить. Это можно сделать, например, так. Пусть количество элементов в массиве Q равно k - так и получится после предыдущей фильтрации. Тогда
Код:
i:=0;
Repeat
 Inc(i);
 for j:=i+1 to k do
  if Q[j]=Q[i] then
   begin
     for m:=j+1 to k do Q[m-1]:=Q[m];
     Dec(k);
   end;
Until i>=k-1;
Попробуйте. К сожалению, честно признаюсь, сейчас я сильно занят и возможности тестирования нет, так что Вы уж сами.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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