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

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

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

 
 Ответить  Открыть новую тему 
> Задача на строки
сообщение
Сообщение #1


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

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

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


Друг попросил решить ему задачу ... она конечно простетская совсем, но я не могу врубиться в задание, вот смотрите :

Дан текст каждый символ которого может быть малой буквой,цифрой,или одним из знаков +,-,*
группой букв будем называть такую совокупность последовательно расположенных букв,которой непосредственно предшествует и за которой непосредственно не следует буква.Аналогично определим группу цифр и группу знаков.
a)Выяснить,встречаются ли в данном тексте группа букв.

вот скажите мне в случае "----A++++" А - будет группой букв я правильно поняли, или например "a--+ad*" тут будет A и AD ?

Выяснить,встречаются ли в данном тексте группа букв - в таком случае задание сводится прсто определить есть ли в тексте буква ... или же встаки гуппа этот минимум 2 буквы.

Сообщение отредактировано: klem4 -


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


Гость






В случае a--+ad* где ты видел букву перед "ad"? Да и перед первой буквой "a" тоже нет ничего, так что формально здесь только одна группа букв: "d"
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


Все, понял, спасибо ;)
тему можно закрывать.

Сообщение отредактировано: klem4 -


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


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

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

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


Вот решение задачи, может кому-нибудь пригодится, а может кто получьше решение предложит ... что-то мне кажется громоздко получилось, а может в самый раз )

function IsSequence(s : string) : boolean;
var
i : byte;
flag : boolean = FALSE;
begin

i := 1;

{minimalny variant - "ab*" - rezultat = "b"}

while (i<=length(s)-2) and not(flag) do begin
while not(s[i] in C) and (i<=length(s)-2) do inc(i);
inc(i);
if (i<=length(s)-1) and (s[i] in C) then begin
while (i<=length(s)) and (s[i] in C) do inc(i);
if (i<=length(s)) then
inc(flag);
end;
end;

IsSequence := flag;

end;


ой, забыл

const C = ['a'..'z', 'A'..'Z'];


;)

Сообщение отредактировано: klem4 -


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


Гость






klem4,
var
flag : boolean = FALSE;
Это - вариант FPC, на TP такое не пройдет, там надо будет инициализировать Flag в теле функции.

Ну, и можно попробовать "разгрузить" выражения, т.е. length(s) вычисляется слишком часто, так введи переменную, и занеси его туда. Ну, и еще кое-что можно сделать... Если надо - я покажу smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


По поводу Flag спасибо, а что еще можно сделать ? Уже интересно стало smile.gif


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


Гость






Цитата(klem4 @ 17.10.2005 18:47)
а что еще можно сделать ?

Ну, например, вот это:
const
C = ['a' .. 'z', 'A' .. 'Z'];

function IsSequence(s : string) : boolean;

function CheckGroup(i: integer): boolean;
begin
CheckGroup := (s[i] in C) and
((i > 1) and (s[pred(i)] in C)) and
((i < length(s)) and not(s[succ(i)] in C));
end;

var
i, len : byte;

const
flag : boolean = FALSE;
{ это нехорошее решение, но для одного запуска приемлемо !!! }

begin
i := 1; len := length(s) - 2;
while (i < len) and (not flag) do begin
while not(s[i] in C) and (i < len) do inc(i);
inc(i);
if i <= succ(len) then flag := CheckGroup(i)
end;

IsSequence := flag;

end;

begin
writeln(IsSequence('a--+ad*'));
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


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

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

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


Volvo, твой вариант не работает при writeln(IsSequence('a--+arwqd*'))
а тут последователбность есть :yes:


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


Гость






klem4, тот вариант вообще-то не окончательный smile.gif :
const C = ['a' .. 'z', 'A' .. 'Z'];

function IsPresent(s: string): boolean;
var
flag: boolean;
i: integer;
begin
flag := False; i := 2;
while (i <= Pred(Length(s))) and not (flag) do begin
if not ((s[i] in C) and (s[Succ(i)] in C)) then Inc(i)
else begin
flag := not (s[Pred(i)] in C);
Inc(i, Byte(not flag));
end;
end;
IsPresent := flag;
end;

begin
writeln(IsPresent('a--+arwqd*'));
readln;
end.

Вот этот - окончательный ...
 К началу страницы 
+ Ответить 

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

 





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