Программа, определяющая является ли слово палиндромом — Pascal(Паскаль)

Разделитель — один из символов « ,.;:!?\»\’» (начиная с пробела и заканчивая апострофом). Буква — любой символ, отличный от разделителя. Слово — непустая последовательность букв, ограниченная с каждой стороны разделителем или концом строки. Например, в строке «x9i23!слово, ,» два слова — «x9i23» и «слово». Исходная строка вводится с клавиатуры, изменённая строка выводится на экран. Если в задании используется «заданное» слово, оно также вводится с клавиатуры. Разделители в программе представляются как множество.

program fr;

label 1;

var
  i, n: integer;
  s, sub: string;
  mn: set of char;

function make_palindrom: boolean;
var
  map: array ['!' .. 'z'] of integer;
  x: char;
  i, m, count: integer;
  result: boolean;
begin
  m := length(sub);
  count := 0;
  for x := '!' to 'z' do
    map[x] := 0;
  for i := 1 to m do
    if (sub[i] >= '!') and (sub[i] <= 'z') then
      inc(map[sub[i]]);
  for x := '!' to 'z' do
    if map[x] mod 2 = 1 then
      inc(count);
  if count >= 2 then
    result := false
  else
    result := true;
  make_palindrom := result;
end;

begin
  mn := [' ', ',', '.', ';', ':', '!', '?', '"'];
  write('Vvedite slova: ');
  readln(s);
  n := 0;
1:
  for i := 1 to length(s) do
    if (s[i] in mn) then
    begin
      if i = 1 then
      begin
        delete(s, 1, 1);
        goto 1;
      end
      else
      begin
        inc(n);
        sub := copy(s, 1, i - 1);
        if not make_palindrom then
          writeln(n, ' slovo: ', sub)
        else
          writeln('    ', n, ' slovo: PALINDROM( ', sub, ' )');

      end;
      delete(s, 1, i);
      goto 1;
    end;
  sub := s;
  if not make_palindrom then
    writeln(n + 1, ' slovo: ', sub)
  else
    writeln('    ', n + 1, ' slovo: PALINDROM( ', sub, ' )');

  readln;

end.

Leave a Comment

1 + 5 =