android & benitlux: use NitObject in clients
[nit.git] / contrib / pep8analysis / tests / terrasa / tri_bulles.pep
1 ; Ce programme prend 5 valeurs entières saisies par l'utilisateur
2 ; les stocke dans un tableau
3 ; trie le tableau
4 ; affiche le contenu du tableau trié
5
6 ; cas limites :
7 ; le programme retourne une erreur si l'utilisateur ne saisie pas 5 entiers
8 ; Alexandre Terrasa (c) 2012
9
10 ; init du programme
11          LDA     len, i      ; A = len
12          SUBA    2, i        ; A --
13          STA     maxlen, d   ; maxlen = A
14
15 ; saisie du tableau
16          LDX     0, i        ; X = 0
17 saisie:  DECI    tab, x      ; do { tab[X] = getInt()
18          ADDX    2, i        ;    X++
19          CPX     len, i
20          BRLT    saisie      ; } while (X < len)
21
22 ; trie du tableau
23 trie:    LDA     1, i        ; do { A = 1
24          STA     flag, d     ;    flag = A // init le flag à false
25
26 ; boucle interne
27          LDX     0, i        ;    do { X = 0
28 loop:    LDA     tab, x      ;        A = tab[X]
29
30          ; comparer les valeurs
31          ADDX    2, i        ;        X ++
32          CPA     tab, x
33          BRLE    next        ;        if (A > tab[X]) {
34                              ;            // echanger les valeurs
35          STA     tmp, d      ;            tmp = A
36          LDA     tab, x      ;            A = tab[x]
37          SUBX    2, i        ;            X --
38          STA     tab, x      ;            tab[x] = A
39          ADDX    2, i        ;            X ++
40          LDA     tmp, d      ;            A = tmp
41          STA     tab, x      ;            tab[x] = A
42                              ;            // passer flag à 0
43          LDA     0, i        ;            A = 0
44          STA     flag, d     ;            flag = A
45                              ;        }
46
47 next:    CPX     maxlen, d
48          BRLT    loop        ;    } while(X < maxlen)
49
50          LDA     flag, d     ;    A = flag
51          CPA     0, i
52          BREQ    trie        ; } while(flag == 0)
53
54 ; affichage le tableau
55          LDX     0, i        ; X = 0
56 aff:     DECO    tab, x      ; do { print (tab[X])
57          ADDX    2, i        ;    X++
58          CPX     len, i
59          BRLT    aff         ; } while (X < len)
60
61          STOP
62
63 tab:     .BLOCK  10          ; #2d5a tableau d'entiers
64 len:     .EQUATE 10          ; taille du tableau
65 maxlen:  .BLOCK  2           ; #2d case max - 1
66 flag:    .BLOCK  2           ; #2d flag 'aucun_echange'
67 tmp:     .BLOCK  2           ; #2d variable temporaire pour les permutations
68
69          .END