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

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

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

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


Профи
****

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

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


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

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

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

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


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

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

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


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

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

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 7.01.2007 14:07
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2007 14:31
Сообщение #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, взята отсюда: Строки
 К началу страницы 
+ Ответить 
18192123
сообщение 7.01.2007 15:36
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2007 15:47
Сообщение #6


Гость






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

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

 



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