Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза. - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите плиз!оочень нужно(((( Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза. Указание: решение задачи простое, если вы будете использо-вать множества. Заведите три множества X1, X2 и X3 (сначала эти множества пустые). И в цикле просмотрите все символы из введенной строки. С каждым символом – маленькой латинской буквой  выполняйте следующие действия: 1. Если этого символа нет в X1, то поместите его туда (после окончания цикла множество X1 содержит все символы из строки). 2. Если этот символ есть в X1 и нет в X2, то поместите этот символ в X2 (после окончания цикла множество X2 содержит все символы из строки, которые там встречаются более одного раза). 3. Если этот символ есть в X1 и в X2, то поместите этот символ в X3 (после окончания цикла множество X3 со-держит все символы из строки, которые там встреча-ются более двух раз). После окончания цикла распечатайте в алфавитном порядке все элементы из разности множеств X2–X3. Это будет ответ. (Используйте цикл for c:=’a’ to ‘z’ do если c входит в X2–X3, то печать c. )

Решение задачи: «Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза.»

textual
Листинг программы
var s: string;
    i: byte;
    c: char;
    x1, x2: set of char;
 
begin
  x1:=[];
  x2:=[];
  writeln('Enter string:');
  readln(s);
  for i := 1 to length(s) do
    if s[i] in ['a'..'z']
      then if not ((s[i] in x1) or (s[i] in x2))
        then include(x1, s[i])
        else if (s[i] in x1) and not (s[i] in x2)
          then include(x2, s[i])
          else if (s[i] in x1) and (s[i] in x2)
            then exclude(x1, s[i]);
  x1 := x1 * x2;
  if x1 = []
    then write('In string there are no letters which are found exactly two times.')
    else begin
      writeln('Letters, meeting in string exactly two times:');
      for c:='a' to 'z' do if c in x1 then write(c,' ')
    end;
  readln
end.

Объяснение кода листинга программы

  1. Создаются две пустые переменные типа set of char - x1 и x2.
  2. Выводится сообщение для ввода строки.
  3. Считывается строка от пользователя.
  4. В цикле for перебираются все символы входной строки.
  5. Проверяется, является ли текущий символ маленькой латинской буквой.
  6. Если символ является маленькой латинской буквой и еще не был учтен ни в x1, ни в x2, то он добавляется в x1.
  7. Если символ является маленькой латинской буквой и уже был учтен в x1, но не в x2, то он добавляется в x2.
  8. Если символ является маленькой латинской буквой и был учтен и в x1, и в x2, то он исключается из x1.
  9. После завершения цикла, x1 и x2 объединяются в одну строку.
  10. Проверяется, пустая ли получившаяся строка.
  11. Если строка пустая, выводится сообщение о том, что в исходной строке нет букв, встречающихся ровно два раза.
  12. Если строка не пустая, выводится сообщение с перечислением всех букв, встречающихся в ней ровно два раза.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.462 из 5
Похожие ответы