IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Строки
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Среди нескольких предложений найдите то, которое содержит наибольшее количество разных букв.
Задачу решить с использованием процедур.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Идея такая: символы, которые уже встречались, хранишь в строке, проверять очень удобно, если pos возвращает ненулевой результат, то буква уже была, если ноль - то еще не было. "Помечать" символ уже существующим тоже удобно: просто добавить его к строке... Вот так, например (я все прокомментировал, попробуй разобраться, если чего не понятно - спрашивай).
procedure check_letters(ch: char; var letrs: string);
begin
{
Проверяем, встречался ли уже символ раньше в этом предложении,
если не было - добавляем его к строке
}
if pos(ch, letrs) = 0 then letrs := letrs + ch;
end;

var
s, sent, max_sent, letters: string;
i, max_let: integer;
begin
s := 'abcd def. bbabbde yrye, trtkj! defrertyyl? trtll.'; { исходная строка }
sent := ''; letters := ''; max_sent := ''; max_let := 0;
for i := 1 to length(s) do begin { пробегаем по всем символам строки }

if s[i] in ['.', '!', '?'] then begin { закончилось предложение? }
if length(letters) > max_let then begin { разных букв больше, чем максимальное до сих пор количество? }
{ Да, запоминаем новый максимум, и запоминаем предложение}
max_let := length(letters); max_sent := sent;
end;

{ В любом случае подготовимся к обработке следующего предложения: обнулим все, что нужно }
sent := ''; letters := '';
end
else begin
{
Нет, предложение еще не закончилось. Добавляем букву в sent ("собираем" из букв
само предложение), и проверяем, встречалась ли s[ i ] до сих пор - процедурой
}
sent := sent + s[i];
check_letters(s[i], letters);
end;

end;

{ Все, печатаем результат }
writeln('Предложение: "', max_sent, ' " содержит ', max_let, ' разных символов');
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.05.2024 14:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name