function [S,D,np,jb] = JEdemo(A)
% [S,D,np,jb] = JEdemo(A)
% ----------------------------------------------------------
% Prevod na diagonalne schodovity matice A Jordanovou eliminaci krok po kroku
% S  ... matice A ve schodovitem tvaru
% D  ... regularni diagonalni submatice S
% np ... pocet provedenych zamen radku
% jb ... radkovy vektor sloupcovych indexu baze v A
% POZNAMKA: Pri poslednim schodu staci zadat jen s misto [r,s]
%           pri vstupu z klavesnice nebo nic.

[m,n] = size(A)
jb=[];
np = 0;
A
rs = input('Vlozte polohu dalsiho schodu ve tvaru [r,s]: ');
while length(rs)>=2
  r = rs(1), s = rs(2);
  jb=[jb,s]       %  Dosud nalezene sloupcove pozice schodu
  k = length(jb)  %  Radkova pozice aktualniho schodu
  if r>k
     disp('PREHOZENI k-ho a r-teho RADKU:');
     A([k,r],:) = A([r,k],:)
     np = np+ 1;
  pause;
  else
  disp('Zamena radku se neprovadi')
  end
%-------------------------------------------------------------
  disp('VEKTOR TRANSFORMACNICH SKALARU V s-tem SLOUPCI:')
  alpha = A(:,s)/A(k,s); alpha(k) = NaN;
  disp(alpha.')
%-------------------------------------------------------------
  disp('ELIMINACE ZBYVAJICICH SLOUPCU s+1,...,n:')
  alpha(k)=0; A(:,s:n) = A(:,s:n) - alpha*A(k,s:n)
pause;
%-------------------------------------------------------------
%-------------------------------------------------------------
  disp('Naposledy eliminovany sloupec:');
  s
  rs = input('Vlozte polohu dalsiho schodu ve tvaru [r,s]: ')
end
jb = [jb,rs]
k  = length(jb);
S = A(:,1:n);
D = A(1:k,jb);
