Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Найти максимальное и минимальное слово в строке

81K
29 апреля 2014 года
Kirsan190419
9 / / 17.04.2014
Народ, надо сделать программку, которая в строке будет искать слово минимальной и максимальной длины. Прогу написал, но есть один баг, если слово начинается с цифры, то они идут отдельным словом (пока прога не наткнется на ближайшую букву в этом слове). Я так понимаю, что сам fronttoken так работает, но могу и ошибаться. Можете помочь исправить? Вот код:

Код:
predicates
getMaxMin(string,integer,integer)
max_min(integer,integer,integer,integer,integer)
clauses
getMaxMin(Str,Max,Min):-fronttoken(Str,Word,Rest),!,
getMaxMin(Rest,Ma,Mi),str_len(Word,Len),
max_min(Ma,Mi,Len,Max,Min).
getMaxMin(_,0,9999):-!.
max_min(0,9999,Len,Len,Len):-!.
max_min(Ma,Mi,Len,Len,Mi):-Len>Ma,!.
max_min(Ma,Mi,Len,Ma,Len):-Len<Mi,!.
max_min(Max,Min,_,Max,Min).
goal
clearwindow,
readln(Str),
fronttoken(Str,_,_),
getMaxMin(Str,Max,Min),
write("samoe dlinnoe ", Max, "nsamoe korotkoe ",Min).
81K
28 мая 2014 года
Kirsan190419
9 / / 17.04.2014
Давно сделал, пусть тут лежит - вдруг кому-нибудь пригодится. Да, можно короче, но сделал так

Код:
predicates
length(string,integer)
gtwrd(string,string,string,string)
gtwrd2(string,string,string,string)
longer(string,string)
longer2(string,string)
law(string,string)
law2(string,string)
 
clauses
length("",0):-!.
length(S,N):-
frontchar(S,_,S1),
length(S1,N1),
N=N1+1.
           
    gtwrd(S,W,E,T):-
        frontchar(S,C,S1),
        NOT(C=' '),
        str_char(SS,C),
        concat(W,SS,R),
        gtwrd(S1,R,E,T),!.
    gtwrd(S,W,W,R):-
        frontchar(S,_,R).
    gtwrd(S,W,W,S).
       
    longer(A,B):-
        length(A,LenA),
        length(B,LenB),
        LenA>LenB.
 
        law("",""):-!.
    law(S,W):-      
        gtwrd(S,"",WW,SS),NOT(SS=""),
        law(SS,WWW),
        NOT(longer(WWW,WW)),
        W=WWW.
    law(S,W):-
        gtwrd(S,"",W,_).
 
gtwrd2(S,Q,E,T):-
        frontchar(S,C,S1),
        NOT(C=' '),
        str_char(SS,C),
        concat(Q,SS,R),
        gtwrd2(S1,R,E,T),!.
    gtwrd2(S,Q,Q,R):-
        frontchar(S,_,R).
    gtwrd2(S,Q,Q,S).
       
    longer2(A,B):-
        length(A,LenA),
        length(B,LenB),
        LenA<LenB.
 
   
    law2("",""):-!.
    law2(S,Q):-      
        gtwrd2(S,"",QQ,SS),NOT(SS=""),
        law2(SS,QQQ),
        NOT(longer2(QQQ,QQ)),
        Q=QQQ.
    law2(S,Q):-
        gtwrd2(S,"",Q,_).
 
 
goal
clearwindow,
write("vvedite predlozenie"),nl,
readln(S),
law(S,W),
length(W,N),
write("min slovo: ",W," ",N),nl,
law2(S,Q),
length(Q,M),
write("max slovo: ",Q," ",M).
89K
02 мая 2014 года
illari
4 / / 02.05.2014
# Пример на Perl. Разделители - пробелы.
$_="add asdadasa sdadasd aw sdf2000fds qeew";
$min=$_;
for(split){
$min=$_ if length($min)>length($_);
$max=$_ if length($max)<length($_);
}
print "min: $minnmax: $maxn";
89K
02 мая 2014 года
illari
4 / / 02.05.2014
 
Код:
# Пример на Perl. Разделители - пробелы.
$_="add asdadasa sdadasd aw sdf2000fds qeew";
$min=$_;
for(split){
  $min=$_ if length($min)>length($_);
  $max=$_ if length($max)<length($_);
}

print " min: $min \n max: $max \n";
Прим.: в предыдущем коде в последней стоке съелся обратный слэш перед n (перевод строки)
81K
02 мая 2014 года
Kirsan190419
9 / / 17.04.2014
Это, конечно, все хорошо, но надо читать все, что написано. Прога работает корректно, за исключением одного "но". fronttoken как раз делит предложения на слова. Если слово начинается с цифры, то прога будет эти цифры выносить в отдельное слово пока не наткнется на букву.
81K
07 мая 2014 года
Kirsan190419
9 / / 17.04.2014
Может кто-нибудь сделать это через frontchar?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог