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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 08:18   #21
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Wow!! Ану делитесь грибами. А с меня хавчик потом, когда налетаемся.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2012, 08:26   #22
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
while (i<> n+1) and (state <> 4)
очевидно, что ваша программа закончится когда i станет равным n+1 или когда state станет равным 4 (в условии while заданы условия, пока программа выполняется, значит, обратные условия - Not (основное_условие) и даст условие прекращение цикла (программы).
ещё учтём, что условие State = 4 выполняется, когда подстрока найдена, но, раз преподаватель сказал, что данной подстроки нет, значит, условие прекращение программы: i станет равным n+1

imho, разумеется
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2012, 08:30   #23
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Я бы сказал, что вариант развития событий напрямую от реализации зависит:
если индекс есть Integer, то 32767(или 8 - зависит от конкретного массива). Реализация на ассемблере упрётся в 32 бита регистра смещения (если, конечно, не извращаться с разбиением массива). Вариант на нейрокомпьютере имеет конечное решение, но лишь тогда, когда научится достаточно верно предсказывать очередной символ (боюсь даже прогнозы ставить на время).
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.10.2012, 20:29   #24
Aina Utebekova
Новичок
Джуниор
 
Аватар для Aina Utebekova
 
Регистрация: 08.10.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
очевидно, что ваша программа закончится когда i станет равным n+1 или когда state станет равным 4 (в условии while заданы условия, пока программа выполняется, значит, обратные условия - Not (основное_условие) и даст условие прекращение цикла (программы).
ещё учтём, что условие State = 4 выполняется, когда подстрока найдена, но, раз преподаватель сказал, что данной подстроки нет, значит, условие прекращение программы: i станет равным n+1

imho, разумеется

Значит моя программа закончится когда i=n+1, то есть i достигнет n+1?. но n натуральное и бесконечное число. Тогда как i достигнет n+1?
Aina Utebekova вне форума Ответить с цитированием
Старый 09.10.2012, 21:46   #25
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,374
По умолчанию

Моё предложение такое:
Код:
uses Crt;
  const sABCD='abcd';
  Type str4 = string[4];
  var buf : str4;
      ch : char;
  function ShiftStr(str:str4): str4; {сдвигаем на оду позицию влево}
  begin
      str[1] := str[2];
      str[2] := str[3];
      str[3] := str[4];
      ShiftStr:= str;
  end;

  begin
     buf := '1111';
     writeln('Вводите символы. Выход из программы Ctrl+Break или комбинация: ', sABCD);
     while true do begin
        repeat
        until Keypressed;
        buf[4] := readkey;
        if buf = sABCD Then
           break
        else
          buf := ShiftStr(buf);
     end;
     writeln('введены символы: ', buf);
  end.
В том случае, когда надо определить еще и местоположение подстроки, устроить счет. При переполнении счетчика - Break.
В моем случае поток символов - с клавиатуры. Если рассматривать поток из файла, то немного надо поправить.


Как-то так получилось...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 09.10.2012, 22:05   #26
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Aina Utebekova
Если препод всетки разродится "правильным" ответом - поделись. Посмотрим что он из себя представляет, задавая такие задачи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2012, 08:50   #27
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Значит моя программа закончится когда i=n+1, то есть i достигнет n+1?. но n натуральное и бесконечное число. Тогда как i достигнет n+1?
угу. какая программа? я ни знаю НИ ОДНОГО языка программирования. где бы можно было задать в качестве типа переменной "натуральное и бесконечное" число! Давайте Вы для начала покажите, как Вы задаёте тип переменной N в программе, а потом уже будем говорить про бесконечность!

но, мне кажется, тут всё намного проще!
если тот фрагмент программы, который Вы привели в пост #10 - это тот же код, который Вы пытались сдать преподавателю, то ответ на его вопрос ОЧЕВИДЕН! Более того, он уже прозвучал в данной теме!
причём дважды (пост #11 и пост #16)
(c) VIK_aka_TOR
Цитата:
Сообщение от VIK_aka_TOR
хотя если n положительна... то она будет продолжаться до тех пор покуда i не достигнет значения n+1 ... хотя в коде не нашел что бы i инкриментиовалось....
Цитата:
Сообщение от VIK_aka_TOR
а по поводу программы... если она записана без ошибок... то i там не изменяется в цикле и будет банальное зацикливание... и из-за этого прога "зависнет"...



p.s. хотя, всё может быть...

Цитата:
Сообщение от Stilet
Если препод всетки разродится "правильным" ответом - поделись. Посмотрим что он из себя представляет, задавая такие задачи.
присоединяюсь. Ждём! Очень интересно, какой ответ преподаватель ожидал услышать от Вас.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2012, 04:24   #28
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Уважаемые участники дискуссии,
я извиняюсь, что присоединяюсь слишком поздно и вряд ли скажу что-то новое. Но мне кажется, что все, что было сказано, было сказано не совсем явно и ясно, полунамеками. И я боюсь, что ТС не может до конца вникнуть.. Поэтому, не обижайтесь, я просто повторю.

1. Aina (кстати, как правильно произносить? Айна?), тот фрагмент программы, который ты привела написан НЕПРАВИЛЬНО. В нем пропущено увеличение переменной i в процессе поиска. Такая программа будет все время проверять ТОЛЬКО ОДНУ букву (самую первую), и ей совершенно ВСЕ РАВНО, что там в середине строки. В обычной ситуации я бы сказал - это ошибка, исправь и все, но при данной постановке задачи (и если этот фрагмент получен ОТ ПРЕПОДА), это могло быть сделано нарочно, чтоб отвечающие заметили (а остальное - для отвода глаз).

Если же это все-таки обычная ошибка (может, сделанная при копировании кода), то, я далее буду предполагать, что код выглядит примерно так:
Код:
        i:=1; state:=0;
        {i - первая непрочитанная буква, state - состояние}
        while (i<> n+1) and (state <> 4) do begin
          if state = 0 then begin
            if x[i] = a then begin
              state:= 1;
            end else begin
              state:= 0;
            end;
          end else if state = 1 then begin
            if x[i] = b then begin
              state:= 2;
            end else if x[i] = a then begin
              state:= 1;
            end else begin
              state:= 0;
            end;
          end else if state = 2 then begin
            if x[i] = c then begin
              state:= 3;
            end else if x[i] = a then begin
              state:= 1;
            end else begin
              state:= 0;
            end;
          end else if state = 3 then begin
            if x[i] = d then begin
              state:= 4;
            end else if x[i] = a then begin
              state:= 1;
            end else begin
              state:= 0;
            end;
          end;
          inc(i);  // this statement was MISSING!!
        end;
        answer := (state = 4);
2. Если фрагмент кода поиска написан правильно, то возможностей окончания цикла только ДВЕ - либо сэмпл найден, либо выполнено равенство i=n+1 . Но в этом фрагменте нигде НЕ ЗАДАЕТСЯ значение n. По-видимому, все же предполагается, что это есть ДЛИНА строки. Например, если строка имеет нулевую длину (то есть в ней нет ни одного символа, и n=0), то не произойдет ни одного захода в цикл (так как сразу выполниться условие i=n+1=0+1=1). Само НАЛИЧИЕ переменой n обуславливает то, что она ИМЕЕТ какое-то значение. И разговоры про бесконечность - пустой треп. Переменная n, если она присутствует в коде, при загрузке программы на выполнение получит определенный адрес в памяти. И по этому адресу обязательно будет лежать число - либо то, которое мы туда положим (если мы позаботились об этом), либо ноль (если программа при запуске обнулила эту область памяти, как обычно бывает), либо случайное значение (если ни первого, ни второго не произошло). Но так чтоб НЕ БЫЛО НИКАКОГО значение - так быть НЕ МОЖЕТ (либо у меня есть деньги в кармане, и я знаю, сколько, либо нету, либо я не знаю сколько - но я УЗНАЮ, когда полезу в карман). Поэтому это условие выполнится ОБЯЗАТЕЛЬНО когда-то. Правда, в реальной ситуации может случиться, что закончится участок памяти, отведенной операционной системой под нашу прогу, и задача завершится с ошибкой (защита памяти). Что наступит раньше, сказать по тому фрагменту невозможно. Я бы в твоей ситуации все же упирал на выполнение равенства i=n+1, приняв, что переменная n была инициирована правильным (хотя, может, и очень большим) значением.

3. Я не совсем понял, при чем тут разговоры про мощность множеств натуральных чисел и действительных. Да, множество натуральных чисел СЧЕТНО (или, как говорят, имеет мощность алеф-ноль), а множество действительных чисел имеет мощность континуума (или алеф-один). Но - извини, если я тебя разочарую - это не имеет ни малейшего отношения к программированию. Поскольку, как я понял, речь все-таки идет о более-менее реальной ситуации, то разговоры о теории множеств все же следует отбросить.

Мне тоже очень интересно узнать, что же все-таки имел в виду преподаватель, так что я присоединяюсь к клубу жаждущих ответа (какой вступительный взнос?))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск подстроки в строке Pozitiffe Общие вопросы C/C++ 5 18.02.2012 21:48
Поиск подстроки в строке Mister.V Общие вопросы Delphi 14 17.12.2011 13:01
Поиск подстроки в строке videolord Общие вопросы по Java, Java SE, Kotlin 2 10.04.2011 09:11
Поиск подстроки в строке valdemar593 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 03.06.2010 21:42
поиск подстроки в строке!!! StoneSour Общие вопросы C/C++ 2 15.03.2010 21:31