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

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

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

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





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

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


4. Составьте программу удаления "лишних" пробелов (спаренных, начальных и концевых пробелов строки) в полученной строке.

Код

var x:string;
    i:byte;
begin
writeln('vvedi stroku=');
readln(x);
while length(x)>0 and x[1]=' ' do delete(x,1,1);
while x[length(x)]=' ' do delete (x,length(x),1);
i:=1;
while length(x)>0 do begin
i:=pos('  ',x);
if i=0 then break
end;
writeln(x);
end.


ПОМОГИТЕ ПЛИЗЗ! ЗАВТРА ЭКЗАМЕН!! ypriamii.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


Цитата
while length(x)>0 and x[1]=' ' do delete(x,1,1);
while x[length(x)]=' ' do delete (x,length(x),1);


Вот этот фрагмент можно сделать в одном цикле:

while (x[1]=' ')or(x[length(x)]=' ') do
begin
if x[1]=' ' then delete(x,1,1);
if x[length(x)]=' 'then delete(x,length(x),1);
end;


А вот это замени совсем
Цитата
while length(x)>0 do begin
i:=pos(' ',x); {в этом цикле твоя ошибка,не правильно построен}
if i=0 then break
end;


на :

for i:=1 to length(x)do if (x[i]=' ')and(x[i+1]=' ') then {перебираем символы в строке}
begin
delete(x,i,1); {Если больше одного пробела(x[i]=' ' и x[i+1]=' ', то удаляем лишний пробел}
i:=i-1; {Возвращаемся на 1 символ назад,т.к. пробелов может быть больше 2х между словами}
end;


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


ФУХ! СПАСИБО ОГРОМНОЕ! good.gif good.gif good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


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


Гость






RaV - последнее предупреждение... Еще раз увижу программу, в которой делается вот ЭТО:
for i:=1 to length(x)do
if (x[i]=' ')and(x[i+1]=' ') then begin
delete(x,i,1);
i:=i-1; { <-- Махинации с управляющей переменной цикла !!! }
end;
- это закончится для тебя В ЛУЧШЕМ СЛУЧАЕ - премодом. Все ясно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Понятно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 18.12.2017 2:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"