Помощь - Поиск - Пользователи - Календарь
Полная версия: Текст, строки. Анализ буквенного состава предложения.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Hikep
а не моглибы и мне помочь?))) условие:"вводится текст из нескольких предложений. нужно найти то предложение, в котором встречается больше всего различных букв"
например:
"я люблю музыку. она очень хорошая."
в 1ом предложении ялюбмузык и того 9 разных букв.
во 2ом оначеьхршая и того 11 букв.

в принципе у меня получается, но использовал кучу различных счетчиков у функцию "go to" но как недавно узнал этот способ не подходит, во 1х долго работает если больше 5и предложений, во 2х "go to" ламерский метод blink.gif . когда доходит до точки виснет. и еще хотелось бы учесть различные символы ".!?" и если вдруг есть несколько предложений с одинаковым максимальным различных кол-вом букв
volvo
Цитата
в принципе у меня получается, но использовал кучу различных счетчиков у функцию "go to"
Ух... А давай ты все-таки покажешь, КАК именно у тебя получалось (или не получалось)? А мы уже подправим, если что...

Кстати, зачем в чужой теме? Только потому, что она называется "Задача на строки"? (привет, Istari) Надо было свою тему создать...
Hikep
Цитата(volvo @ 10.12.2008 17:57) *

Ух... А давай ты все-таки покажешь, КАК именно у тебя получалось (или не получалось)? А мы уже подправим, если что...

Кстати, зачем в чужой теме? Только потому, что она называется "Задача на строки"? (привет, Istari) Надо было свою тему создать...



ну да. так как строки.


var

i,k,t,s,m,n:integer;

tekst,alf:string;

bukvy: array [1..33] of char;

alf:='абвгдеежзийклмнопрстуфхцчшщъыьэюя';

m:=0;

begin

readln(tekst);

t:=length(tekst);

1: for i:=1 to 33 do begin

for k:=1 to t do begin

if alf[i]=tekst[k] then begin

for s:=1 to 33 do begin

if tekst[i]<>bykvy[s] then m:=m+1;

else go to: 1 end;

if m=33 then bukvy[i]:=copy(tekst,i,1);

end;

.................

в общем то идея такая но тут такой бардак получается blink.gif
у меня была идея сделать вот так:
проверяем каждую букву на наличие ее в алфавите(чтоб исключить различные не нужные символы) потом копируем ее в созданный массив (предварительно проверив нет ли такой уже) потом как только доходим до точки считаем сколько букв мы откопировали и присваиваем ее к какой нибудь переменной очищаем наш массив и начинаем все с нуля потом проверяем какое число различеых букв больше предыдущее или то что получилось при проверки следующего предложения. и так далее..........


короче получается полная бурда blink.gif

знаю что есть более простые способы решения, и хотелось бы их узнать)))) процедурамми и функциями вроде
П.С. я "Ломаносов"(самоучка);
покажите пожалуйста пример решения этой задачи)))) а дальше я как нибудь сам)))

М
При публикации кода используй теги.
Lapp

volvo
Вот смотри, привожу пример решения задачи... Но ты обещал разобраться в нем... Разбирайся. Он прокомментирован, это будет легко сделать. Если будут какие-то вопросы, что-то непонятно - спрашивай. Не копируй бездумно...

const
s: string = 'music is my love. i very very like it.';

var
max_st, st: string; { Здесь будем хранить макс. строку и текущую строку }
i, count, max: integer;
letters: set of char; { разные буквы в текущем предложении }

begin
max_st := ''; st := ''; { Начальные установки - все обнуляем }
max := 0;
count := 0; letters := [];

i := 1;
{ идем по строке, и проверяем каждый символ: }
while i <= length(s) do begin
if (s[i] = '.') and (count > max) then begin
{
конец продложения и счетчик разных символов в этом
предложении больше, чем был во всех предыдущих?
}
{ обновим максимум и само предложение }
max := count; max_st := st;

{ и подготовимся к обработке след. предложения }
st := ''; count := 0; letters := [];
end { if }
else begin
{
не конец предложения, обычный символ?
проверим, присутствует ли он уже в Letters, надо ли его считать "разным"
}
if not (s[i] in letters) then begin
{ не присутствует, добавляем и увеличиваем счетчик "разных" символов }
letters := letters + [ s[i] ];
inc(count);
end;
{
и составляем текущее предложение, оно может пригодиться,
когда дойдем до символа '.'
}
st := st + s[i];
end; { else }
inc(i); { Все, переходим к следующему символу }
end; { while }
{ строка закончилась - печатаем самое длинное предложение }
writeln(max_st);
end.


Цитата
у меня была идея сделать вот так:
Ну, фактически это и есть то, что сделано у меня. За одним исключением: я не вижу, где здесь полная бурда...
Hikep
Цитата(volvo @ 10.12.2008 19:30) *


Ну, фактически это и есть то, что сделано у меня. За одним исключением: я не вижу, где здесь полная бурда...

про бурду я имел в виду свое творениеsmile.gif
но сейчас посмотрел и все больше убеждаюсь. Все гениальное - просто, и наоборот все простое - гениально! Спасибо большееsmile.gif осталось еще полистать литературу разобраться и для закрепления че нить сделать на подобии, но с другими условиямиsmile.gif а может есть еще какие варианты решения??? Если есть напишите пожалуйста. Охотн знать куда больше чем знаю сейчас.smile.gif да и соображалка будет лучше работатьsmile.gif
Lapp
М
Большая просьба не флудить своими вопросами в чужих темах.
Разделено. Дальше буду удалять.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.