|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.03.2010, 20:12 | #1 |
Новичок
Джуниор
Регистрация: 21.05.2009
Сообщений: 2
|
Поиск с алфавитной индексацией
Задание.
- задан массив символов, элементы которого должны быть введены с клавиатуры; - результатом работы программы поиска является либо строка 'элемент найден', либо 'элемент не найден'; - символ для поиска должен вводиться с клавиатуры; - результат программы сортировки - исходный и отсортированный массивы; - количество элементов в массиве не менее 10. Алгоритм: Поиск с алфавитной индексацией (количество символов в 1-ой строке: 3) Поиск с алфавитной индексацией. Данный алгоритм налагает дополнительное ограничение - таблица должна быть отсортирована алгоритмом с алфавитной индексацией, т.е. строки, начинающиеся с одного и того же символа, должны быть сгруппированы и должен быть создан массив входов в таблицу. Поиск складывается из следующих шагов: − из ключа поиска выделяется первый символ и преобразуется в номер (индекс) элемента массива входов; − из заданного предыдущим шагом элемента массива входов извлекается номер первой строки из группы начинающихся с данного символа строк; − выполняется линейный поиск в заданной группе строк. Вот что у меня получилось. Помогите исправить/дополнить. program rq; var a:array[1..26]of integer; b:array[1..5]of string; b1:array[1..5]of string; s,key,y,w,q:string; i,j,k,l,t,ind,x,c,n,p:integer; f,z:char; begin writeln('Vvedite massiv'); for j:=1 to 5 do begin write ('b[',j,']='); readln (b[j]); end; l:=1; for j:=1 to 5 do begin s:=b[j]; f:=s[1]; i:=ord(f)-ord('a')+1; if (a[i]=0) then begin a[i]:=l; b1[l]:=b[j]; end else begin n:=a[i]; for k:=5 downto n do begin if k=5 then q:=b1[5] else b1[k+1]:=b1[k]; end; for p:=1 to 26 do begin if (a[p]>n) then a[p]:=a[p]+1; end; b1[n]:=b[j]; end; l:=l+1; end; for j:=1 to 5 do writeln (b1[j]); writeln ('vvedite iskomoe slovo'); readln (key); z:=key[1]; ind:=ord(z)-ord('a')+1; x:=a[ind]; for c:=x to 5 do begin y:=b1[c]; if y=key then begin writeln ('Iskomoe slovo'); write (y); end; end; readln; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск в БД | Lomka | БД в Delphi | 1 | 24.11.2009 23:18 |
поиск | spree | Microsoft Office Excel | 22 | 16.11.2009 15:08 |
поиск | Screame | Microsoft Office Excel | 11 | 20.08.2009 12:42 |
[C++] Модуль поддержки сильно ветвящихся деревьев с индексацией элементов | Adminx | Помощь студентам | 1 | 19.06.2009 13:17 |
поиск | Азамат | Microsoft Office Excel | 7 | 18.06.2008 13:44 |