Уважаемые знатоки! Внимание, нужно написать программу, которая вводит строку символов и выводит на экран сначала предложення, которые начинаются с однобуквенных слов, а потом все остальные. Заранее спасибо! Очень на вас надеюсь.
Bokul
10.12.2006 3:59
Цитата
выводит на экран сначала предложення
Что считать предложением?
Свои наработки есть? В чем возникли затруднения?
d1monn
10.12.2006 4:08
program Project2;
{$APPTYPE CONSOLE}const MLA=['A'..'Z','a'..'z'];
MRZ=['.','!'];
var l,i,k,zzr,ps:integer; s:string;
begin
readln(s);
l:=length(s);
i:=1;
k:=0;
while i<=l dobegin
zzr:=0;
while (i<=l) andnot (s[i] in MLA) dobeginif s[i] in MRZ then inc(zzr);
inc(i);
end;
if i<=l thenbegin
k:=k+1;
ps:=i;
while (i<=l) and (s[i] in MLA) do i:=i+1;
if ((k=1) or (zzr>0)) and (i-ps=1) then writeln(copy(s,ps,1));
ifend;
end;
write(k);
readln;
readln;
end.
Bokul
10.12.2006 4:29
А комментарии к этому можно?
d1monn
10.12.2006 4:38
S- строка MLA- множество лат. алфавита MRZ- множество знаков препинания k- кол-во слов в тексте ps- первое слово
В итоге у меня выводится только первое однобуквенное слово предложения и кол-во слов в тексте. Надо изменить исходник так, чтобы сначала шли предложения, которые начинаются с однобуквенных слов, а потом остальные предложения текста. Пример такого предложения: В лесу родилась елочка. За критерий окончания предложения взято . ! , Помогите мне пожалуйста!
Bokul
10.12.2006 6:55
Вот , вроде то, что надо...
const
WordSeparators=[' ',',',';'];
SentenceSeparators=['?','.','!'];
Function FindFirstWord(s:string):string;
var i:byte;
buf:string;
begin
buf:='';
for i:=1to length(s) dobeginif (s[i] in WordSeparators) and (buf<>'') then
break;
ifnot(s[i] in WordSeparators) then
buf:=buf+s[i];
end;
FindFirstWord:=buf;
end;
Function FindFirstSentence(s:string):string;
var buf:string;
i:byte;
begin
i:=0;
buf:='';
repeat
inc(i);
buf:=buf+s[i];
until (s[i] in SentenceSeparators) or (i=length(s));
FindFirstSentence:=buf;
end;
procedure MoveToEnd(from,num:byte; var s:string);
var buf:string;
begin
buf:=copy(s,from,num);
delete(s,from,num);
s:=s+buf;
end;
function Result(s:string):string;
var sentence:string;
from,size,last:byte;
begin
from:=1;
last:=length(s);
repeat
sentence:=FindFirstSentence(copy(s,from,last));
size:=length(sentence);
if length(FindFirstWord(sentence))=1then
inc(from,size)
elsebegin
MoveToEnd(from,size,s);
dec(last,size);
end;
until from>=last;
Result:=s;
end;
var s:string;
begin
s:=', , Hello. I am so cool . I am so big. Yes! Pascal. I am so clever ';
writeln(s);
writeln(Result(s));
readln;
end.
Старался давать переменным и функциям понятные имена, так что все должно быть понятно.
6ac9k
10.12.2006 7:53
Цитата(Bokul @ 10.12.2006 2:55)
Вот , вроде то, что надо...
const
WordSeparators=[' ',',',';'];
SentenceSeparators=['?','.','!'];
Function FindFirstWord(s:string):string;
var i:byte;
buf:string;
begin
buf:='';
for i:=1to length(s) dobeginif (s[i] in WordSeparators) and (buf<>'') then
break;
ifnot(s[i] in WordSeparators) then
buf:=buf+s[i];
end;
FindFirstWord:=buf;
end;
Function FindFirstSentence(s:string):string;
var buf:string;
i:byte;
begin
i:=0;
buf:='';
repeat
inc(i);
buf:=buf+s[i];
until (s[i] in SentenceSeparators) or (i=length(s));
FindFirstSentence:=buf;
end;
procedure MoveToEnd(from,num:byte; var s:string);
var buf:string;
begin
buf:=copy(s,from,num);
delete(s,from,num);
s:=s+buf;
end;
function Result(s:string):string;
var sentence:string;
from,size,last:byte;
begin
from:=1;
last:=length(s);
repeat
sentence:=FindFirstSentence(copy(s,from,last));
size:=length(sentence);
if length(FindFirstWord(sentence))=1then
inc(from,size)
elsebegin
MoveToEnd(from,size,s);
dec(last,size);
end;
until from>=last;
Result:=s;
end;
var s:string;
begin
s:=', , Hello. I am so cool . I am so big. Yes! Pascal. I am so clever ';
writeln(s);
writeln(Result(s));
readln;
end.
Старался давать переменным и функциям понятные имена, так что все должно быть понятно.
Спасиб большое!
А как насчет
Описать процедуру Height (Ax, Ay, Bx, By, Cx, Cy, hA, hB, hC), находящую высоту hB, hA, hC треуголника ABC, проведенные соответственно из вершин A, B, C. С помощью этой процедуры найти высоты преугольником ABC, ABD, ACD, если даны координаты точек A, B, C, D. Если не сложно
Цитата(d1monn @ 10.12.2006 0:38)
S- строка MLA- множество лат. алфавита MRZ- множество знаков препинания k- кол-во слов в тексте ps- первое слово
В итоге у меня выводится только первое однобуквенное слово предложения и кол-во слов в тексте. Надо изменить исходник так, чтобы сначала шли предложения, которые начинаются с однобуквенных слов, а потом остальные предложения текста. Пример такого предложения: В лесу родилась елочка. За критерий окончания предложения взято . ! , Помогите мне пожалуйста!
Я пока думаю, если получится скину
Bokul
10.12.2006 7:54
Цитата
Спасиб большое!
Кажется я шутки не понял...
А насчет задачи, советую почитать правила форума.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.