Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 6

Можно ли в цикле сортировки списка для типизированного файла сделать исключение дублирования записей

20.03.2014, 20:35. Показов 1614. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается доработать цикл в программе
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
repeat
 write('фамилия'); readln(zb.name);
 write('телефон'); readln(zb.phone);
 if zb.name<>'' then write(f,zb);
      for i:=0 to filesize(f)-2 do
       for j:=i+1 to filesize(f)-1 do
         begin
           seek(f,i);
           read(f,x);
           seek(f,j);
           read(f,y);
          if x.name > y.name then
               begin
                 sp:=x;
                 x:=y;
                 y:=sp;
                 seek(f,i);
                 write(f,x);
                 seek(f,j);
                 write(f,sp) ;
               end;
           end;
until zb.phone = '';

Пытаюсь сделать в этом цикле сортировки, чтоб запись отсекалась если имена совпадают. Но никак не разумею как вообще организовать такой цикл.Я так понял отсечение делается через процедуру Truncate, но как дублированную запись переместить в хвост файла , с помощью перезаписи каждой записи и потом и отсечь ? Или сравнивать записи в файле с еще не записанной новой записью после ввода в буфер
Pascal
1
2
write('фамилия'); readln(zb.name);
 write('телефон'); readln(zb.phone);
Или же все-таки нужно сделать следующий цикл за этим?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2014, 20:35
Ответы с готовыми решениями:

Сделать в программе сортировку списка типизированного файла
program phone; uses crt; type book=record name:string; phone:string; end; var f:file of book; zb:book;

Создать программу для создания и редактирования типизированного файла записей
Можете помочь ,Необходимо создать программу для создания и редактирования типизированного файла записей ,используя stringgrid + как можно...

Можно ли в StringGrid после создания типизированного файла выделить элемент списка и заменить его или удалить?
Скажите пожалуйста,можно в stringgrid после создания типизированного файла выделить элемент списка и заменить его или удалить? Если да,то...

6
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
20.03.2014, 20:57
Сортировка пузырьком слабо подходит для отсечения дубликатов в самом процессе, проще сделать один дополнительный проход.
1
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 6
20.03.2014, 21:47  [ТС]
Я сделал вот такой проход, вслед за предыдущим циклом
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
close(f);
   {$I-} reset(f); {$I+}
   seek(f,filesize(f));
   for i:=0 to filesize(f)-2 do
    for j:=i+1 to filesize(f)-1 do
      begin
        seek(f,i);
        read(f,x);
        seek(f,j);
        read(f,y);
       if x.name=y.name then
        for n:=filepos(f) to filesize(f)-1 do
          begin
            seek (f,n);read(f,kar);
            seek(f,n-1);write(f,kar);
          end;
        end;
     truncate(f);
    close(f);


Но не работает ,дубликат не отсекается. Не подскажите , где собака зарыта?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
20.03.2014, 22:03
Лучший ответ Сообщение было отмечено Uchenik-pascal как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
...
  Seek(f,0); Read(f,rp); j:=0;
  for n:=1 to filesize(f)-1 do begin
    Seek(f,n); Read(f,rc);
    if rp=rc then inc(j) { пропустим, увеличим счетчик пропущенных }
    else if j>0 then begin
      Seek(i-j); Write(f,rc); rp:=rc; { вернемся и запишем }
    end;
  end;
  Truncate(f);
  Close(f);
ps. Писал в браузере, проверьте.
1
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 6
20.03.2014, 22:42  [ТС]
Спасибо.Интересный цикл ,впервые сталкиваюсь с функцией inc (это есть увеличение счетчика на 1 да?).
В строчке if rp=rc then inc(j), компилятор выдает ошибку 41 (типы операндов не соответствуют операции,операнды этого типа не могут быть переданы в данный оператор.например 'A' div '2')
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
20.03.2014, 23:12
Лучший ответ Сообщение было отмечено Uchenik-pascal как решение

Решение

Там имелось в виду сравнение сортируемых записей по ключу сортировки. В вашей программе описание типа не приведено, поэтому ни я, ни компилятор, не знаем как их сравнивать :-)
Если нужно устранить дубликаты только по имени, замените на
rp.name=rc.name
Если дубликатом считается совпадение и имени и телефона, замените на
(rp.name=rc.name) and (rp.phone=rc.phone)
и т.д.

Добавлено через 7 минут
Можно определить функцию сравнения и использовать ее для и для сортировки, и для устранения дубликатов, например:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
function cmp(const a, b: SomeRec): integer;
begin
  if a.name<b.name then cmp:=-1
  else if a.name>b.name then cmp:=1
  else if a.phone<b.phone then cmp:=-1
  else if a.phone>b.phone then cmp:=1
  else cmp:=0;
end;
...
  if cmp(x,y)>0 then begin
...
  if cmp(x,y)=0 then inc(j)
...
Добавлено через 5 минут
У inc() и dec() также есть альтернативный синтаксис, позволяющий увеличивать/уменьшать не только на 1:
Pascal
1
2
inc(что, на_сколько);
dec(что, на_сколько);
1
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 6
20.03.2014, 23:36  [ТС]
Поклон вам до земли ,вы мне очень помогли .Попробую использовать в программе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2014, 23:36
Помогаю со студенческими работами здесь

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

Ошибка в процедуре сортировки типизированного файла.
Вот процедура : Procedure sort(var h:f); begin reset(h); for i:=1 to filesize(h)-2 do for j:=i+1 to filesize(h)-1 do begin...

Чтение записей из типизированного файла
Здравствуйте. Пытаюсь реализовать чтение записей из типизированного файла. Использую массив, дабы потом провести сортировку по одному из...

Удаление записей из типизированного файла
Из файла, в котором есть исходные данные, удалить записи, которые отвечают студентам 17ти лет, которые имеют аттестат с отличием 1...

Обработка типизированного файла из записей
1. Составить процедуру для формирования типизированного файла, компонентами которого являются записи вида: Type BOOK = record Name:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru