uses Crt; const B = 10; type zapis = record element: string[255]; next: ^zapis; end; TABL = array[0..B-1] of ^zapis; var End_Menu: boolean; ch: char; x: string[255]; A: TABL; n,i: integer; Function h ( x: string ): 0..B-1; var i, sum: integer; begin sum:= 0; for i:= 1 to length(x) do sum:= sum + ord( x[i] ); h:= sum mod B ; end; procedure Sozdanie ( var A: TABL ); var i: integer; begin for i:= 0 to B - 1 do A[i]:= nil end; function nalichie ( x: string; var A: TABL ): boolean; var ukaz: ^zapis; begin //нач знач ukaz равно заголовку сегмента ukaz:= A[h(x)]; nalichie:=false ; while ukaz <> nil do begin if ukaz^.element = x then nalichie:=true ; ukaz:= ukaz^.next; end; end; procedure Dobavlenie ( x: string; var A: TABL ); var nomerSegm: integer; starZnac: ^zapis; begin if not nalichie(x, A) then begin nomerSegm:= h(x); starZnac:= A[nomerSegm]; new( A[nomerSegm] ); A[nomerSegm] ^.element:= x; A[nomerSegm] ^.next:= starZnac ; writeln('элемент добавлен'); end else writeln ('такой элемент уже записан'); end; procedure Udalenie ( x: string; var A: TABL ); var nomerSegm: integer; ukaz,ud: ^zapis; f: boolean; begin nomerSegm:= h(x); f:= true; if A[nomerSegm] <> nil then begin if A[nomerSegm] ^.element = x then A[nomerSegm]:= A[nomerSegm] ^.next else begin ukaz:= A[nomerSegm]; while (ukaz^.next <> nil ) do if ukaz^.next^.element = x then begin ud:=ukaz^.next; ukaz^.next := ukaz^.next^.next; dispose(ud); exit; end else ukaz:= ukaz^.next end end end; procedure PRINT; var i: integer; ukaz: ^zapis; begin Writeln(' хеш-таблица:'); for i:=0 to B-1 do begin writeln; write (i,':'); if A[i]<>nil then ukaz:=A[i]; while ukaz<>nil do begin write(ukaz^.element, ' '); ukaz:=ukaz^.next; end; end; end; Procedure Menu_1; begin clrscr; End_Menu:=False; repeat writeln; writeln; Writeln('***********************************************'); writeln( '*****************Главное меню******************'); Writeln('***********************************************'); writeln(' '); writeln(' выберите вид работы: '); writeln(' 0- вставка элемента '); writeln(' 1- Проверка на существование элемента '); writeln(' 2- удаление элемента '); writeln(' 3- просмотреть все элементы '); writeln(' 4- выход '); writeln('***********************************************'); readln(ch); Case ch of '0': begin var i: integer; writeln(' сколько элементов вы хотите ввести? '); readln(n); for i:=1 to n do begin writeln('введите эелемент для записи ' ); readln(x); Dobavlenie ( x, A ); end; end; '1': begin writeln('введите элемент для поиска'); readln(x); if nalichie ( x, A ) then writeln (' элемент существует') else writeln('элемент не существует'); end; '2': begin writeln('введите элемент для удаления'); readln(x); Udalenie ( x, A ); writeln('элемент удален'); end; '3': begin Print; end; '4': begin End_menu:=true;clrscr; Writeln('работа завершена, закройте программу!'); end; end; until End_Menu; clrscr; end; BEGIN Sozdanie ( A); Menu_1; end.