program filterPalindrom; type stringArray = array [1..100] of string; var noWords : integer; words : stringArray; noPalindroms : integer; palindroms : stringArray; procedure readData(var n : integer; var v : stringArray); //reads a vector of strings //data: - (reading subalgorithm) //results: a vector of strings and its length var i : integer; begin write('no of elements is: n = '); readln(n); for i := 1 to n do begin write('element from position ', i, ' is: '); readln(v[i]); end; end; procedure printData(n : integer; v : stringArray); //prints a vector of integers //data: a vector of strings and its length //res: - (printing subalgorithm) var i : integer; begin write('results are: '); for i := 1 to n do write(v[i], ' '); end; function isPalindrom(s : string) : boolean; //checks if a string is palindrom or not //data: a string //res: true, if the string is palindrom // false, otherwise var ok : boolean; i : integer; begin ok := true; i := 1; while ((i <= length(s)/2) and (ok = true)) do begin if (s[i] <> s[ length(s) - i + 1]) then ok := false else i := i + 1; end; isPalindrom := ok; end; procedure filterPalindrom(n : integer; v : stringArray; var m : integer; var p : stringArray); //retains the palindroms of a vector //data: a vector of strings and its length //res: a vector of palindroms and its length var i : integer; begin m := 0; for i := 1 to n do if (isPalindrom(v[i]) = true) then begin m := m + 1; p[m] := v[i]; end; end; begin readData(noWords, words); filterPalindrom(noWords, words, noPalindroms, palindroms); printData(noPalindroms, palindroms); readln(); end.