Найдите в базе всех жителей, живущих в разных городах по одинаковому адресу. - Pascal
Формулировка задачи:
Есть база данных по жителям красноярского края, содержащая город, улицу,
номер дома и квартиры. Найдите в ней всех жителей, живущих в разных городах по
одинаковому адресу.
Помогите решить задачу.
Решение задачи: «Найдите в базе всех жителей, живущих в разных городах по одинаковому адресу.»
textual
Листинг программы
type TCitizen = record city, street, houseNumber: String; apartamentNumber: Word; //0 - частный дом end; var ar: Array[Byte] Of TCitizen; used: Set Of Byte; i, j: Byte; n: Integer; flag: Boolean; begin repeat Write('Введите количество жителей в базе (1..256): '); ReadLn(n); until ((n > 0) And (n < 257)); for i := 0 to n - 1 do with ar[i] do begin Write('Город? '); ReadLn(city); Write('Улица? '); ReadLn(street); Write('Номер дома? '); ReadLn(houseNumber); Write('Номер квартиры (0 - частный дом)? '); ReadLn(apartamentNumber); end; WriteLn; WriteLn; used := []; for i := 0 to n - 2 do if Not(i in used) then begin j := i + 1; repeat flag := ((ar[i].city <> ar[j].city) And (ar[i].street = ar[j].street) And (ar[i].houseNumber = ar[j].houseNumber) And (ar[i].apartamentNumber = ar[j].apartamentNumber) And Not(j in used)); Inc(j); until ((flag) Or (j >= n)); if (flag) then begin with ar[i] do Write(street, ', ', houseNumber, '/', apartamentNumber, ': ', i + 1, ' - ', city); Include(used, i); with ar[j - 1] do Write('; ', j, ' - ', city); Include(used, j - 1); while (j < n) do begin if ((ar[i].city <> ar[j].city) And (ar[i].street = ar[j].street) And (ar[i].houseNumber = ar[j].houseNumber) And (ar[i].apartamentNumber = ar[j].apartamentNumber) And Not (j in used)) then begin Write('; ', j + 1, ' - ', ar[j].city); Include(used, j); end; Inc(j); end; WriteLn; end; end; end.
Объяснение кода листинга программы
- Определение типа данных
TCitizen
как структуры с полямиcity
,street
,houseNumber
иapartamentNumber
. - Объявление переменных
ar
- массива структурTCitizen
иused
- множества байт. - Объявление переменных
i
,j
- байт,n
- целое число иflag
- булево значение. - Ввод с клавиатуры значения переменной
n
до тех пор, пока оно не будет в диапазоне от 1 до 256 включительно. - Цикл для заполнения массива
ar
данными о жителях (город, улица, номер дома, номер квартиры). - Инициализация множества
used
как пустого. - Цикл для сравнения всех жителей из базы с целью нахождения совпадений по адресам.
- Проверка наличия совпадающих адресов и вывод информации о жителях, обитающих по одинаковым адресам.
- Обновление множества
used
после обнаружения совпадений. - Завершение работы программы. В данном коде реализован поиск жителей, проживающих по одинаковым адресам, и вывод информации о совпадениях.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д