Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск 
:(
    Опции темы
COOLJohn
Дата 17.1.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 30.12.2005

Репутация: нет
Всего: нет



Кто подскажет выход их такой ситуации?
Я пытаюсь составить прогу, которая должная после ввода фамилии или имени найти в своей "БД" строку, содержащую такую фамилию или имя и выявить эту строку на экран. Но у меня такого не происходит, поэтому я решил обратится на этот форум программистов.

Код

PROGRAM SEARCH;
USES CRT;
VAR A:ARRAY [1..3] OF STRING; X:STRING; B,M,I,J:INTEGER;
N:ARRAY [1..3] OF INTEGER; F:BOOLEAN;
BEGIN
clrscr;
A[1]:='ГУСЕВ ЕВГЕНИЙ';
A[2]:='ГАНЬЖИН АРТЁМ';
A[3]:='ШИМОВА АЛЕКСАНДРА';
WRITE('ВВЕДИТЕ СТРОКУ ДЛЯ ПОИСКА: ');
READLN(X);
FOR B:=1 TO 3 DO
N[B]:=LENGTH(A[B]);
M:=LENGTH(X);
I:=0;
F:=FALSE;
FOR B:=1 TO 3 DO
BEGIN
J:=1;
WHILE (J<=M) AND (A[B][I+J]=X[J]) DO INC(J);
IF J=M+1 THEN F:=TRUE ELSE INC(I);
IF F OR (I>N[B]-M) THEN WRITELN(A[B])
ELSE WRITELN('АБОНЕНТ НЕ НАЙДЕН');
END;
READLN;
END.


Исправте, пожалуйста, те места в которых есть ошибки.
PM MAIL   Вверх
Zero
Дата 17.1.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Ну если твоя БД это массив, тогда используй процедуру Pos, для поиска подстроки в строке.
Параметры посмотри в HELP'е, т.к. ща не помню, а в офисе компилятора паскаля у меня нет.
PM MAIL ICQ   Вверх
Romtek
Дата 17.1.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Код


Program SEARCH;

Var A:   ARRAY [1..3] Of STRING;
    X:   STRING;
    B,M,I,J:   INTEGER;
    N:   ARRAY [1..3] Of INTEGER;
    F:   BOOLEAN;
Begin
    A[1] := 'ГУСЕВ ЕВГЕНИЙ';
    A[2] := 'ГАНЬЖИН АРТЁМ';
    A[3] := 'ШИМОВА АЛЕКСАНДРА';
    WRITE('ВВЕДИТЕ СТРОКУ ДЛЯ ПОИСКА: ');
    READLN(X);
    
    F := false; {сначала полагаем, что не найден }
    For i:=1 To 3 Do
    begin
     M := pos (x, A[i]); {ищем позицию вхождения подстроки X в строку A[i] }
     if M <> 0 then
          F := true; { нашёлся, таки ж}
    end;
     
     if F then
          writeln ('Найден абонент: ', A[i])
     else     
          WRITELN('АБОНЕНТ НЕ НАЙДЕН');

     READLN;
End.

Добавлено @ 13:47
Кстати, желательно перед проверкой привести все символы к верхнему регистру, т.к. функция pos регистро-чувствительна (case-sensitive):
напиши свою function UpCaseRus (str: string): string;
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Zero
Дата 17.1.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Romtek @ 17.1.2006, 14:43 Найти цитируемый пост)

if F then
          writeln ('Найден абонент: ', A[i])

Это написано нехорошо, такую штуку лучше писать в блоке
Цитата(Romtek @ 17.1.2006, 14:43 Найти цитируемый пост)

begin
    M := pos (x, A[i]); {ищем позицию вхождения подстроки X в строку A[i] }

Т.к. абоненты могут быть с похожей фамилией.
Добавлено @ 14:46
Код

For i:=1 To 3 Do
    begin
     M := pos (x, A[i]); {ищем позицию вхождения подстроки X в строку A[i] }
     writeln ('Найден абонент: ', A[i]);
     if M <> 0 then
          F := true; { нашёлся, таки ж}
    end;
     
     if F=false then
          WRITELN('АБОНЕНТ НЕ НАЙДЕН');


Это сообщение отредактировал(а) Zero - 17.1.2006, 14:47
PM MAIL ICQ   Вверх
volvo877
Дата 17.1.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Zero, все чего ты добился - при проверке каждого абонента будешь получать сообщение "Найден абонент: ", независимо от результата проверки...
PM MAIL   Вверх
Zero
Дата 17.1.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(volvo877 @ 17.1.2006, 19:33 Найти цитируемый пост)

Zero, все чего ты добился - при проверке каждого абонента будешь получать сообщение "Найден абонент: ", независимо от результата проверки...

Сорри, я писал из офиса, а у нас там нет компилятора паскаля, там только 1С:Предприятие. Ну а тут, видимо перепутал, нужно строку writeln перенести, посли If, типа такого:
Код

For i:=1 To 3 Do
    begin
     M := pos (x, A[i]); {ищем позицию вхождения подстроки X в строку A[i] }
     if M <> 0 then
          begin
              writeln ('Найден абонент: ', A[i]);
              F := true; { нашёлся, таки ж}
          end;
    end;

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.