Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 12:26   #1
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию поиск слова(паскаль)

мне нужно написать программу, которая ищет слово в массиве(массив заполняется из файла), если слово найдено то нужно написать что слово найдено и под каким номером, если слова такого нет, то его нужно добавить.
я вот тут что-то написал, но она почему то не находит слова, а только добавляет, в чем здесь ошибка?
Код:
program poiskword;
uses crt;
const n=1000;
type mas=array[1..n] of string;
var
slova:text;
A:mas;
i,j,h,p:integer;
s,sp:string;
b:boolean;

procedure sort(nword:integer; var word:mas); {лексикографическое }
var
isort,jsort:integer;
c:string;
begin
For isort:=1 to nword-1 do                       { упорядочение }
    For jsort:=isort+1 to nword do
      If word[isort]>word[jsort] then
        begin
           c:=word[isort]; word[isort]:=word[jsort]; word[jsort]:=c; { слов }
        end;
end;

procedure vivod(nB:integer; var B:mas);  { процедура }
var k,l,iviv:integer;
begin
  k:=0; l:=1;
  for iviv:=1 to nB do begin                  { вывода }
  k:=length(B[iviv])+k+4;
  if k/69 > l then begin writeln; inc(l);end;
  write(iviv,') ',B[iviv],' '); end;
writeln;                                  { массива }
end;

begin
assign(slova,'massiv.txt');
repeat
reset(slova);
p:=0;
repeat
  inc(p);
  readln(slova,s);
  a[p]:=s;
  if a[p]='' then begin J:=p-1; break; end;
until a[p]='';
close(slova);
sort(j,A);
vivod(J,A);

write('vedite slovo dla poiska: '); readln(sp);
append(slova);
for i:=1 to j do if A[i]=sp then begin b:=true; h:=i; end else b:=false;
if b=true then writeln('slovo naideno pod nomerom ',h)
          else writeln(slova,sp);
close(slova);
clrscr;
until keypressed;
readln;
end.
MetR вне форума Ответить с цитированием
Старый 03.12.2009, 12:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

И опять я привожу код разбивающий строку на слова:
http://www.programmersforum.ru/showt...369#post398369
Оберни его в функцию, и получив массив, пройдись по нему циклом.
Смысл понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.12.2009, 21:06   #3
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

я написал процедуру, но у меня почему то массив не заполняется...

Последний раз редактировалось MetR; 04.12.2009 в 14:13.
MetR вне форума Ответить с цитированием
Старый 04.12.2009, 08:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может быть потому что для изменяемых параметров нужно для каждого указывать var
Код:
procedure massiv( sm:string; var C:mas; var count:integer);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.12.2009, 14:16   #5
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

оО Спасибо) а я думал что надо 1 раз писать вар перед изменяемыми параметрами... но все таки проблема осталась прежней, он не находит совпадающие слова...

Код:
program poiskword;
uses crt;
const n=1000;
type mas=array[1..n] of string;
var
slova:text;
A:mas;
i,j,h,p:integer;
s,sp:string;
b:boolean;

procedure sort(nword:integer; var word:mas); {лексикографическое }
var
isort,jsort:integer;
c:string;
begin
For isort:=1 to nword-1 do                       { упорядочение }
    For jsort:=isort+1 to nword do
      If word[isort]>word[jsort] then
        begin
           c:=word[isort]; word[isort]:=word[jsort]; word[jsort]:=c; { слов }
        end;
end;

procedure vivod(nB:integer; var B:mas);  { процедура }
var k,l,iv:integer;
begin
  k:=0; l:=1;
  for iv:=1 to nB do begin                  { вывода }
  k:=length(B[iv])+k+4;
  if k/69 > l then begin writeln; inc(l);end;
  write(iv,') ',B[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
assign(slova,'massiv.txt');
repeat
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);

write('vedite slovo dla poiska: '); readln(sp);
append(slova);
for i:=1 to j do if A[i]=sp then begin b:=true; h:=i; end else b:=false;
if b=true then writeln('slovo naideno pod nomerom ',h)
          else write(slova,' '+sp);
close(slova);
clrscr;
until keypressed;
readln;
end.
MetR вне форума Ответить с цитированием
Старый 04.12.2009, 16:52   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
for i:=1 to j do if A[i]=sp then begin b:=true; h:=i; end else b:=false;
если слово найдено, цикл надо прерывать.
Или так можно
Код:
write('vedite slovo dla poiska: '); readln(sp);
append(slova);
b:=false;
for i:=1 to j do if A[i]=sp then
begin
  b:=true;
  writeln('slovo naideno pod nomerom ',i) // на случай совпадения слов
end;
if not b then write(slova,' '+sp);
close(slova);
eoln вне форума Ответить с цитированием
Старый 04.12.2009, 22:26   #7
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
если слово найдено, цикл надо прерывать.
точно, совсем забыл про это, не первый же раз с такой ошибкой сталкиваюсь)))

Stilet, eoln спасибо вам большое, теперь все прекрасно работает)))
MetR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск слова в Memo Rebel123 Общие вопросы Delphi 21 05.05.2012 20:30
Поиск слова в файле virtuhay266 Общие вопросы Delphi 3 28.05.2009 11:27
Поиск слова. Gon Паскаль, Turbo Pascal, PascalABC.NET 3 05.10.2008 17:14
Поиск 'Слова' JakSon Работа с сетью в Delphi 1 20.04.2008 00:13
Поиск слова в окне Иллидан Общие вопросы Delphi 21 07.03.2008 22:43