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

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

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

 
 Ответить  Открыть новую тему 
> Наименьшая длина слова
сообщение
Сообщение #1


Профи
****

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

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


Преобразовать данную строку, удалив из неё три слова наименьшей длины.

Слова могут разделяться только пробелами. Для строк использовать только length, chr, ord.

Вопрос такой: как задать условие, чтобы избавиться именно от трёх слов наименьшей длины и как такие слова искать?

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


Цитата(18192123 @ 7.01.2007 13:59) *

как задать условие, чтобы избавиться именно от трёх слов наименьшей длины и как такие слова искать?

Найти слово наменьшей длины.
Удалить его.
Повторить с начала еще два раза.
smile.gif
А для поиска придется пройтись по всем словам, запомниная их длину и начало, а также параллельно отыскивая минимальное.

Не совсем ясно выразился:
пройтись по строке, отслеживая длину и начало минимального слова.


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


Профи
****

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

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


вот всё , что смогла... однако так и не поняла про длину 3-х наименьших...


uses crt;
function Slovo ( s : string; n :integer ) : string;
const lim = [' ', ',', '!'] ;
var ss : string;
k, c, i : integer;
begin
ss := ''; c := 1; k := 1;
while k <= length(s) do begin
while not (s[k] in lim) and (k <= length(s)) do begin
if c = n then ss: =ss + s[k];
inc (k); end;
inc ( c );
while (s[k] in lim) and (k <= length(s)) do inc (k);
end;
Slovo := ss;
end;

var
s1, s2 : string;
n1, min, i, kol : integer;

begin
clrscr;
writeln ( ' vvedite stroky' );
readln ( s1 );
n1 := 1;
while slovo ( s1, n1 ) <> '' do inc ( n1 );
min := length (slovo ( s1, i ));
kol := 0;
repeat
for i := 2 to n1 do
begin
if length ( slovo (s1, i)) < min then
begin
min := length (slovo (s1, i))

{ ??????????????}



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


Гость






Основа будет выглядеть так:
...
s1 := '123 1234567 12 12345 123456 123 12 123456';
for kol := 1 to 3 do begin
min := 255; n1 := 1;
while slovo ( s1, n1, start ) <> '' do begin
if min > length(slovo(s1, n1, start)) then begin
i := start;
min := length(slovo(s1, n1, start));
end;
inc(n1);
end;

delete(s1, i, min);
end;
writeln(s1);
...


Правда, придется немного подкорректировать функцию Slovo, чтобы она возвращала еще и позицию начала текущего слова в строке:
function Slovo(s: string; n: integer; var start: integer): string;
const lim = [' ', ',', '!'] ;
var
ss: string;
k, c, i: integer;
begin
start := 0;
ss := ''; c := 1; k := 1;
while k <= length(s) do begin
while not (s[k] in lim) and (k <= length(s)) do begin
if c = n then begin
if start = 0 then start := k;
ss:=ss + s[k];
end;
inc(k);
end;
inc( c );

while (s[k] in lim) and (k <= length(s)) do inc (k);
end;
Slovo := ss;
end;

Использована не стандартная Delete, взята отсюда: Строки
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

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

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



procedure _Delete(var s: String; start, len: Word);
var
i: Integer;
begin

if (start <= 0) or (start >= 255) or (len <= 0) then exit;

if start + len - 1 > Length(s) then
len := Length(s) - start + 1;

for i := start to Length(s) - len do
s[i] := s[i + len];

dec(s[0], len);

end;



Объясните пожалуйста, что значит
dec(s[0], len);

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


Гость






dec(s[0], len);
- уменьшить длину строки на Len, а само по себе Len - это параметр, передаваемый в функцию, и показывающий, сколько символов надо удалить, начиная с позиции Start (посмотри на заголовок функции - поймешь, что к чему)...
 К началу страницы 
+ Ответить 

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

 





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