Correction du CC2 d’informatique

Voici la correction des points les plus importants

Question 2

1. Fausse (Entier est un mot réservé)
2. Correcte
3. Fausse (Mauvais nommage de variable)
4. Correcte

5. Fausse (Ecrire(x);)
6. Correcte
7. Fausse (c <- a+b;)
8. Fausse (opération impssible)

Question 3

    1. résultat = 420
    2. Invalide
    3.  résultat =4/5
    4. Invalide

//On déclare Les 4 expressions en postfixés
E1 = ['4', '6', '+', '6', '7', '*', '*'];
E2 = ['1', '2', '3', '+'];
E3 = ['4', '2', '3', '+', '/'];
E4 = ['4', '5', '+', '6', '7', '4'];

function Valide(T) {

  var op = 0;
  var i = 0;
  var valide = true;

  while (i < Length(T) && valide == true) {
    if (T[i] == '+' || T[i] == '-' || T[i] == '*' || T[i] == '/') {
      //Si je rencontre un opérateur 
      //je diminue le nombre d'opérandes pour simuler le calcul
      if (op < 2) {
        valide = false;
      }
      op = op - 2 + 1;

    } else {
      op++;
    }
    i++;
  }

  //S'il reste 1 op alors le calcul a pu se faire 
  //correctement sinon c'est invalide
  if (op == 1) valide = true;
  else valide = false;

  return valide;

}

//Calcul le résultat d'une expression
//


function Calcul(T) {
  var i = 0;
  var op = Tableau(10);
  op[0] = T[0];
  op[1] = T[1];
  var j = 2;
  for (i = 2; i < Length(T); i++) {

    if (T[i] == '+') {
      op[j - 2] = enEntier(op[j - 2]) + enEntier(op[j - 1]);
      j--;
    } else if (T[i] == '-') {
      op[j - 2] = enEntier(op[j - 2]) - enEntier(op[j - 1]);
      j--;
    } else if (T[i] == '*') {
      op[j - 2] = enEntier(op[j - 2]) * enEntier(op[j - 1]);
      j--;
    } else if (T[i] == '/') {
      op[j - 2] = enEntier(op[j - 2]) / enEntier(op[j - 1]);
      j--;
    } else {
      op[j] = T[i];
      j++;
    }

  }

  return op[0];
}

Ecrire('E1 valide ? ' + Valide(E1));
Ecrire('E2 valide ? ' + Valide(E2));
Ecrire('E3 valide ? ' + Valide(E3));
Ecrire('E4 valide ? ' + Valide(E4));

if (Valide(E1)) Ecrire('E1=' + Calcul(E1));
if (Valide(E2)) Ecrire('E2=' + Calcul(E2));
if (Valide(E3)) Ecrire('E3=' + Calcul(E3));
if (Valide(E4)) Ecrire('E4=' + Calcul(E4));

Question 4

Voici le code d’un presque-démineur


// -1: case non appuyée
// -2: contient une bombe
// n: combien de bombes à coté
var nb = 6;
var T = Tableau(nb, nb);
var mines = Tableau(nb, nb);
var gameover = false;
var caseX = -1;
var caseY = -1;

// Q4-a) 
for (i = 0; i < nb; i++) {
  for (j = 0; j < nb; j++) {
    T[i][j] = -1;
    mines[i][j] = 0;
  } 
} 

// Q4-b)
//Generate nb mines
for (i = 0; i < nb; i++) {
  var x = Hasard(nb);
  var y = Hasard(nb);
  mines[x][y] = -2; 
} 

//Count number of bombs around each cell
for (i = 0; i < nb; i++) {
  for (j = 0; j < nb; j++) {
    if (mines[i][j] == -2) {
      if (i + 1 < nb && j + 1 < nb && mines[i + 1][j + 1] != -2) { mines[i + 1][j + 1] = enEntier(mines[i + 1][j + 1]) + 1; } if (i - 1 >= 0 && j - 1 >= 0 && mines[i - 1][j - 1] != -2) {
        mines[i - 1][j - 1] = enEntier(mines[i - 1][j - 1]) + 1;
      }
      if (i - 1 >= 0 && j + 1 < nb && mines[i - 1][j + 1] != -2) {
        mines[i - 1][j + 1] = enEntier(mines[i - 1][j + 1]) + 1;
      }
      if (i + 1 < nb && j - 1 >= 0 && mines[i + 1][j - 1] != -2) {
        mines[i + 1][j - 1] = enEntier(mines[i + 1][j - 1]) + 1;
      }
      if (j - 1 >= 0 && mines[i][j - 1] != -2) {
        mines[i][j - 1] = enEntier(mines[i][j - 1]) + 1;
      }
      if (j + 1 < nb && mines[i][j + 1] != -2) { mines[i][j + 1] = enEntier(mines[i][j + 1]) + 1; } if (i - 1 >= 0 && mines[i - 1][j] != -2) {
        mines[i - 1][j] = enEntier(mines[i - 1][j]) + 1;
      }
      if (i + 1 < nb && mines[i + 1][j] != -2) {
        mines[i + 1][j] = enEntier(mines[i + 1][j]) + 1;
      }
    }
  }
}

// Q4-c
for (i = 0; i < n; i++) {
  for (j = 0; j < n; j++) {

    RectanglePlein(10 * i, 10 * j, 10, 10, 'gray');

  }
}

// Q4-d
function MouseClick() {

  //Quelle case a été cliquee
  caseX = Math.floor(x / 10);
  caseY = Math.floor(y / 10);
  
  //Si la case existe et qu'elle était non dévoilée
  if (caseX < nb && caseY < nb && T[caseX][caseY] == -1) {
      T[caseX][caseY] = mines[caseX][caseY];
  }

}