IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> помогите довести программу, строки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


тут написал прогу,которая находит индекс символа(подстроки) в строке с которого начинается N-ое вхождение данной подстроки.
всё работает,только есть одно но...если есть строка фбсфбсфбс и подстрока фбс, и Н=3, то прога выдает ответ 0..

вот сама программа
Код
uses crt;
var st,p:string;
i,j,n,nn,t,count:integer;
f:boolean;
begin
clrscr;
write('введите строку S: ');
readln(st);
write('введите подстроку P: ');
readln(p);
write('введите N: ');
readln(n);
count:=0;

for i:=1 to length(st)-length(p) do
begin
   f:=true;
   t:=i;
   for j:=1 to length(p) do
     begin
       if st[t]<>p[j] then f:=false;
       inc(t);
     end;
   if f then
     begin
      inc(count);
      nn:=i;
     end;
  if count=n then break;
end;

//for i:=1 to length(st) do
//writeln(st[i]);

if count=n then writeln(nn) else write('0');
readln;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Я сделал так:

var st,podst:string;
i,n,c:byte;
begin
writeln('Vvedite stroku');
readln(st);
writeln('Vvedite podstroku');
readln(podst);
writeln('Vvedite N');
readln(n);
for i:=1 to n do
if pos(podst,st)>0 then begin
inc(c,pos(podst,st)+length(podst)-1);
delete(st,1,pos(podst,st)+length(podst)-1);
end
else begin
writeln('Stolko podstrok netu...');
halt;
end;
writeln(c-length(podst)+1);
readln;
end.


Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Вариант Unconnected грамотнее, а у Вас ошибка здесь:
for i:=1 to length(st)-length(p)+1 do
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


пожайлуста,можете помочь сделать программу через while,что бы избежать break

Код
uses crt;
var st,p:string;
i,j,n,nn,t,count:integer;
f:boolean;
begin
clrscr;
write('ââåäèòå ñòðîêó S: ');
readln(st);
write('ââåäèòå ïîäñòðîêó P: ');
readln(p);
write('ââåäèòå N: ');
readln(n);
count:=0;

for i:=1 to length(st)-length(p)+1 do
begin
   f:=true;
   t:=i;
   for j:=1 to length(p) do
     begin
       if st[t]<>p[j] then f:=false;
       inc(t);
     end;
   if f then

     begin
      inc(count);
      nn:=i;
     end;
end;

//for i:=1 to length(st) do
//writeln(st[i]);

if count=n then writeln(nn) else write('0');
readln;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Вариант Unconnected грамотнее
Чем, можно полюбопытствовать? Тем, что напрочь портится введенная строка? Это некорректное поведение. Подобное делается по-другому, есть Copy, не надо ничего из строки удалять.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
можете помочь сделать программу через while,что бы избежать break
Тебе уже показали, как делать НЕ через For... Кстати, я бы для решения твоей задачи воспользовался Repeat/Until, а не While.

М
Темы объединяю...

 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +



мне кажется наоборот хуже стала программа
всё же через while наилучший вариант...
я честно не знаю как сделать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


2 Unconnected:
пожалуйста, не модифицируй свои сообщения так сильно. Учти, что в теме на тебя могут ссылаться. Если делаешь маленькие изменения - делай, но лучше сказать, что именно изменил. Если большие - лучше новым постом.

2 All:
В этой задаче есть одна неопределенность в условии. Вот, скажите, сколько раз встречается семпл "aaa" в строке "aaaa"? В своей программе я принял, что это нужно считать за 2 вхождения.

Цитата(Work Group @ 24.11.2009 14:24) *
мне кажется наоборот хуже стала программа
всё же через while наилучший вариант...
я честно не знаю как сделать...
Вот это мне нравится.. "кажется".. круууть..
И почему же тебе КАЖЕТСЯ, что "все же через while наилучший вариант"? Может, все же обоснуешь?

repeat/until в данном случае лучше по той причине, что хотя бы один раз проверить надо (что именно - другой вопрос).

Work Group, у меня к тебе есть один вопрос. Ты сознательно избегал использования функции Pos в своем коде, или просто по незнанию? В смысле - ее можно использовать или нет? Если да, то решение может выглядеть примерно так (взял твою прогу за основу)
uses crt;
var
s,p:string;
n,i,t,count:integer;
begin
write('введите строку S: ');
readln(s);
write('введите подстроку P: ');
readln(p);
write('введите N: ');
readln(n);

count:=0;
i:=0;
repeat
t:=Pos(p,Copy(s,i+1,Length(s)-i));
if t>0 then begin
Inc(count);
i:=i+t
end
until (count=n)or(t=0);
if 0<t then writeln(i) else write('not found');
readln;
end.

Разбирайся и спрашивай, что неясно.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2024 9:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name