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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2008, 16:38   #1
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию задача на строки

ребят помогите плз, последняя прога для зачета,
в тексте удалить слова начинающиеся с заданой буквы
Все исходные данные вводить с клавиатуры.
Под словом понимать произвольную последовательность печатных символов, отличных от пробела. Все слова окружены одним пробелом.
При решении задачи максимально использовать стан-дартные средства работы со строками.
без массивов плзз
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 26.12.2008, 16:51   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так?
Код:
uses crt;

var
s,outs : string;
i,len : integer;
ch : char;

begin
clrscr;
writeln('Vvedite stroku:');
readln(s);
write('Vvedite simvol: ');
readln(ch);
writeln('---------');

outs := '';
len := length(s);
for i:=1 to len do
 begin
 if s[i]=ch then
   while s[i]<>' ' do
    begin
    i := i+1;
    if i=len then break;
    end
 else outs := outs + s[i];
 end;

writeln(outs);

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.12.2008, 16:52   #3
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

теперь можно расписать что от куда для чего?
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 26.12.2008, 16:58   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
outs := '';
len := length(s);     - запоминаем длину строки
for i:=1 to len do    - посимвольно идем от начала строки к концу
 begin
 if s[i]=ch then       - если текущий символ является искомым, то...
   while s[i]<>' ' do   - посимвольно идем, пока не встретим пробел
    begin
    i := i+1;
    if i=len then break;   -если достигли конца строки - выходим из цикла
    end
 else outs := outs + s[i];  - пишем символ в выходную строку
 end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.12.2008, 17:05   #5
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

а можно ее с помощью Delete сделать который даляет из строки S подстроку дли-ной Len, начиная с позиции Start. В результате строка S модифицируется (изменяется), следовательно, в качестве S не может быть ис-пользована бес-типовая строко-вая константа
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 26.12.2008, 18:04   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ananim-Pbl6ak С помощью delete:
Код:
uses crt;

var
s : string;
i,k : integer;
ch : char;

begin
clrscr;
writeln('Vvedite stroku:');
readln(s);
write('Vvedite simvol: ');
readln(ch);
writeln('---------');

i:=1;
while true do
 begin
  if s[i]=ch then
   begin
   k := pos(' ',copy(s,i,length(s)-i));

   if k=0 then
    begin
    k:=length(s)-i+1;
    delete(s,i,k);
    break;
    end;
   delete(s,i,k);
   end

  else
   begin
   k := pos(' ',copy(s,i,length(s)-i));
    if k=0 then break;
    i := i+k;
   end;

 {--}
 if keypressed then break;
 end;


writeln;
writeln(s);

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.12.2008, 19:12   #7
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

а что переменные i и k обозначают?
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 26.12.2008, 19:20   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а что переменные i и k обозначают?
Они указывают на определенные позиции в строке. (то есть на символы)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.12.2008, 20:00   #9
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

слов в тексте? можно так же расписать пояснительный текс а то что то не очень понятны действия некоторые
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 26.12.2008, 20:11   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
uses crt;

var
s : string;
i,k : integer;
ch : char;

begin
clrscr;
writeln('Vvedite stroku:');
readln(s);
write('Vvedite simvol: ');
readln(ch);
writeln('---------');

i:=1;           
while true do        - вход в цикл
 begin
  if s[i]=ch then      - если символ является искомым, то...
   begin
   k := pos(' ',copy(s,i,length(s)-i));    - k указывает на первый пробел после слова(которое сейчас удалим)

   if k=0 then                  - если после слова нет пробела, значит это последнее слово в строке
    begin
    k:=length(s)-i+1;        - теперь k указывает на последний символ строки
    delete(s,i,k);             - удаляем слово
    break;                      - выходим из цикла (все что надо удалено)
    end;
   delete(s,i,k);            - если после слова пробел, то удаляем слово
   end

  else                         - если символ не является искомым (т.е. слово не надо удалять), то...
   begin
   k := pos(' ',copy(s,i,length(s)-i));   - k указывает на первый пробел после слова
    if k=0 then break;                      - если пробел не найден, значит слово последнее
    i := i+k;                                   
   end;

 {--}
 if keypressed then break;          - это на всякий случай. Можно удалить. Использовал для защиты от зацикливания.
 end;


writeln;
writeln(s);

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки Juhn Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2008 16:10
задача на строки Hostlman Помощь студентам 2 26.12.2007 03:17
Задача на строки sergfanat Паскаль, Turbo Pascal, PascalABC.NET 11 19.12.2007 15:34