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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2014, 14:50   #1
Najl
 
Регистрация: 09.06.2014
Сообщений: 4
По умолчанию аварийный выход

Код:
procedure poisk;  //  Процедура поиска жильца
var
  s0, s1: string;
  i: integer;
  fnd: boolean;
begin
  fnd:= false;   
  for i := 0 to 4 do  //  Ищем по одноместным номерам
    if (Pos(s, mas1[i]) <> 0) AND ((mas1[i][length(s) + 1] = ' ')
                        OR (length(mas1[i]) = length(s))
                            OR (mas1[i][length(s) + 1] = '.')) then
    {Нашли вхождение фамилии в массиве}
      begin
        if fnd then
          begin
            crt.textcolor(5);;
            writeln('Таких жильцов несколько! Введите инициалы жильца');
            readln(s0);  //  Запомнили введёные данные с клавиатуры
           
            s:= s + ' ' + s0;  //  Добавили к фамилии инициалы
            poisk;  //  Запуск процедуры поиска с начала
            exit;
          end;
          crt.TextColor(Green);
        s1:= ('Жилец с фамилией ' + s + ' проживает в номере') + IntToStr(i + 1);
        fnd:= true;
      end;
 
for i:= 0 to 9 do  //  Ищем по двухместным номерам
    begin
      if (Pos(s, mas2[0, i]) <> 0) AND ((mas2[0, i][length(s) + 1] = ' ')
                                                      OR (length(mas2[0, i]) = length(s))
                                                        OR (mas2[0, i][length(s) + 1] = '.')) then
      {Нашли вхождение фамилии в массиве}
         begin
          if fnd then
            begin
              crt.textcolor(5);
              writeln('Таких жильцов несколько! Введите инициалы жильца');
              readln(s0);  //  Запомнили введёные данные с клавиатуры
          
              s:= s + ' ' + s0;  //  Добавили к фамилии инициалы
              poisk;  //  Запуск процедуры поиска с начала
              exit;
            end;
            crt.TextColor(Green);
          s1:= ('Жилец с фамилией '  +  s  +  ' проживает в номере  ') + IntToStr(i + 6);
          fnd:= true;
        end;
      if (Pos(s, mas2[1, i]) <> 0) AND ((mas2[1, i][length(s) + 1] = ' ')
                                                      OR (length(mas2[1, i]) = length(s))
                                                        OR (mas2[1, i][length(s) + 1] = '.')) then
      {Нашли вхождение фамилии в массиве}
        begin          if fnd then
            begin
              crt.textcolor(5);
              writeln('Таких жильцов несколько! Введите инициалы жильца');
              readln(s0);  //  Запомнили введёные данные с клавиатуры
           
              s:= s + ' ' + s0;  //  Добавили к фамилии инициалы
              poisk;  //  Запуск процедуры поиска с начала
              exit;
            end;
            crt.TextColor(Green);
          s1:= ('Жилец с фамилией'  +  s  +  ' проживает в номере  ') + IntToStr(i + 6);
          fnd:= true;
        end;
    end;
  if not fnd then
    
    writeln('Жильца с фамилией ' + s + ' нет')  //  Вывод результата поиска
  else
    begin
      writeln(s1);  //  Вывод результата поиска
    end;
 
end;
 
procedure spisok;  //  Процедура вывода списка всех жильцов
var
  i: integer;
begin
  writeln('Одноместные номера');
  for i:= 0 to 4 do  //  Выводим по одноместным
    writeln('№' + IntToStr(i + 1) + ' ' + (mas1[i]));
  writeln('');  //  Вывели на экран пустую строку
  writeln('Двухместные номера');
  for i:= 0 to 9 do  //  Выводим по двухместным
    writeln('№' + IntToStr(i + 6) + ' ' + (mas2[0, i]) + ' ' + (mas2[1, i]));
end;
Чем можно заменить в трёх местах "Exit" (аварийный выход)? Без выхода из процедуры у меня поиск жильцов работает не корректно. Можно запихнуть это всё в один одномерный массив, но тогда сам список жильцов, который тоже надо выводить будет выследить не так красиво, как хотелось бы.

Последний раз редактировалось Stilet; 13.06.2014 в 15:19.
Najl вне форума Ответить с цитированием
Старый 13.06.2014, 15:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Та самое простое - развести процедуру по трем разным процедурам и последовательно их вызывать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 22:32   #3
Najl
 
Регистрация: 09.06.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Та самое простое - развести процедуру по трем разным процедурам и последовательно их вызывать.
А как я потом буду во всех 3 процедурах искать и выводить только один раз значение, которое мне нужно.
У меня не получается избавиться от Exit даже тогда, когда Запихиваю все всё в один массив
[code]procedure poisk; // Процедура поиска жильца
var
s0, s1: string;
i: integer;
fnd: boolean;
begin
fnd:= false;

for i := 0 to 4 do // Ищем по одноместным номерам
if (Pos(s, mas1[i]) <> 0) AND ((mas1[i][length(s) + 1] = ' ')
OR (length(mas1[i]) = length(s))

OR (mas1[i][length(s) +%2

Последний раз редактировалось Stilet; 13.06.2014 в 22:44.
Najl вне форума Ответить с цитированием
Старый 13.06.2014, 23:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как я потом буду во всех 3 процедурах искать и выводить только один раз значение, которое мне нужно.
А ты финкции используй. Функа пусть возвращает результат True если найдено.
Тогда даже условие типа
Код:
if func1() or func2() or func3()...
выдаст результат если хотя бы одна из функций нашла нужные тебе данные не запуская на выполнение следующие по порядку в операторе функции.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из Excel alkador Общие вопросы Delphi 2 10.03.2012 09:30
Кнопка Выход(на выход Из программы)С++ Напишите код ProGec4 Общие вопросы C/C++ 3 19.02.2012 15:36
Выход программы. ZvEr_HaCkEr Свободное общение 26 16.10.2010 21:00
Выход из цикла Сергей089 Помощь студентам 6 17.03.2010 16:44
выход по ctrl z U-S Общие вопросы C/C++ 3 15.10.2009 15:18