TLIST.RIG 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #BUBBLE_SORT
  2. -- This test shows use of traditional list and
  3. -- of numeric table .
  4. -- Executes bubble sorting of list of numbers
  5. -- Used interactively and through parameters
  6. $B:=#PARM(T);
  7. OPEN S ' ';
  8. $MEMORY:=$B[1];
  9. IF NOT $MEMORY ->
  10. LOOP
  11. $MEMORY:=#CALL_PAS(1 'Enter size of the table {elements, <=total');
  12. -- 1=WRITE/READ
  13. IF $MEMORY>0 -> BREAK FI;
  14. END;
  15. FI;
  16. $SIZE:=$B[2];
  17. IF NOT $SIZE ->
  18. LOOP
  19. $SIZE:=#CALL_PAS(1 'Enter count of sorted numbers');
  20. -- 1=WRITE/READ
  21. IF $SIZE>0 -> BREAK FI;
  22. END;
  23. FI;
  24. $TAB:=#CALL_PAS(60 $MEMORY); -- create
  25. IF $TAB<=0 -> #CALL_PAS(1 'STOP, TABLE NOT CREATED');FI;
  26. $I:=1;
  27. LOOP
  28. $RAND:=#CALL_PAS(20 100); -- random
  29. $LIST!.:=$RAND;
  30. #CALL_PAS(62 $TAB $I $RAND); -- put
  31. IF $I=$SIZE->BREAK FI;
  32. $I+:=1;
  33. END;
  34. #CALL_PAS(30 ' Starts work with list ');
  35. PRINT $LIST;
  36. $FLAG:=T;
  37. LOOP
  38. IF NOT $FLAG->BREAK FI;
  39. $FLAG:=NULL;
  40. $I:=1;
  41. LOOP
  42. IF $LIST[$I]>$LIST[$I+1] ->
  43. $M:=$LIST[$I];
  44. $LIST[$I]:=$LIST[$I+1];
  45. $LIST[$I+1]:=$M;
  46. $FLAG:=T;
  47. FI;
  48. IF $I=$SIZE-1->BREAK FI;
  49. $I+:=1;
  50. END;
  51. END;
  52. PRINT $LIST;
  53. #CALL_PAS(30 ' Starts work with table ');
  54. PRINT #CALL_PAS(65 $TAB);
  55. $FLAG:=T;
  56. LOOP
  57. IF NOT $FLAG->BREAK FI;
  58. $FLAG:=NULL;
  59. $I:=1;
  60. LOOP
  61. IF #CALL_PAS(63 $TAB $I)>#CALL_PAS(63 $TAB $I+1) ->
  62. $M:=#CALL_PAS(63 $TAB $I);
  63. #CALL_PAS(62 $TAB $I #CALL_PAS(63 $TAB $I+1));
  64. #CALL_PAS(62 $TAB $I+1 $M);
  65. $FLAG:=T;
  66. FI;
  67. IF $I=$SIZE-1->BREAK FI;
  68. $I+:=1;
  69. END;
  70. END;
  71. IF #CALL_PAS(65 $TAB)=$LIST ->
  72. S<<RESULTS ARE EQUAL
  73. ELSIF T->
  74. S<<RESULTS ARE DIFFERENT
  75. FI;
  76. PRINT #CALL_PAS(65 $TAB);
  77. #CALL_PAS(30 ' --- end --- ');
  78. ##