№1.Создать текст. Определить самое короткое слово в каждом предложении. Удалить эти слова из текста.
Общие указания при составлении программы:
1. Текст стандартного типа String ввести с клавиатуры.
2. Между словами могут быть различные разделители (пробел, запятая, точка и т.д.), которые необходимо задать во множестве.
3. Вывести исходный текст и текст после преобразования его по условию задачи.
PASCAL: текстовые задачи
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Находит и удаляет все самые короткие слова в тексте. Например: "Жил да был на белом свете Федот стрелец, удалой молодец". Удаляются все вхождения слов "да" и "на", так как они самые короткие.
[syntax=Delphi]
type
TWordRef = record
pos,len:integer;
end;
const
delim:set of char=[' ',',','.',#9,#13,#10];
var
txt:string[255];
wordref:array[1..128] of TWordRef;
n,i,j,k:integer;
begin
{$B-}
write('Input any text: ');
readln(txt);
n:=0;
i:=1;
repeat
j:=i;
while not (txt in delim) do inc(i);
if j=i then inc(i) else begin
k:=i-j;
if (n=0) or (wordref[n].len=k) then begin
inc(n);
wordref[n].pos:=j;
wordref[n].len:=k;
end else if (n>0) and (k<wordref[n].len) then begin
wordref[1].pos:=j;
wordref[1].len:=k;
n:=1;
end;
end;
until i>length(txt);
writeln(N, ' shortest word(s) was found.'#13#10'Deleting....');
for i:=n downto 1 do with wordref do begin
write(copy(txt,pos,len),', ');
delete(txt,pos,len);
end;
writeln(#13#10#10'Result text: ',txt);
readln;
end.
{Приер протокола работы программы:
Input any text: qweqweqwe ,dm,m.,mwew,ecmsajciaj cwiedj ld.s,dmf/.,mf/wefpije fs
admfaljsf mcaw.,m/a.m,fasfjapijef
3 shortest word(s) was found.
Deleting....
m, s, m,
Result text: qweqweqwe ,dm,.,mwew,ecmsajciaj cwiedj ld.,dmf/.,mf/wefpije fsadmfa
ljsf mcaw.,m/a.,fasfjapijef
}
[/syntax]
[syntax=Delphi]
type
TWordRef = record
pos,len:integer;
end;
const
delim:set of char=[' ',',','.',#9,#13,#10];
var
txt:string[255];
wordref:array[1..128] of TWordRef;
n,i,j,k:integer;
begin
{$B-}
write('Input any text: ');
readln(txt);
n:=0;
i:=1;
repeat
j:=i;
while not (txt in delim) do inc(i);
if j=i then inc(i) else begin
k:=i-j;
if (n=0) or (wordref[n].len=k) then begin
inc(n);
wordref[n].pos:=j;
wordref[n].len:=k;
end else if (n>0) and (k<wordref[n].len) then begin
wordref[1].pos:=j;
wordref[1].len:=k;
n:=1;
end;
end;
until i>length(txt);
writeln(N, ' shortest word(s) was found.'#13#10'Deleting....');
for i:=n downto 1 do with wordref do begin
write(copy(txt,pos,len),', ');
delete(txt,pos,len);
end;
writeln(#13#10#10'Result text: ',txt);
readln;
end.
{Приер протокола работы программы:
Input any text: qweqweqwe ,dm,m.,mwew,ecmsajciaj cwiedj ld.s,dmf/.,mf/wefpije fs
admfaljsf mcaw.,m/a.m,fasfjapijef
3 shortest word(s) was found.
Deleting....
m, s, m,
Result text: qweqweqwe ,dm,.,mwew,ecmsajciaj cwiedj ld.,dmf/.,mf/wefpije fsadmfa
ljsf mcaw.,m/a.,fasfjapijef
}
[/syntax]
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Ой, сорри. Не внимательно прочитал... "Самое короткое в КАЖДОМ предложении". Т.е надо в каждом предложении отдельно. Исправляюсь:
[syntax=Delphi]
type
TWordRef = record
pos,len:integer;
end;
TWordRefs = record
N:integer;
Refs:array[1..128] of TWordRef
end;
const
pdelim:set of char=['.'];
wdelim:set of char=[' ',',',#9,#13,#10];
var
txt:string[255];
refs:array[1..255] of TWordRefs;
np,i,j,k:integer;
begin
{$B-,R-}
write('Input any text: ');
readln(txt);
np:=1;
refs[np].N:=0;
i:=1;
wdelim:=wdelim+pdelim;
repeat
j:=i;
while not (txt in wdelim) and (i<=length(txt)) do inc(i);
if j=i then inc(i) else begin
k:=i-j;
if (refs[np].N=0) or (refs[np].Refs[refs[np].N].len=k) then begin
inc(refs[np].N);
refs[np].Refs[refs[np].N].pos:=j;
refs[np].Refs[refs[np].N].len:=k;
end else if (refs[np].N>0) and (k<refs[np].Refs[refs[np].N].len) then begin
refs[np].Refs[1].pos:=j;
refs[np].Refs[1].len:=k;
refs[np].N:=1;
end;
end;
if (txt in pdelim) and (i<length(txt)) then begin
inc(np); refs[np].N:=0;
end;
until i>length(txt);
for i:=np downto 1 do begin
writeln(refs.N, ' shortest word(s) was found in paragraph ',i,'.'#13#10'Deleting....');
for j:=refs.N downto 1 do with refs.Refs[j] do begin
write(copy(txt,pos,len),', ');
delete(txt,pos,len);
end;
writeln;
end;
writeln(#13#10#10'Result text: ',txt);
readln;
end.
{Приер протокола работы программы:
Input any text: qwerqwer sdfasdf werqwer 123 wqeqweqw 321 werwerqwer 321. Kaksd
qwd,wswed,123,123,123,333,werwerwe 222.
6 shortest word(s) was found in paragraph 2.
Deleting....
222, 333, 123, 123, 123, qwd,
3 shortest word(s) was found in paragraph 1.
Deleting....
321, 321, 123,
Result text: qwerqwer sdfasdf werqwer wqeqweqw werwerqwer . Kaksd ,wswed,,,,,w
erwerwe .
}
[/syntax]
[syntax=Delphi]
type
TWordRef = record
pos,len:integer;
end;
TWordRefs = record
N:integer;
Refs:array[1..128] of TWordRef
end;
const
pdelim:set of char=['.'];
wdelim:set of char=[' ',',',#9,#13,#10];
var
txt:string[255];
refs:array[1..255] of TWordRefs;
np,i,j,k:integer;
begin
{$B-,R-}
write('Input any text: ');
readln(txt);
np:=1;
refs[np].N:=0;
i:=1;
wdelim:=wdelim+pdelim;
repeat
j:=i;
while not (txt in wdelim) and (i<=length(txt)) do inc(i);
if j=i then inc(i) else begin
k:=i-j;
if (refs[np].N=0) or (refs[np].Refs[refs[np].N].len=k) then begin
inc(refs[np].N);
refs[np].Refs[refs[np].N].pos:=j;
refs[np].Refs[refs[np].N].len:=k;
end else if (refs[np].N>0) and (k<refs[np].Refs[refs[np].N].len) then begin
refs[np].Refs[1].pos:=j;
refs[np].Refs[1].len:=k;
refs[np].N:=1;
end;
end;
if (txt in pdelim) and (i<length(txt)) then begin
inc(np); refs[np].N:=0;
end;
until i>length(txt);
for i:=np downto 1 do begin
writeln(refs.N, ' shortest word(s) was found in paragraph ',i,'.'#13#10'Deleting....');
for j:=refs.N downto 1 do with refs.Refs[j] do begin
write(copy(txt,pos,len),', ');
delete(txt,pos,len);
end;
writeln;
end;
writeln(#13#10#10'Result text: ',txt);
readln;
end.
{Приер протокола работы программы:
Input any text: qwerqwer sdfasdf werqwer 123 wqeqweqw 321 werwerqwer 321. Kaksd
qwd,wswed,123,123,123,333,werwerwe 222.
6 shortest word(s) was found in paragraph 2.
Deleting....
222, 333, 123, 123, 123, qwd,
3 shortest word(s) was found in paragraph 1.
Deleting....
321, 321, 123,
Result text: qwerqwer sdfasdf werqwer wqeqweqw werwerqwer . Kaksd ,wswed,,,,,w
erwerwe .
}
[/syntax]