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

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

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

> Строки, Для строки, которая может начинаться с пробела найти кол-во слов
Джейн Смит
сообщение 4.04.2010 12:15
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Женский
Реальное имя: Аня

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


Для строки, которая может начинаться с пробела найти кол-во слов.

Я сделала, но если вначале строки или в конце я ставлю пробел, то выдаёт неправильное значение. Может объясните в чём ошибка?

Program Stroki (input, output);
Uses crt;
Var
N,b,ch:integer;
word:string;
Label l;
BEGIN
Clrscr;
writeln('Vvedite stroky:');
readln(word);
n:=length (word);
ch:=1;
b:=pos(' ',word);
l: If b>0
then
begin
ch:=ch+1;
delete(word,1,b);
n:=length (word);
If n>0
then
begin
b:=pos(' ',word);
goto l;
end;
end;
writeln('V predlogenii ',ch,'slov(o)');
readkey;
END.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Archon
сообщение 7.04.2010 17:47
Сообщение #2


Профи
****

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

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


Цитата
for i:=1 to Length(s) do if (s[i] in A)and((i=1)or not(s[i-1] in A)) then Inc(n);
Мне кажется, что не стоит полагаться на оптимизатор и писать такие условия. Volvo бы спросить, он точно знает =)


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.04.2010 3:23
Сообщение #3


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

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

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


Цитата(Archon @ 7.04.2010 18:47) *
Мне кажется, что не стоит полагаться на оптимизатор и писать такие условия. Volvo бы спросить, он точно знает =)
Я тоже точно знаю совершенно неожиданно и случайно )).
Эта фича не имеет никакого отношения к оптимизации. Называется она Short Boolean Evaluation и включена по умолчанию. Если ты хочешь Complete Boolean Evaluation - используй соответствующую опцию в меню либо (надежнее) - директиву {$B+}.

Если не использовать в выражении Булевы функции, изменяющие какие-то другие переменные, то все не только нормально, но и просто прекрасно (поскольку не только укорачивает, но и позволяет не отрабатывать то, что отрабатывать не нужно и нельзя). Описанная ситуация (функции, меняющие глобальные переменные) встречается крайне редко, а необходимость ее - и того реже. Я бы рекомендовал новичкам как раз НЕ использовать подобный изврат, по крайней мере до того, как станешь гуру. Кстати, аналогичный прием в арифметических выражениях (с использованием арифметических функций, меняющих другие параметры) действительно встречается, особенно в рекурсии. Но все же этим не стоит злоупотреблять, и использовать нужно крайне осторожно. Иначе мы дойдем до того, что порядок тоже важен, и A*B не равно B*A, и - пошло-поехало..

Лично я короткими вычислениями пользовался всегда - вставляя, если прога идет на стророну - директиву $B.

К слову сказать, в С это организовано несколько иначе: там есть две разных формы Булевых операторов: одинарные (полное вычисление) и двойные (краткое вычисление). Это, конечно, значительно удобнее, так как не только избавляет от необходимости ставить директиву - можно еще и без проблем смешивать эти операторы в одном выражении. Но только скажите мне: кто вообще использует одинарные | и & - по делу, а не по недоразумению?

В Паскале тоже были попытки ввести нечто подобное, и это как раз есть ложка дегтя в бочке меда.. Мало того, что они оставили нормальную форму (or и and) именно для полного вычисления, они еще и изобрели совершенно неудобоваримые и длинные обозначения and_then и or_else для гораздо более широко используемой краткой формы!! blink.gif Одна радость - я пока не сталкивался с компиляторами, поддерживающими этот нонсенс, называемый ISO-10206 Extended Pascal. Вот тут, может, volvo скажет больше.. ))


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

Сообщений в этой теме


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

 



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