Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
JoKe
Среди нескольких предложений найдите то, которое содержит наибольшее количество разных букв.
Задачу решить с использованием процедур.
maksimla
только букв или включая символы все и пробелы а?

Добавлено через 2 мин.
а правда ты чтонибудь решил или сделал насщет этой задачки?
JoKe
включая все символы и пробелы
нет, не решил, я сообразить не могу никак sad.gif
Айра
Сам подсчет количества можно сделать так:
описываешь множество символов {var ch: set of char}, идешь по строке и сверяешь, если символа нет в множестве {if not (s[j] in ch) then}, то добавляешь его туда {ch:=ch+[s[j]]} и увеличиваешь количество..
JoKe
Цитата
{var ch: set of char}


что такое set of char? я знаю, что char это символьный тип, а вот что такое set...

я учусь на первом курсе (1 семестр), так что нужно как можно проще...
Lapp
Цитата(JoKe @ 20.12.2008 11:19) *
что такое set of char? я знаю, что char это символьный тип, а вот что такое set...

я учусь на первом курсе (1 семестр), так что нужно как можно проще...
set - это множество. Посмотри про него в том учебнике, по которому вы учитесь.

Именно с использованием множества как раз и будет наиболее просто. Все остальные способы, боюсь, будут сложнее.
volvo
Идея такая: символы, которые уже встречались, хранишь в строке, проверять очень удобно, если 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.
JoKe
а если мне нужно проверять любые вводимые с клавиатуры предложения и их может быть любое количество. тогда как быть?
volvo
Что значит "любое количество"? Задаются они одной строкой, или как? Если одной, то не вижу проблем: вместо жесткого прописывания строки в коде - запрашивай ее у пользователя, дальнейшая обработка не меняется... Если нет - то объясняй, КАК вводятся данные (хотя это стоило бы сделать в самом первом посте.)
JoKe
разобрался
всем спасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.