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

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

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

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


Гость






Задача вроде бы совсем проста:
**Определить, сколько слов оканчивается на заданный символ**
Что может быть проще:
program Project2;
uses
SysUtils;
var s:string;
i,n,k:integer;
d:char;
begin
writeln ('Input S');
readln(s);
n:=length(s);
d:='a';
k:=0;
for i:=1 to n do;
if(i<n) and (s[i]=d) and (s[i+1]=' ') then
k:=k+1;
writeln(k);
end.

Но ничего не выходит, не подскажите по чему?

М
Пользуемся тегами CODE !
klem4

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


Гость






Цитата
for i:=1 to n do;

Точку с запятой убери...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Цитата
Точку с запятой убери...

lol.gif lol.gif lol.gif У меня знаете ли, тоже такое бывает!
Вроде бы се правильно, но не работает, и хоть убейся, а компилятор не видит ошибки!

ЗЫ: сори за оффтоп- не удержался)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
компилятор не видит ошибки!

А с точки зрения компилятора здесь НЕТ ошибки... Все по правилам синтаксиса.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


Цитата
А с точки зрения компилятора здесь НЕТ ошибки... Все по правилам синтаксиса.

Вобщем я это и имел ввиду.
Просто всеравно она(ошибка) есть!
Кстати, как там они называются такие ошбки, которые появляются в процессе работы, но синтаксически не видимы(как эта)?
Просто интиресно wink.gif smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Это - Логическая ошибка (ошибка в логике работы программы) ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






А все остальное правильно?
Она все равно не работает, после того как вводишь строку, происходит выход из программмы.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ну, я не знаю, ЧТО ты вводил, у меня все прекрасно отработало...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

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

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


Цитата
после того как вводишь строку, происходит выход из программмы.

А ты не пробовал перед последним End. ставить задержку програмы, типо Readln/Readkey/Repeat Until keypressed ?
lol.gif wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Спасибо, работает, только при использовании я обнаружил, что если последее слово в строке заканчивается на 'a' то программа его не видит.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Perl. Just code it!
******

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

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


это из-за того, что по этому условию :
if(i<n) and (s[i]=d) and (s[i+1]=' ')
после конца слова должен быть пробел, надо немного изменить условие и все будет ок ;)


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

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

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


Цитата
если последее слово в строке

Да, тебе нужно изменить условие, лиюо предварительно в строку добавить знак пробела, т.к. строка заканчивается то на enter, ане space! Поэтомц условие
and (s[i+1]=' ')

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


Гость






Alex7, не надо ничего никуда НИКОГДА добавлять (если хочешь, могу привести пример, когда этот способ с добавлением пробела не сработает)... Достаточно чуть-чуть подкорректировать условие:
for i:=1 to n do
if (
(i = n) or ((i < n) and (s[i + 1] = ' '))
) and (s[i] = d) then k := k + 1;

и все прекрасно посчитается...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

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

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


Ага, т.е. задаешь два условия в одном if .Когда не конец строки, то проверяем наличие пробела, а коней не проверяем. гениально просто!
Не плохо.
Цитата
(если хочешь, могу привести пример, когда этот способ с добавлением пробела не сработает)

А почему? там ведь задается length(s), а он ведь не игнорирует пробелы, после которых нет "смыслоносящих"( wacko.gif ) елементов?!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Alex7, я не про это... Не всегда же человек тебе дает полную постановку задачи... А если ему нужно будет реалировать этот алгоритм в функции? И вот такой заголовок ему дадут:
Function CountWords(Const s: String; Ch: Char): Integer;

твой алгоритм придется переписывать заново, потому как Const изменить (добавить к строке пробел) не удастся... А мой - сработает без изменений... Привыкать, так сразу к правильному... rolleyes.gif

Не забывай, код надо писать так, чтобы можно было его использовать НЕоднократно (и желательно - без изменений)
 К началу страницы 
+ Ответить 

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

 





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