2 / 2 / 1
Регистрация: 30.09.2009
Сообщений: 77
1

бинарный поиск в одномерном массиве строк

13.12.2009, 14:25. Показов 2765. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
program poisk;
{$APPTYPE CONSOLE}
uses crt;
const n=100;
type mas=array[1..n] of string;
var
slova:text;
A:mas;
i,j,h,z:integer;
s,sp:string;
b:boolean;
 
procedure sort(nword:integer; var word:mas); {лексикографическое }
var
isort,jsort:integer;
e:string;
begin
For isort:=1 to nword-1 do                       { упорядочение }
    For jsort:=isort+1 to nword do
      If word[isort]>word[jsort] then
        begin
           e:=word[isort]; word[isort]:=word[jsort]; word[jsort]:=e; { слов }
        end;
end;
 
procedure vivod(nB:integer; var P:mas);  { процедура }
var k,l,iv:integer;
begin
  k:=0; l:=1;
  for iv:=1 to nB do begin                  { вывода }
  k:=length(P[iv])+k+4;
  if k/69 > l then begin writeln; inc(l);end;
  write(iv,') ',P[iv],' '); end;
writeln;                                  { массива }
end;
 
procedure massiv( sm:string; var C:mas; var count:integer);   { процедура }
var im:integer;
begin
count:=1;                                       { заполняет }
 im:=1; while (im<=length(sm)) do begin
   if sm[im]=' ' then begin inc(count); inc(im); end;  { массив }
   C[count]:=C[count]+sm[im];
   inc(im);                                      { словами }
 end;
end;                                              { из файла }
 
 
begin
clrscr;
assign(slova,'massiv.txt');
for i:=1 to n do A[i]:='';
s:='';
reset(slova);
read(slova,s);
close(slova);
massiv(s,A,j);
sort(j,A);
vivod(J,A);
 
h:=1;
b:=False;
z:=j;
writeln('vedite slovo dla poiska: '); readln(sp);
while (h<=z)and not b do
begin
  i:=z+(h-z) div 2;
  if A[i]=sp then begin  b:=True; writeln('slovo naideno pod nomerom ',i) end
  else
    if sp<A[i] then h:=i-1 else z:=i+1;
end;
 
if b=false then writeln('zadanogo slova net v massive');
 
end.
сначала все работает нормально, выводит и сортирует массив, но после ввода слова для поиска почему то нечего не происходит... где тут может быть ошибка?

Добавлено через 32 минуты
............
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2009, 14:25
Ответы с готовыми решениями:

бинарный поиск в массиве записей
Товари програмисты хел плиз! вот задача- В памяти ЭВМ хранятся списки номеров телефонов и...

Бинарный поиск чисел в массиве
Привет! Никак не могу доработать программу: выводит только ответ для последнего значения второго...

Поиск в одномерном массиве
Собственно сама задача...Помогите чем можете. Сделать с процедурами. Задан целочисленный...

Задачи на поиск в одномерном массиве
Создать одномерный массив из 10 чисел со значениями в диапазоне (-11;55]. В созданном массиве...

6
Почетный модератор
64301 / 47596 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.12.2009, 14:46 2
Попробуйте написать в строке 56 readln(slova,s);
0
2 / 2 / 1
Регистрация: 30.09.2009
Сообщений: 77
13.12.2009, 14:48  [ТС] 3
не, все равно не работает
0
93 / 26 / 1
Регистрация: 19.05.2009
Сообщений: 138
13.12.2009, 15:11 4
TepkuH


Код
program poisk;
{$APPTYPE CONSOLE}
uses crt;
сочетаем несочетаемое? вы же пишете на делфи!
интересно как у вас
все работает нормально, выводит и сортирует массив,
еще советик
вот это
Код
writeln('vedite slovo dla poiska: '); readln(sp);
while (h<=z)and not b do
begin
  i:=z+(h-z) div 2;
  if A[i]=sp then begin  b:=True; writeln('slovo naideno pod nomerom ',i) end
  else
    if sp<A[i] then h:=i-1 else z:=i+1;
end;
 
if b=false then writeln('zadanogo slova net v massive');
оформите как процедуру, будет проще и грамотней
0
2 / 2 / 1
Регистрация: 30.09.2009
Сообщений: 77
13.12.2009, 21:41  [ТС] 5
Цитата Сообщение от diliana Посмотреть сообщение

сочетаем несочетаемое? вы же пишете на делфи!
в делфи можно писать на паскале в режиме совместимости
0
2 / 2 / 1
Регистрация: 30.09.2009
Сообщений: 77
14.12.2009, 10:34  [ТС] 6
пробовал запустить в паскале, пишет что файл не найден...
0
2 / 2 / 1
Регистрация: 30.09.2009
Сообщений: 77
14.12.2009, 15:47  [ТС] 7
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
h:=1;
b:=False;
z:=j;
write('vedite slovo dla poiska: '); readln(sp);
while (h<=z)and not b do
begin
  i:=h+(z-h) div 2;
  if A[i]=sp then begin  b:=True; writeln('slovo naideno pod nomerom ',i) end
  else
    if sp<A[i] then z:=i-1 else h:=i+1;
end;
 
if b=false then writeln('zadanogo slova net v massive');
все, я понял в чем ошибка была, надо было весго лишь h и z местами поменять)))
0
14.12.2009, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2009, 15:47
Помогаю со студенческими работами здесь

Поиск максимальных (минимальных) элементов в одномерном массиве
помогите пожалуйста с задачей....:( среди элементов массива yi найти первые два y1min, y2min наи-...

Поиск в одномерном целочисленном массиве кольца максимальной длины
Прошу мне помочь решить эту задачу... Поиск в одномерном целочисленном массиве кольца...

Просуммировать элементы матрицы строк размером 4*3. Результат получить в одномерном массиве размером 4
Помогите люди добрые! Завтра сдавать, а я маягко говоря не шарю, прошу профессионалов выручить...

Поиск буквы в массиве строк
Не поможите другу сделать задачку(цикл)? У него чего-то всегда не хватает. Вот такую,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru