Урок 17 Задача 8

Урок 17 Задача 8:

Проверить можно ли строки из m перестановкой символов получить строку n.

var
  m, n: string;
  i: integer;
  q: boolean;

{ функция принимает символ и две строки,
  считает, сколько данных символов в одной строке и сколько во второй,
  возвращает значение булевой переменной в зависимости,
  одинаковое или разное количество символов в строках }
function prov(x: char; m, n: string): boolean;
var
  i, a, b: integer;
begin
  a:= 0;
  b:= 0;
  q:= false;
  for i:=1 to length(m) do
  begin
    if x = m[i] then
      a:= a + 1;
    if x = n[i] then
      b:= b + 1;
  end;
  if a = b then
    q:= true;
  result:= q;
end;

begin                            /////////// начало тела основной программы
  write ('Введите строку m: ');
  readln(m);                     // считываем первую строку
  write ('Введите строку n: ');
  readln(n);                     // считываем вторую строку
  if length(m) = length(n) then  // если общее количество символов в строках равно
    for i:=1 to length(m) do     // обходим любую из двух строк
    begin
      q:= prov (m[i], m, n);     // передаем в ф-цию текущий символ и обе строки
      if q = false then          // если количество данного символа в строках разное
        break;                   // выходим из цикла
    end;
  if (not (length(m) = length(n))) or (q = false) then // если количество символов в строках разное или ф-ция вернула ложный рез-тат
    write ('Нельзя')
  else
    write ('Можно');
  readln();
end.

Вывод в консоли:

Введите строку m: sdfg
Введите строку n: sdff
Нельзя
Введите строку m: sdsdg
Введите строку n: gd
Нельзя
Введите строку m: gffkl
Введите строку n: flkgf
Можно