Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75

почему данный цикл-бесконечный?

07.05.2011, 20:59. Показов 2557. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Процедура должна выполнять поиск последнего вхождения подстроки s1 в строку s, но цикл никкак не может завершиться?? как исправить??

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure  found (var k:integer; s,s1:string; f:boolean);
var i,j:integer;
begin
  f:=false;
  for i:=length(s) downto 1 do
  begin 
    j:=length(s1);
    while (j>=1)or(not f)  do
     if (s[i]=s1[j])then
     begin
       k:=i;
       f:=true;
       j:=j-1;
     end
  end
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2011, 20:59
Ответы с готовыми решениями:

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

Как остановить бесконечный цикл?!
Написал программу, ошибся, и она запустила бесконечный цикл. На что нажать (на клавиатуре) что бы его остоновить? :(

Сортировка методом Хоара, исправить ошибку (переполнение стека, бесконечный цикл)
Сортировка методом Хоара. Нужно первую четверть рассортировать по убыванию, а всё остальное - по возрастанию. Сделал две процедуры...

19
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2011, 21:03
Pascal
1
2
3
4
5
6
7
8
9
procedure  found (var k:integer; s,s1:string; var f:boolean);
var i:integer;
begin
  f:=false;
  i:=length(s);
  while(i>=1)and not f do
  if copy(s,i,length(s1))=s1 then f:=true
  else i:=1-1;
end;
1
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
07.05.2011, 21:04  [ТС]
спасибо, но мне нужно сделать посимвольной обработкой...вот в чем проблема...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2011, 21:29
Цитата Сообщение от Алён4uk Посмотреть сообщение
но мне нужно сделать посимвольной обработкой.
Тогда нужно создавать символьный массив, а не
Pascal
1
s,s1:string;
0
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
07.05.2011, 21:35  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Тогда нужно создавать символьный массив
разве со строкой нельзя работать как со символьным массивом?? Pascal же понимает s[i] и когда s:string и когда s:array [1..10] of char
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2011, 21:40
Конечно можно, только зачем, если есть функции работы со строками. Посимвольный поиск ведется только в массивах. Покажите полное и точное задание.
0
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
07.05.2011, 21:44  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Конечно можно, только зачем, если есть функции работы со строками.
Это называется тараканы в голове у препода.

Покажите полное и точное задание.
Написать программу, используя посимвольную обработку слов: Даны строки S,S1,S2. Заменить в строке S последнее вхождение строки S1 строкой S2. Если замена невозможна, выдать об этом сообщение с указанием причины.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2011, 21:55
Ну, тогда так. Там еще программка для тестирования функции.
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
uses crt;
procedure  found (var k:integer; s,s1:string);
var i,j:integer;
     f:boolean;
begin
k:=0;
i:=length(s);
while(i>=1)and(k=0)do
 begin
  if (s[i]=s1[1])and(length(s)-i+1>=length(s1)) then
     begin
      f:=true;
      j:=i;
      while(j<=length(s))and(s1[j]=s[j])and f do
      if s1[j]<>s[j] then f:=false
      else j:=j+1;
     end;
    if f then k:=i
    else i:=i-1;
   end;
if k=0 then writeln('Вхождения нет')
else writeln('Последнее вхождение=',k);
end;
var s,s1:string;
    k:integer;
begin
writeln('Введите строку:');
readln(s);
writeln('Введите подстроку:');
readln(s1);
found (k,s,s1);
readln
end.
1
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
07.05.2011, 22:06  [ТС]
Огроменное спасибо, хоть что-то...уже 3ий месяц задачу мучаю...
Цитата Сообщение от Puporev Посмотреть сообщение
Pascal
1
      while(j<=length(s))and(s1[j]=s[j])and f do
Ошибка времени выполнения: Индекс находился вне границ массива.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2011, 22:16
Алён4uk, Не знаю, я гонял несколько раз в Паскаль АВС, а он к диапазонам очень придирчив и ни разу не было ошибки. А Вы в каком Паскале пишете?
0
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
07.05.2011, 22:21  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Алён4uk, Не знаю, я гонял несколько раз в Паскаль АВС, а он к диапазонам очень придирчив и ни разу не было ошибки. А Вы в каком Паскале пишете?
PascalABC.NET
он ещё и ищет не правильно...
пример:
Введите строку:
мама раму
Введите подстроку:
мыла
Последнее вхождение=3
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2011, 22:33
Вот так попробуйте.
Pascal
1
2
3
4
5
6
7
8
if (s[i]=s1[1])and(length(s)-i+1>=length(s1)) then
     begin
      f:=true;
      j:=i;
      while(j<=length(s1))and f do//убрал and(s1[j]=s[j])
      if s1[j]<>s[j] then f:=false
      else j:=j+1;
     end;
Нельзя мне в полночь программы писать, уж не раз убеждался...
1
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
07.05.2011, 22:50  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Вот так попробуйте.
Pascal
1
2
3
4
5
6
7
8
if (s[i]=s1[1])and(length(s)-i+1>=length(s1)) then
     begin
      f:=true;
      j:=i;
      while(j<=length(s1))and f do//убрал and(s1[j]=s[j])
      if s1[j]<>s[j] then f:=false
      else j:=j+1;
     end;
у меня что-то не понятное с паскалем, он мне не выдает ошибку, но в окне вывода выводит:
Введите строку:
мама мыла раму
Введите подстроку:
мама
Универ\Паскаль\Строки\Str_5(поиск).pas:с трока 30
в Str_5(поиск).Program.Main()[END]

Нельзя мне в полночь программы писать, уж не раз убеждался...
Может Вы спать пойдете?? а то мне как-то стыдно становиться, чт человеку спать не даю...не горит же...ещё неделю точно может подождать, а ночь тем более)))
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.05.2011, 06:34
Цитата Сообщение от Алён4uk Посмотреть сообщение
у меня что-то не понятное с паскалем,
Возможно, мне этот .net вообще не понравился, попробуйте в обычном АВС.
Я не обманываю, вот результат.
Миниатюры
почему данный цикл-бесконечный?  
1
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
08.05.2011, 11:52  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
попробуйте в обычном АВС.
мне все равно в PascalABC.NET сдавать...
ладно...сейчас попробую домучить))
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.05.2011, 12:15
Не знаю, специально запустил в .net, нет никаких ошибок, хоть с crt, хоть без него, вот вывод

Введите строку:
мама раму
Введите подстроку:
мыла
Вхождения нет
Добавлено через 13 минут
А Вы в этой строке
Pascal
1
while(j<=length(s1))and f do//убрал and(s1[j]=s[j])
заменили
Pascal
1
(j<=length(s))
на
Pascal
1
(j<=length(s1))
1
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
11.05.2011, 16:35  [ТС]

вот....не работает..
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
11.05.2011, 16:48
Я не знаю, разбирайтесь со своим Паскалем.
Миниатюры
почему данный цикл-бесконечный?  
0
 Аватар для Алён4uk
12 / 12 / 7
Регистрация: 03.04.2011
Сообщений: 75
11.05.2011, 21:28  [ТС]
когда нет вхождений, он мне выдает, а вот когда они есть, он мне выдает эту гадость(( проверьте, пожалуйста, как у вас?? если уж у вас работать будет, а у меня нет, значит у меня действительно паскаль-дурак((
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
12.05.2011, 06:17
Я Вам уже писал про эту строку
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
while(i>=1)and(k=0)do
 begin
  if (s[i]=s1[1])and(length(s)-i+1>=length(s1)) then
     begin
      f:=true;
      j:=i;
      while(j<=length(s1))and f do//вы здесь исправили s на s1?
      if s1[j]<>s[j] then f:=false
      else j:=j+1;
     end;
    if f then k:=i
    else i:=i-1;
   end;
Добавлено через 1 минуту
Этот код работает без ошибок во всех вариантах
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.05.2011, 06:17
Помогаю со студенческими работами здесь

Почему цикл на при 1 уходит в бесконечный цикл?
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

Почему бесконечный цикл?!
Доброго дня! Будьте так любезны - подскажите новичку - почему при вызове скрипта всплывающего окна командой &lt;td...

Цикл по коллекции бесконечный, почему?
Вот такой код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() {

Почему скрипт входит в бесконечный цикл на Win XP ?
Приветствую. Собственно сабж @echo off SetLocal EnableExtensions EnableDelayedExpansion :FILENAME if not defined postfix...

InputMismatchException почему бесконечный цикл при вводе?
Всем доброго времени! Изучаю исключения в Java. Написал небольшую тестовую программу. Смысл в том, что в цикле воспринимается ввод целого...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru