Téma:   Přečtení dat ze Stdin a setřídění přes pracovní 1-bytový kód

 

ČeV-OC  ~ ~ ~  JDoodle Online COBOL Compiler IDE ... ~ ~ ~ a720.txt

program-id. 
    a720-trideni-cestiny-utf-8.
        *> vstupem jsou řádky Stdin, ukončené "Enter"
        *> transformaci přes 1-bytový kód KW lze využít i v indexových souborech
        *> limit umožňuje definovat maximálně asi 80 řádků vstupních dat 

environment division.  
    input-output section.
        file-control.
            select TRIDENI assign disk.
data division.
    file section.
        sd  TRIDENI.
            1  RADEK pic x(80).
    working-storage section.
        77  T pic 9.
            88  PRACE value 0.
            88  KONEC value 1.
        77  I pic 999.
        77  J pic 999.
        77  K pic 9.
         88  UW value 1.
         88  WU value 2.
        77  TX pic 999.
        1 KW.
            2 pic x(20) value
                x"a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7".
            2 pic x(20) value
                x"b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb".
            2 pic x(20) value
                x"cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf".
            2 pic x(20) value
                x"e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3".
            2 pic x(4) value
                x"f4f5f6f7".
       1 KW-H redefines KW.
            2 H pic x occurs 84.
        1 ZA.
            2 A pic x occurs 80.
        1 ZB.
            2 B pic x occurs 80.

procedure division.
    display "----- TŘÍDĚNÍ"
    sort TRIDENI ascending RADEK
        input procedure VSTUP
        output procedure VYSTUP
    display "----- KONEC" 
    stop run.
    
VSTUP.
    set UW to true
    set PRACE to true
    perform until KONEC
        accept RADEK
        if RADEK = space
            set KONEC to true
        else
            move RADEK to ZA 
            perform UPRAVA
            release RADEK from ZB
            end-if end-perform.

VYSTUP.
    set WU to true
    set PRACE to true
    perform until KONEC
        return TRIDENI
            end 
                set KONEC to true
            not end
                move RADEK to ZA
                perform UPRAVA
                display ZB
            end-return end-perform.

UPRAVA.
    initialize TX ZB
    inspect ZA tallying TX for trailing space
    compute TX = 80 - TX
    move 1 to I J
    perform until I > TX
        evaluate true
            when UW perform UPRAVA-UW
            when WU perform UPRAVA-WU
            when other display "chyba programu !!!"
            end-evaluate end-perform.

UPRAVA-UW.
    evaluate true
    *> CH 27   Ch 28   cH 29   ch 30
    *> x"4348" x"4368" x"6348" x"6368"
        when A(I) = "C" and A(I + 1) = "H" move H(27) to B(J) add 2 to I add 1 to J
        when A(I) = "C" and A(I + 1) = "h" move H(28) to B(J) add 2 to I add 1 to J
        when A(I) = "c" and A(I + 1) = "H" move H(29) to B(J) add 2 to I add 1 to J
        when A(I) = "c" and A(I + 1) = "h" move H(30) to B(J) add 2 to I add 1 to J
    *> A 1   a 2   Á 3     á 4     B 5   b 6   C 7   c 8   Č 9     č 10
    *> x"41" x"61" x"c381" x"c3a1" x"42" x"62" x"43" x"63" x"c48c" x"c48d"
        when A(I) = "A" move H(1) to B(J) add 1 to I J
        when A(I) = "a" move H(2) to B(J) add 1 to I J
        when A(I) = x"c3" and A(I + 1) = x"81" move H(3) to B(J) add 2 to I add 1 to J
        when A(I) = x"c3" and A(I + 1) = x"a1" move H(4) to B(J) add 2 to I add 1 to J
        when A(I) = "B" move H(5) to B(J) add 1 to I J
        when A(I) = "b" move H(6) to B(J) add 1 to I J
        when A(I) = "C" move H(7) to B(J) add 1 to I J
        when A(I) = "c" move H(8) to B(J) add 1 to I J
        when A(I) = x"c4" and A(I + 1) = x"8c" move H(9) to B(J) add 2 to I add 1 to J
        when A(I) = x"c4" and A(I + 1) = x"8d" move H(10) to B(J) add 2 to I add 1 to J
    *> D 11  d 12  Ď 13    ď 14    E 15  e 16  É 17    é 18    Ě 19    ě 20
    *> x"44" x"64" x"c48e" x"c48f" x"45" x"65" x"c389" x"c3a9" x"c49a" x"c49b"   
        when A(I) = "D" move H(11) to B(J) add 1 to I J
        when A(I) = "d" move H(12) to B(J) add 1 to I J
        when A(I) = x"c4" and A(I + 1) = x"8e" move H(13) to B(J) add 2 to I add 1 to J
        when A(I) = x"c4" and A(I + 1) = x"8f" move H(14) to B(J) add 2 to I add 1 to J
        when A(I) = "E" move H(15) to B(J) add 1 to I J
        when A(I) = "e" move H(16) to B(J) add 1 to I J
        when A(I) = x"c3" and A(I + 1) = x"89" move H(17) to B(J) add 2 to I add 1 to J
        when A(I) = x"c3" and A(I + 1) = x"a9" move H(18) to B(J) add 2 to I add 1 to J
        when A(I) = x"c4" and A(I + 1) = x"9a" move H(19) to B(J) add 2 to I add 1 to J
        when A(I) = x"c4" and A(I + 1) = x"9b" move H(20) to B(J) add 2 to I add 1 to J
    *> F 21  f 22  G 23  g 24  H 25  h 26  - - - - CH 27, Ch 28, cH 29, ch 30 - viz nahoře
    *> x"46" x"66" x"47" x"67" x"48" x"68" 
        when A(I) = "F" move H(21) to B(J) add 1 to I J
        when A(I) = "f" move H(22) to B(J) add 1 to I J
        when A(I) = "G" move H(23) to B(J) add 1 to I J
        when A(I) = "g" move H(24) to B(J) add 1 to I J
        when A(I) = "H" move H(25) to B(J) add 1 to I J
        when A(I) = "h" move H(26) to B(J) add 1 to I J
    *> I 31  i 32  Í 33    í 34    J 35  j 36  K 37  k 38  L 39  l 40
    *> x"49" x"69" x"c38d" x"c3ad" x"4a" x"6a" x"4b" x"6b" x"4c" x"6c"
        when A(I) = "I" move H(31) to B(J) add 1 to I J
        when A(I) = "i" move H(32) to B(J) add 1 to I J
        when A(I) = x"c3" and A(I + 1) = x"8d" move H(33) to B(J) add 2 to I add 1 to J
        when A(I) = x"c3" and A(I + 1) = x"ad" move H(34) to B(J) add 2 to I add 1 to J
        when A(I) = "J" move H(35) to B(J) add 1 to I J
        when A(I) = "j" move H(36) to B(J) add 1 to I J
        when A(I) = "K" move H(37) to B(J) add 1 to I J
        when A(I) = "k" move H(38) to B(J) add 1 to I J
        when A(I) = "L" move H(39) to B(J) add 1 to I J
        when A(I) = "l" move H(40) to B(J) add 1 to I J
    *> M 41  m 42  N 43  n 44  O 45  o 46  Ó 47    ó 48    P 49  p 50
    *> x"4d" x"6d" x"4e" x"6e" x"4f" x"6f" x"c393" x"c3b3" x"50" x"70"
        when A(I) = "M" move H(41) to B(J) add 1 to I J
        when A(I) = "m" move H(42) to B(J) add 1 to I J
        when A(I) = "N" move H(43) to B(J) add 1 to I J
        when A(I) = "n" move H(44) to B(J) add 1 to I J
        when A(I) = "O" move H(45) to B(J) add 1 to I J
        when A(I) = "o" move H(46) to B(J) add 1 to I J
        when A(I) = x"c3" and A(I + 1) = x"93" move H(47) to B(J) add 2 to I add 1 to J
        when A(I) = x"c3" and A(I + 1) = x"b3" move H(48) to B(J) add 2 to I add 1 to J
        when A(I) = "P" move H(49) to B(J) add 1 to I J
        when A(I) = "p" move H(50) to B(J) add 1 to I J
    *> Q 51  q 52  R 53  r 54  Ř 55    ř 56    S 57  s 58  Š 59    š 60
    *> x"51" x"71" x"52" x"72" x"c598" x"c599" x"53" x"73" x"c5a0" x"c5a1" 
        when A(I) = "q" move H(52) to B(J) add 1 to I J
        when A(I) = "R" move H(53) to B(J) add 1 to I J
        when A(I) = "Q" move H(51) to B(J) add 1 to I J
        when A(I) = "r" move H(54) to B(J) add 1 to I J
        when A(I) = x"c5" and A(I + 1) = x"98" move H(55) to B(J) add 2 to I add 1 to J
        when A(I) = x"c5" and A(I + 1) = x"99" move H(56) to B(J) add 2 to I add 1 to J
        when A(I) = "S" move H(57) to B(J) add 1 to I J
        when A(I) = "s" move H(58) to B(J) add 1 to I J
        when A(I) = x"c5" and A(I + 1) = x"a0" move H(59) to B(J) add 2 to I add 1 to J
        when A(I) = x"c5" and A(I + 1) = x"a1" move H(60) to B(J) add 2 to I add 1 to J
    *> T 61  t 62  Ť 63    ť 64    U 65  u 66  Ú 67    ú 68    Ǔ 69    ů 70  
    *> x"54" x"74" x"c5a4" x"c5a5" x"55" x"75" x"c39a" x"c3ba" x"c793" x"c5af"
        when A(I) = "T" move H(61) to B(J) add 1 to I J
        when A(I) = "t" move H(62) to B(J) add 1 to I J
        when A(I) = x"c5" and A(I + 1) = x"a4" move H(63) to B(J) add 2 to I add 1 to J
        when A(I) = x"c5" and A(I + 1) = x"a5" move H(64) to B(J) add 2 to I add 1 to J
        when A(I) = "U" move H(65) to B(J) add 1 to I J
        when A(I) = "u" move H(66) to B(J) add 1 to I J
        when A(I) = x"c3" and A(I + 1) = x"9a" move H(67) to B(J) add 2 to I add 1 to J
        when A(I) = x"c3" and A(I + 1) = x"ba" move H(68) to B(J) add 2 to I add 1 to J
        when A(I) = x"c7" and A(I + 1) = x"93" move H(69) to B(J) add 2 to I add 1 to J
        when A(I) = x"c5" and A(I + 1) = x"af" move H(70) to B(J) add 2 to I add 1 to J
    *> V 71  v 72  W 73  w 74  X 75  x 76  Y 77  y 78  Ý 79    ý 80
    *> x"56" x"76" x"57" x"77" x"58" x"78" x"59" x"79" x"c39d" x"c3bd" 
        when A(I) = "V" move H(71) to B(J) add 1 to I J
        when A(I) = "v" move H(72) to B(J) add 1 to I J
        when A(I) = "W" move H(73) to B(J) add 1 to I J
        when A(I) = "w" move H(74) to B(J) add 1 to I J
        when A(I) = "X" move H(75) to B(J) add 1 to I J
        when A(I) = "x" move H(76) to B(J) add 1 to I J
        when A(I) = "Y" move H(77) to B(J) add 1 to I J
        when A(I) = "y" move H(78) to B(J) add 1 to I J
        when A(I) = x"c3" and A(I + 1) = x"9d" move H(79) to B(J) add 2 to I add 1 to J
        when A(I) = x"c3" and A(I + 1) = x"bd" move H(80) to B(J) add 2 to I add 1 to J
    *> Z 81  z 82  Ž 83    ž 84
    *> x"5a" x"7a" x"c5bd" x"c5be"
        when A(I) = "Z" move H(81) to B(J) add 1 to I J
        when A(I) = "z" move H(82) to B(J) add 1 to I J
        when A(I) = x"c5" and A(I + 1) = x"bd" move H(83) to B(J) add 2 to I add 1 to J
        when A(I) = x"c5" and A(I + 1) = x"be" move H(84) to B(J) add 2 to I add 1 to J
        when other move A(I) to B(J) add 1 to I J
        end-evaluate. 
            
        
UPRAVA-WU.    
    evaluate true
    *> A 1   a 2   Á 3     á 4     B 5   b 6   C 7   c 8   Č 9     č 10
    *> x"41" x"61" x"c381" x"c3a1" x"42" x"62" x"43" x"63" x"c48c" x"c48d"
        when A(I) = H(1) move "A" to B(J) add 1 to I J
        when A(I) = H(2) move "a" to B(J) add 1 to I J
        when A(I) = H(3) move x"c3" to B(J) move x"81" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(4) move x"c3" to B(J) move x"a1" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(5) move "B" to B(J) add 1 to I J
        when A(I) = H(6) move "b" to B(J) add 1 to I J
        when A(I) = H(7) move "C" to B(J) add 1 to I J
        when A(I) = H(8) move "c" to B(J) add 1 to I J
        when A(I) = H(9) move x"c4" to B(J) move x"8c" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(10) move x"c4" to B(J) move x"8d" to B(J + 1) add 1 to I add 2 to J
    *> D 11  d 12  Ď 13    ď 14    E 15  e 16  É 17    é 18    Ě 19    ě 20
    *> x"44" x"64" x"c48e" x"c48f" x"45" x"65" x"c389" x"c3a9" x"c49a" x"c49b"   
        when A(I) = H(11) move "D" to B(J) add 1 to I J
        when A(I) = H(12) move "d" to B(J) add 1 to I J
        when A(I) = H(13) move x"c4" to B(J) move x"8e" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(14) move x"c3" to B(J) move x"8f" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(15) move "E" to B(J) add 1 to I J
        when A(I) = H(16) move "e" to B(J) add 1 to I J
        when A(I) = H(17) move x"c3" to B(J) move x"89" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(18) move x"c3" to B(J) move x"a9" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(19) move x"c4" to B(J) move x"9a" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(20) move x"c4" to B(J) move x"9b" to B(J + 1) add 1 to I add 2 to J
    *> F 21  f 22  G 23  g 24  H 25  h 26  CH 27   Ch 28   cH 29xxxxxxxxx   ch 30
    *> x"46" x"66" x"47" x"67" x"48" x"68" x"4348" x"4368" x"6348" x"6368"
        when A(I) = H(21) move "F" to B(J) add 1 to I J
        when A(I) = H(22) move "f" to B(J) add 1 to I J
        when A(I) = H(23) move "G" to B(J) add 1 to I J
        when A(I) = H(24) move "g" to B(J) add 1 to I J
        when A(I) = H(25) move "H" to B(J) add 1 to I J
        when A(I) = H(26) move "h" to B(J) add 1 to I J
        when A(I) = H(27) move x"43" to B(J) move x"48" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(28) move x"43" to B(J) move x"68" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(29) move x"63" to B(J) move x"48" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(30) move x"63" to B(J) move x"68" to B(J + 1) add 1 to I add 2 to J
    *> I 31  i 32  Í 33    í 34    J 35  j 36  K 37  k 38  L 39  l 40
    *> x"49" x"69" x"c38d" x"c3ad" x"4a" x"6a" x"4b" x"6b" x"4c" x"6c"
        when A(I) = H(31) move "I" to B(J) add 1 to I J
        when A(I) = H(32) move "i" to B(J) add 1 to I J
        when A(I) = H(33) move x"c3" to B(J) move x"8d" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(34) move x"c3" to B(J) move x"ad" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(35) move "J" to B(J) add 1 to I J
        when A(I) = H(36) move "j" to B(J) add 1 to I J
        when A(I) = H(37) move "K" to B(J) add 1 to I J
        when A(I) = H(38) move "k" to B(J) add 1 to I J
        when A(I) = H(39) move "L" to B(J) add 1 to I J
        when A(I) = H(40) move "l" to B(J) add 1 to I J
    *> M 41  m 42  N 43  n 44  O 45  o 46  Ó 47    ó 48    P 49  p 50
    *> x"4d" x"6d" x"4e" x"6e" x"4f" x"6f" x"c393" x"c3b3" x"50" x"70"
        when A(I) = H(41) move "M" to B(J) add 1 to I J
        when A(I) = H(42) move "m" to B(J) add 1 to I J
        when A(I) = H(43) move "N" to B(J) add 1 to I J
        when A(I) = H(44) move "n" to B(J) add 1 to I J
        when A(I) = H(45) move "O" to B(J) add 1 to I J
        when A(I) = H(46) move "o" to B(J) add 1 to I J
        when A(I) = H(47) move x"c3" to B(J) move x"93" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(48) move x"c3" to B(J) move x"b3" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(49) move "P" to B(J) add 1 to I J
        when A(I) = H(50) move "p" to B(J) add 1 to I J
    *> Q 51  q 52  R 53  r 54  Ř 55    ř 56    S 57  s 58  Š 59    š 60
    *> x"51" x"71" x"52" x"72" x"c598" x"c599" x"53" x"73" x"c5a0" x"c5a1" 
        when A(I) = H(51) move "Q" to B(J) add 1 to I J
        when A(I) = H(52) move "q" to B(J) add 1 to I J
        when A(I) = H(53) move "R" to B(J) add 1 to I J
        when A(I) = H(54) move "r" to B(J) add 1 to I J
        when A(I) = H(55) move x"c5" to B(J) move x"98" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(56) move x"c5" to B(J) move x"99" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(57) move "S" to B(J) add 1 to I J
        when A(I) = H(58) move "s" to B(J) add 1 to I J
        when A(I) = H(59) move x"c5" to B(J) move x"a0" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(60) move x"c5" to B(J) move x"a1" to B(J + 1) add 1 to I add 2 to J
    *> T 61  t 62  Ť 63    ť 64    U 65  u 66  Ú 67    ú 68    Ǔ 69    ů 70  
    *> x"54" x"74" x"c5a4" x"c5a5" x"55" x"75" x"c39a" x"c3ba" x"c793" x"c5af"
        when A(I) = H(61) move "T" to B(J) add 1 to I J
        when A(I) = H(62) move "t" to B(J) add 1 to I J
        when A(I) = H(63) move x"c5" to B(J) move x"a4" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(64) move x"c5" to B(J) move x"a5" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(65) move "U" to B(J) add 1 to I J
        when A(I) = H(66) move "u" to B(J) add 1 to I J
        when A(I) = H(67) move x"c3" to B(J) move x"9a" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(68) move x"c3" to B(J) move x"ba" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(69) move x"c7" to B(J) move x"93" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(70) move x"c5" to B(J) move x"af" to B(J + 1) add 1 to I add 2 to J
    *> V 71  v 72  W 73  w 74  X 75  x 76  Y 77  y 78  Ý 79    ý 80
    *> x"56" x"76" x"57" x"77" x"58" x"78" x"59" x"79" x"c39d" x"c3bd" 
        when A(I) = H(71) move "V" to B(J) add 1 to I J
        when A(I) = H(72) move "v" to B(J) add 1 to I J
        when A(I) = H(73) move "W" to B(J) add 1 to I J
        when A(I) = H(74) move "w" to B(J) add 1 to I J
        when A(I) = H(75) move "X" to B(J) add 1 to I J
        when A(I) = H(76) move "x" to B(J) add 1 to I J
        when A(I) = H(77) move "Y" to B(J) add 1 to I J
        when A(I) = H(78) move "y" to B(J) add 1 to I J
        when A(I) = H(79) move x"c3" to B(J) move x"9d" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(80) move x"c3" to B(J) move x"bd" to B(J + 1) add 1 to I add 2 to J
    *> Z 81  z 82  Ž 83    ž 84
    *> x"5a" x"7a" x"c5bd" x"c5be"
        when A(I) = H(81) move "Z" to B(J) add 1 to I J
        when A(I) = H(82) move "z" to B(J) add 1 to I J
        when A(I) = H(83) move x"c5" to B(J) move x"bd" to B(J + 1) add 1 to I add 2 to J
        when A(I) = H(84) move x"c5" to B(J) move x"be" to B(J + 1) add 1 to I add 2 to J
        when other move A(I) to B(J) add 1 to I J
        end-evaluate. 

ČeV - 27.5.2020