ВОПРОС · Q&A

Решить задачу

5 ответов 5,3 тыс.
AI-выжимка обсуждения скоро

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

Статус
Закрыто для дальнейших ответов.
Автор вопроса
Дана строка состоящая из слов разделенных одним или несколькими пробелами. Удолить из строки слова содержащие букву М
Сколько раз пробовал писать или дописывать программу всё время зависает.

Код:
program ZADANIE5;
uses crt;
var a,b,g,j,i,v:integer;
st: string;
begin clrscr;
writeln ('введите строку');
read (st);
v:=length (st);
for i:=1 to v do
if st[i]='m' then
while st[i]=' ' do delete (st,i,i);


writeln (st);
readkey;
end.







Добавлено: Прошу помочь решить. :(
 
омг... думать не пробовали?
перепишите этот кусок - подумайте, что Вы этим делаете: while st=' ' do delete (st,i,i);

Корректней просматривать строку с конца, раз вы удаляете символы - возможно, что-то типа такого... for i:=v downto 1 do

Добавлено: <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Хотя бы примерный алгоритм:</div></div><div class="sp-body"><div class="sp-content">Вам нужно описать флаг, что в слове бьіл символ m (boolean) и инициализировать в false.
Вам нужно находить и запоминать конец слова (индекс символа) в какую-то переменную - благо, их у вас описано много...
В начале работы, до цикла - проинициализировать ее позицией последнего символа строки, т.е. длиной строки,
и в ходе работы программы менять значение на позицию последнего символа слова.
Т.е. просмотр строки с конца в цикле:
1. проверка i-го символа строки на пробел, т.е. если пробел
1.1) если в текущем слове был найден символ m:
1.1.1) удалять символы с текущего (пробела) до конца слова
1.1.2) сбрасывать флаг того, что в слове бьіл символ m
1.2) если i>1, то сохранять позицию символа перед пробелом, т.е. i-1 (как конец слова, в соотвестствующую переменную)
2. иначе если не установлен флаг, что в слове бьіл символ m, то
2.1. проверка i-го символа на m, если символ m, то
2.1.1 ставить флаг, что в слове бьіл символ m


код написать - раз плюнуть, за Вас это делать не буду, ибо если я буду писать - могу ошибиться, у меня нет среды под рукой уже довольно много времени )))
 
написано как всегда в PascalABC... :please:
Код:
uses crt;
const M = [#77,#109,#204,#236]; //здесь англ и рус буквы "м" (заглавные и строчные)по кодам ,проверь у себя их правильность
var s:string;
i,buf:integer;

BEGIN
write('Введите любую строку :');
readln(s);

buf := 0;

for i := 1 to length(s) do		 // считаем сколько у нас букв "м"
if s[i] in M then buf := buf+1;

repeat								 //избавляемся от букв "м"
for i := 1 to length(s) do
if s[i] in M
then begin
Delete(s,pos(s[i],s),1);
dec(buf);
end;
until buf = 0;

write(s);
END.
 
ой, и давно это ж было...
там не букву удалить надо, а слова.

Добавлено: думаю, автору задача уже не актуальна, но для тренировки решить можно было бы.
isqoff а вы проверяли код, кстати?
если рассмотреть задачу - удалять только символы всяких m, а не слова с этими буквами:
А вот такая штука как
Delete(s,pos(s,s),1);
не пропустит ли случай строки "mM"? должно быть "" на выходе.
P.S. я не проверяла. похоже, тут 2 прохода строки cделается в repeat и за счет этого работает...
я не тестер, я просто придираюсь :please:

Добавлено: делай проще) для разминки укоротила почти в 2 раза прогу, которая вычищает всевозможные m
интересно, не напутала ли с индексами - вроде с 1 должно быть?
Код:
uses crt;
const M = [#77,#109,#204,#236]; //здесь англ и рус буквы "м" (заглавные и строчные)по кодам ,проверь у себя их правильность
var s:string;
i, lens:integer;

BEGIN
write('Введите любую строку :');
readln(s);

lens :=length(s);
if lens >0 then // если не пустая строка
for i := lens downto 1 do // смотрим с конца - экономим вызов pos
if s[i] in M then Delete(s,i,1); //избавляемся от букв "м"

write(s);
END.
теперь еще осталось решить задачу топикстартера - вычистить слова :)
 
век живи век учись ... :please: Спасибо за урок!
 
да не за что. мб, потом через недельку-две посмотрю и исходную задачу, заинтересовали. сейчас домой хочу... спать...
тем более, там в описанном посте #2 алгоритме где-то бажка была небольшая вроде, я не помню ее сути, а также поправила ее в сообщении или нет.
 
Статус
Закрыто для дальнейших ответов.