Программа, определяющая является ли слово палиндромом
Категория: Delphi/Pascal
2012-02-11 20:16:34
Разделитель — один из символов « ,.;:!?\"\'» (начиная с пробела и заканчивая апострофом). Буква — любой символ, отличный от разделителя. Слово — непустая последовательность букв, ограниченная с каждой стороны разделителем или концом строки. Например, в строке «x9i23!слово, ,» два слова — «x9i23» и «слово». Исходная строка вводится с клавиатуры, изменённая строка выводится на экран. Если в задании используется «заданное» слово, оно также вводится с клавиатуры. Разделители в программе представляются как множество.
code: #pascal
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.
Поделиться: