SEM INF 26.1.2011

26.01.2011 18:14

Palindróm...
    Dnes sme začali niečo nové, je to palindróm. Palindróm je taký reťazec znakov, ktorý je aj odzadu aj odpredu to isté.

Program Palindrom
    Nie je to ale program ktorý zistí či je zadaný reťazec palindrómom, ale v dlhom reťazci znakov nájde najdlhší palindróm a vypíše jeho dĺžku. Je to program pre palindrómy iba s JEDNÝM stredom, to znamená že palindróm má nepárny počet znakov, inak by to tento program nenašiel.

***

program palindrom;
uses Crt;
var i,l,n,max,d : integer;
    sedi : boolean;
    a : array [1..1000] of char;
begin
  Clrscr;
  write('Zadaj dlzku retazca: ');
  readln(N);
  write('Zadaj retazec: ');
  for i:=1 to N do read(a[i]);
  readln;
  max:=1;
  sedi:=true;
  for i:=2 to N-1 do begin
    l:=1;
    d:=1;
    sedi:=true;
    while sedi=true do begin
      if ((i-l)>0) AND ((i+l)<=N) then
        if a[i-l]=a[i+l] then begin
          d:=d+2; l:=l+1;
          if max         end
        else sedi:=false
      else sedi:=false;
    end;
  end;
  if max<>1 then writeln('Najdlhsi Palindrom ma dlzku: ',max)
  else writeln('Palindrom sa tu nenachadza.');
  readln;
end.

***

Tento program je tu.
Aplikácia je tu.
Tento program pracoval na princípe: Najprv načíta všetky znaky do poľa a. A potom vezme každý prvok medzi druhým a predposledným vrátane. Tvári sa, že tento prvok je stredom palindrómu a zisťuje či znaky okolo neho sú rovnaké, ak áno, tak dĺžka palindrómu je 3, potom sa pozrie na ďalšie 2 okolo neho a zistí či sú rovnaké, a tak ďalej. Dĺžku terajšieho palindrómu si ukladá do 'd', a potom ak d bude väčšie ako max, tak do max priradí 'd'.


Koniec hodiny.

—————

Späť


Program pre DVA STREDY

Tento program pracuje, aj keď ma palindróm iba jeden stred, alebo dĺžku 2.

*** 

program palindrom_1;
uses Crt;
var i,l,n,max,d,k : integer;
    sedi : boolean;
    a : array [1..1000] of char;
begin
  Clrscr;
  write('Zadaj dlzku retazca: ');
  readln(N);
  write('Zadaj retazec: ');
  for i:=1 to N do read(a[i]);
  readln;
  max:=1;
  sedi:=true;
  for i:=1 to N-1 do begin
    d:=0;
    if a[i]=a[i+1] then begin k:=1; d:=1; max:=2; end
    else k:=0;
    l:=1;
    d:=d+1;
    sedi:=true;
    while sedi=true do begin
      if ((i-l)>=0) AND ((i+l+k)<=N) then
        if a[i-l]=a[i+k+l] then begin
          d:=d+2; l:=l+1;
          if max         end
        else sedi:=false
      else sedi:=false;
    end;
  end;
  if max<>1 then writeln('Najdlhsi Palindrom ma dlzku: ',max)
  else writeln('Palindrom sa tu nenachadza.');
  readln;
end. 

***

Tento program je tu.
Aplikácia je tu.
Tento program pracoval na princípe: takom istom ako ten predošlý, ale ak zistil že dva prvky ved+a seba su rovnake, tak 'k' priradil 1, čim teda každé číslo ktoré pozeral vľavo porovná s číslom ktoré je vpravo o jedna ďalej ako pôvodne.