Уважаемые знатоки! Внимание, нужно написать программу, которая вводит строку символов и выводит на экран сначала предложення, которые начинаются с однобуквенных слов, а потом все остальные. Заранее спасибо! Очень на вас надеюсь.
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 do begin zzr:=0; while (i<=l) and not (s[i] in MLA) do begin if s[i] in MRZ then inc(zzr); inc(i); end; if i<=l then begin 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)); if
end; end; write(k); readln; readln; end.
Bokul
10.12.2006 4:29
А комментарии к этому можно?
d1monn
10.12.2006 4:38
S- строка MLA- множество лат. алфавита MRZ- множество знаков препинания k- кол-во слов в тексте ps- первое слово
В итоге у меня выводится только первое однобуквенное слово предложения и кол-во слов в тексте. Надо изменить исходник так, чтобы сначала шли предложения, которые начинаются с однобуквенных слов, а потом остальные предложения текста. Пример такого предложения: В лесу родилась елочка. За критерий окончания предложения взято . ! , Помогите мне пожалуйста!
Function FindFirstWord(s:string):string; var i:byte; buf:string; begin buf:=''; for i:=1 to length(s) do begin if (s[i] in WordSeparators) and (buf<>'') then break; if not(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))=1 then inc(from,size) else begin 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.
Старался давать переменным и функциям понятные имена, так что все должно быть понятно.
Function FindFirstWord(s:string):string; var i:byte; buf:string; begin buf:=''; for i:=1 to length(s) do begin if (s[i] in WordSeparators) and (buf<>'') then break; if not(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))=1 then inc(from,size) else begin 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
Цитата
Спасиб большое!
Кажется я шутки не понял...
А насчет задачи, советую почитать правила форума.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.