Дана строка, слова разделены пробелом, напечатать в алфавитном порядке все гласные, которые входят хотя бы в одно слово, кроме первого.
Помогите с задачкой в Паскале.

Const
  gl = аеёиоуыэюя;

var
  s: string;
  f: array[1..10] of boolean;
  i, m: integer;

begin
  Write(Введите фразу: ); Readln(s);
  m := Pos( , s);
  if m = 0 then Writeln(В строке отсутствуют пробелы)
  else begin
    for i := 1 to 10 do f[i] := False;
    for i := m + 1 to length(s) do
      case s[i] of
        А, а: f[1] := True;
        Е, е: f[2] := True;
        Ё, ё: f[3] := True;
        И, и: f[4] := True;
        О, о: f[5] := True;
        У, у: f[6] := True;
        Ы, ы: f[7] := True;
        Э, э: f[8] := True;
        Ю, ю: f[9] := True;
        Я, я: f[10] := True
      end;
    Write(Найдены гласные: );
    for i := 1 to 10 do
      if f[i] then Write(gl[i], );
    Writeln
  end
end.

Тестовое решение:
Введите фразу: Это проверочная фраза "Мама мыла раму". Конец теста.
Найдены гласные: а е о у ы я

В Pascal.ABC можно написать и короче:
const
  gl = аеёиоуыэюя;

var
  s: string;
  f: array[1..10] of boolean;
  i, m, p: integer;

begin
  Write(Введите фразу: ); Readln(s);
  m := Pos( , s);
  if m = 0 then Writeln(В строке отсутствуют пробелы)
  else begin
    for i := 1 to 10 do f[i] := False;
    s := LowerCase(s); { перекодировать к нижнему регистру }
    for i := m + 1 to length(s) do
    begin
      p := Pos(s[i], gl);
      if p > 0 then f[p] := True
    end;
    Write(Найдены гласные: );
    for i := 1 to 10 do
      if f[i] then Write(gl[i], );
    Writeln
  end
end.


Оцени ответ
Подпишись на наш канал в телеграм. Там мы даём ещё больше полезной информации для школьников!

Загрузить картинку