![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
нужно найти самое короткое слово в первом предложении, которого нет во втором предложении.
а также в обоих предложениях удалить символ # и удвоить символ +. подскажите хотя бы,с чего начать. -------------------- irreparabilium felix olivio rerum
|
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Пусть 1 предложение - первая строка , а вторая строка - второе предложение.
Начни с того, что разбей строки на слова. Как это сделать - возьми любой алгоритм отсюда или FAQ разбиение на слова Если не нравяться те алгоритмы, можешь взять мою программу - Разбиение на слова Далее, имея масив (или список) слов, работаешь с ними. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а вот по второй части задания.
попробовала сделать так: Код var i,k:integer; begin for i:=0 to length(p1) do begin k:=pos('#',p1); delete(p1,k,1); k:=pos('+',p1); insert('+',p1,k+1); end; for i:=0 to length(p2) do begin k:=pos('#',p2); delete(p2,k,1); k:=pos('+',p2); insert('+',p2,k+1); end; символ # удаляется, а вот + становится просто много=) -------------------- irreparabilium felix olivio rerum
|
hardcase |
![]()
Сообщение
#4
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
//убирает #
procedure RemoveSharp (var S: string);
var i, len: integer;
begin
i:=1;
len:=Length(S);
while i <= len do begin
if S[i] = '#' then begin
delete(S, i, 1);
dec(len);
end;
inc(i);
end;
end;
// удваивает +
procedure DuplicatePlus(var S: string);
var i, Len: ineger;
begin
i:=1;
len:=Length(S);
while i <= len do begin
if S[i] = '+' then begin
insert('+', S, i);
inc(i);
inc(len);
end;
inc(i);
end;
end;
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Дык можно короче ...
while pos('#', s) <> 0 do delete(s, pos('#', s), 1);
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
hardcase |
![]()
Сообщение
#6
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Я,знаю, но Pos будет много раз просматривать строку, а я за 1 проход убиваю все '#' - мы ведь не что-то вроде substr ищем.
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Tribunal |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
объясните,пожалуйста,в чем проблема
Код const lim=[#0..#32,'.',',',':',';','!','?','"','+']; type Twords=array[1..40] of string; zel=set of byte; var z:zel; i,n1,n2,min,d,k:byte; w1,w2:Twords; function GWords(p:string;var w:Twords):byte; var i,b,n:byte; begin i:=1; n:=0; while (i<=length(p)) do begin while (i<=length(p)) and (p[i] in lim) do inc(i);{+1} if i<=length(p) then begin b:=i; while (i<=length(p)) and not(p[i] in lim) do inc(i); inc(n); w[n]:=copy(p,b,i-b); end; end; GWords:=n; end; begin n1:=GWords(p1,w1); n2:=GWords(p2,w2); repeat min:=length(w1[1]); for i:=1 to n1 do if length(w1[i])<min then begin min:=length(w1[i]); k:=i; end; for i:=1 to n2 do d:=pos(w1[k],w2[i]) until not(d in z); Label4.Caption:=w1[k]; end; в некоторых случаях она даже работает=) -------------------- irreparabilium felix olivio rerum
|
hardcase |
![]()
Сообщение
#8
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Вероятно программа разбивает на слова строки p1 и p2 а потом находит самое короткое слово из p1.
А вообще-то написан откровенный бред. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Tribunal |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
Вероятно программа разбивает на слова строки p1 и p2 а потом находит самое короткое слово из p1. А вообще-то написан откровенный бред. ну предложите,пожалуйста,свой вариант решения данной проблемы,если не трудно -------------------- irreparabilium felix olivio rerum
|
hardcase |
![]()
Сообщение
#10
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Воробще-то нужно для начала написать, что за задание или, то, что вы ожидаете от программы - ТАКОЙ код никто смотреть просто не станет.
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Tribunal |
![]()
Сообщение
#11
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
задание в самом начале темы.
мне нужно найти в первом предложении самое короткое слово,которого нет во втором. -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#12
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
еще вот такой недоработанный вариант выделения искомого слова
Код begin n1:=GWords(p1,w1); n2:=GWords(p2,w2); m:=0; min:=length(w1[1]); while i<=n1 do begin if length(w1[i])<min then begin min:=length(w1[i]); inc(m); w3[m]:=w1[i]; end; if m=0 then begin inc(m); w3[m]:=w1[1]; end; end; while i<=n2 do begin while j<=m do begin if w3[j]<>w2[i] then writeln(w3[j]); inc(j); end; inc(i); end; end; -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#13
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
помогите,пожалуйста,
никак не плучается выделить такое слово -------------------- irreparabilium felix olivio rerum
|
klem4 |
![]()
Сообщение
#14
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Проверяй ...
uses crt;
type
TWords = array[1..40] of string;
function GetWords(s : string; var w : TWords) : byte;
const
limits = [#0..#32,'.',',',':',';','!','?','"'];
var
i,back,n : byte;
begin
i := 1;
n := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] in limits) do
inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and not(s[i] in limits) do
inc(i);
inc(n);
w[n] := copy(s, back, i-back);
end;
end;
GetWords := n;
end;
function Find(w1, w2 : TWords; n1, n2 : byte) : string;
var
i, j, k, nmin : byte;
begin
// удаляем из первого массива слова, которые есть во втором
i := 1;
while (i <= n1) do begin
j := 1;
while (j <= n2) and (w1[i] <> w2[j]) do inc(j);
if j <= n2 then begin
for k := i to pred(n1) do w1[k] := w1[succ(k)];
dec(n1);
end
else inc(i);
end;
nmin := 0;
if n1 > 0 then begin
nmin := 1;
for i := 2 to n1 do
if w1[i] < w1[nmin] then nmin := i;
end;
if nmin > 0 then Find := w1[nmin] else Find := '';
end;
var
s1, s2 : string;
w1, w2 : TWords;
n1, n2 : byte;
begin
clrscr;
s1 := 'I love pascal, but hate fortran.';
s2 := 'I love pascal, and hate fortran too.';
n1 := GetWords(s1, w1);
n2 := GetWords(s2, w2);
writeln(Find(w1, w2, n1, n2));
readln;
end.
Сообщение отредактировано: volvo - 2.11.2006 17:32 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Tribunal |
![]()
Сообщение
#15
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
спасибо большое.
а если слов минимальной длины несколько? я попробовала выводить слова минимальной длины,но выводится только последнее. в чем ошибка? ![]() Код i:=1; while (i<=n1) do begin if length(w1[i])=nmin then writeln(w1[i]); inc(i); end; Сообщение отредактировано: Tribunal - 28.03.2006 14:45 -------------------- irreparabilium felix olivio rerum
|
klem4 |
![]()
Сообщение
#16
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
if n1 > 0 then begin
nmin := 1;
for i := 2 to n1 do
if w1[i] < w1[nmin] then begin
nmin := i;
writeln(w1[nmin]); { <---- }
end;
end;
вот так. Сообщение отредактировано: volvo - 2.11.2006 17:33 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 14:55 |