summaryrefslogtreecommitdiff
path: root/tests/exec/pascal.cpp
blob: a8a581e4ba8cc9ac2146a3e8a1ba74ebac646eb8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// triangle de Pascal modulo 7
// on n'a pas de tableaux, alors on utilise des listes chaînées

#include <iostream>

class Array {
public:
  int val;
  Array *next;
  Array(int n);    // une liste à n éléments
  int get(int i);
  void set(int i, int v);
};

Array::Array(int n) {
  if (n == 1) return;
  next = new Array(n-1);
}

int Array::get(int i) {
  if (i == 0) return val;
  return next->get(i-1);
}

void Array::set(int i, int v) {
  if (i == 0) val = v;
  else next->set(i-1, v);
}

void print_row(Array *r, int i) {
  int j;
  for (j = 0; j <= i; j++) {
    if (r->get(j) != 0)
      std::cout << "*";
    else
      std::cout << "0";
  }
  std::cout << "\n";
}

void compute_row(Array *r, int j) {
  int v = 0;
  if (j == 0)
    v = 1;
  else
    v = (r->get(j) + r->get(j-1)) % 7;
  r->set(j, v);
  if (j > 0)
    compute_row(r, j-1);
}

int main() {
  int h = 42;
  Array *r = new Array(h+1);
  int i;
  for (i = 0; i < h; i++) {
    r->set(i, 0);
    compute_row(r, i);
    print_row(r, i);
  }
}