Introduction au C¶
TD 1 : Entrées, sorties¶
Exercice 9 : Minimum et maximum¶
Consigne : Écrire une méthode permettant de saisir une liste de n réels et de calculer et d’afficher les valeurs minimale et maximale de cette liste.
/*!
\fn void ex9(void)
\brief Code de l'exercice 9
\return rien
*/
void ex9() {
int int_min, int_max; // minimum et maximum
int int_n; // nombre de cases
int i; // iterateur
printf("Entrez le nombre de cases à remplir, entre 1 et 50: ");
scanf("%d",&int_n);
if ((int_n < 1) || (int_n > 50)) { // si N dépasse les bornes
printf("Nombre invalide");
return;
}
int liste[int_n];
for (i = 0; i < int_n; ++i) { // on construit la liste avec les entrees de l'utilisateur
scanf("%d",&liste[i]);
if (i==0) { // initialisation du min et du max avec une valeur de la liste
int_min = liste[i];
int_max = liste[i];
}
else { // recherche du min et du max dans le reste de la liste
if (int_min > liste[i]) {
int_min = liste[i];
};
if (int_max < liste[i]) {
int_max = liste[i];
};
}
};
printf("Minimum : %d - Maximum : %d", int_min, int_max);
}
TD 4 : Vecteurs 2D¶
Exercice : Puissance 4¶
Consigne : Ben… créer un puissance 4 avec une matrice (donc un vecteur de vecteurs). La taille est définie dans une constante symbolique notée N. Le plateau de jeu est noté ttint_plateau[i][i]
, avec i pour le numéro de colonne et j le numéro de ligne.
Extrait de code 1 : vérifier l’état actuel du jeu, si un joueur a gagné ou si ex-aequo (toutes les cases sont occupées), ou si on continue de jouer. J’ai défini les fonctions checkDiag1
, checkDiag2
etc. à côté, elles renvoient chacune d’entre elles le nombre de pions alignés io en fonction de la coordonnée donnée.
int aGagne(int PLATEAU) {
if (plateauRempli(ttint_plateau)) {
return(0);
}
for (int int_joueur=1; int_joueur<3; int_joueur++) {
for (int int_increment=0; int_increment<N; int_increment++) {
if (checkDiag1(ttint_plateau, int_increment, int_joueur) > 3) {
return(int_joueur);
}
if (checkDiag2(ttint_plateau, int_increment, int_joueur) > 3) {
return(int_joueur);
}
if (checkColonne(ttint_plateau, int_increment ,int_joueur) > 3) {
return(int_joueur);
}
if (checkLigne(ttint_plateau, int_increment, int_joueur) > 3) {
return(int_joueur);
}
}
}
return(-1);
}
Extrait de code 2 : l’affichage du plateau. En vrai il n’y a pas grand chose de compliqué, il suffit de ne pas s’emmêler avec les indices et les boucles. Mais c’est joli donc woala.
void affichage(int PLATEAU) {
int i;
int j;
printf("+");
for (j=0;j<N;j++) {
printf("---+");
}
for (j=0;j<N;j++) {
printf("\n|");
for (i=0;i<N;i++) {
switch (ttint_plateau[i][j]) {
case 1:
printf(" O |");
break;
case 2:
printf(" X |");
break;
default:
printf(" |");
break;
}
}
printf("\n+");
for (i=0;i<N;i++) {
printf("---+");
}
}
printf("\n+");
for (i=0;i<N;i++) {
printf(" %d +",i+1);
}
printf("\n");
}
Extrait de code 3 : le retournement du plateau à 90° (pi/2 pour les intimes). Le plus compliqué est le retournement en lui-même, surtout si l’on souhaite une fonction modulable et courte. Mais j’ai réussi en 30 lignes, je suis content. La base de d’algo vient d”ici.
void gravite(int PLATEAU) {
int i,j,k;
for (i=0; i<N; i++) {
k = N-1;
for (j=N-1;j>=0;j--) {
if (ttint_plateau[i][j] > -1) {
if (ttint_plateau[i][k] == -1) {
ttint_plateau[i][k] = ttint_plateau[i][j];
ttint_plateau[i][j] = -1;
}
k--;
}
}
}
}
void rotationPlateau(int PLATEAU) {
int i,j;
for (j=0; j<N-2; j++)
{
for (i=j; i <N-j-1; i++)
{
int temp = ttint_plateau[i][j];
ttint_plateau[i][j] = ttint_plateau[j][N-i-1];
ttint_plateau[j][N-i-1] = ttint_plateau[N-i-1][N-j-1];
ttint_plateau[N-i-1][N-j-1] = ttint_plateau[N-j-1][i];
ttint_plateau[N-j-1][i] = temp;
}
}
gravite(ttint_plateau);
}