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

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

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

> рекурсивно сравнить строки
lopata
сообщение 25.03.2010 0:28
Сообщение #1


Пионер
**

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

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


Нужно написать Рекурсивную функцию Matching(p,s ), которая сравнивает 2 строки, возвращает значениеTRUE , если p и s совпадают, и FALSE если нет. При этом разбивает p и s на Первый знак и остаток.
Насколько понимаю, должны сравниваться только первые знаки, а из остатка, выбираться этот первый знак
Вот что получилось, неверно, конечно, но мне кажется нужно приблизительно делать так:

FUNCTION Matching(p,s : string): boolean;
begin
IF (Length(p) and Length(s))=0 THEN
Matching := True
else
matching := (p[1]=s[1]) and Matching(copy(p,2,length(p)-1),copy(s,2,length(s)-1));
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 25.03.2010 0:39
Сообщение #2


Гость






Цитата
IF (Length(p) and Length(s))=0 THEN
делает совсем не то, что тебе хочется... Тут берется битовое представление одного числа, такое же битовое представление другого, с ними производится операция AND, и результат сравнивается с нулем... В результате, если длина строки P равна 3, а длина S = 4, то результатом будет 0, поскольку 0011 AND 0100 = 0000.

Если хочешь сравнить длины строк с нулем - сравнивай их по отдельности...

Я бы сделал так:
function equals(const s, p: string): boolean;
begin
if (length(s) = 0) or (length(p) = 0) then
equals := length(s) = length(p)
else
equals := (s[1] = p[1]) and equals(copy(s, 2, 255), copy(p, 2, 255))
end;
 К началу страницы 
+ Ответить 
lopata
сообщение 25.03.2010 1:02
Сообщение #3


Пионер
**

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

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


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

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

 



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