Eng (Sambo) Boris

PhD Student in Computer Science, Team LoVe, LIPN (Université Sorbonne Paris Nord, France) domain_name@hotmail.fr
« Return to Teaching

Eléments d’informatique

Responsable du cours : Stefano Guerrini

Commandes Linux pour écrire et exécuter un programme

Création de fichier avec Gedit :

gedit nom_fichier.c &

Compilation (transformation du fichier .c vers un fichier exécutable). Le paramètre -Wall affiche les avertissements (ils ne gênent pas la production du programme de sortie mais indique des anomalies).

gcc -Wall nom_fichier.c -o nom_fichier

Exécution du programme

./nom_fichier

Instructions de base (avec explications)

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Permet d'utiliser des identifiants comme EXIT_SUCCESS et d'autres choses

#include <stdlib.h>
// Permet d'utiliser printf et scanf

#include <stdio.h>
// Permet de fixer une constante N de valeur 5

#define N 5

int main() // Bloc principal du programme (commence par { et termine par })

{
    int n; // Déclare une variable 'n' de type entier (int) dans la mémoire

    n = 6; // Mets la valeur 6 dans la variable n

    int m = 5; // Déclare une variable 'm' avec la valeur 5

    m = m + 1; // 'm' prend pour valeur 'm+1' (on augmente donc 'm' de 1)

    m += 1; // Même chose

    m++; // Même chose


    printf("Bonjour"); // Affiche le texte "Bonjour" à l'écran

    // Le premier paramètre "%d" est le format d'affichage indiquant qu'on affiche un entier

    // Les paramètres suivants sont les entiers correspondant à afficher

    printf("%d", n); // On affiche la valeur de n

    printf("%d/%d", n, m); // On affiche la valeur de 'n' et de 'm' séparés par un symbole /

    scanf("%d", &n); // On permet d'entrer un entier au clavier dont la valeur sera placée dans la variable 'n'


    // Conditions

    if ((n > 3 && m > 4) || !(n == 6)) // Si (n>3 et m>4) ou alors si (n==6) est faux

    {
        // On fait quelque chose

    }
    else // Sinon (optionnel)

    {
        // On fait autre chose

    }

    // Premier paramètre : on a un compteur 'i' qui démarre à 0

    // Second paramètre : on continue tant que la condition est valide

    // Troisième paramètre : le changement effectué sur 'i' à chaque tour

    for (int i=0; i<N; i++)
    {
        // On fait des opérations en boucle

    }

    while (3 <= 6) // On fait des opérations en boucle tant que la condition est valide

    {
        // Remarque 1 : c'est une boucle infinie

        // Remarque 2 : on peut faire la même chose qu'une boucle for avec une boucle while

    }

    double t[5]; // On déclare un tableau de réels de taille 5 (5 cases dans la mémoire)

    double tab[3] = {3.14, 10.0, 1.5} // On déclare un tableau de 3 réels avec des valeurs précises

    tab[0] = 1.0; // On change la première case de 'tab', elle a pour valeur 1.0 (l'indice de la première case est 0)

    printf("tab[0] = %g", tab[0]); // On affiche la valeur de la première case de 'tab'

    scanf("%g", &tab[1]); // On change la valeur de la seconde case au clavier


    char c = 'a'; // Déclaration d'un caractère, chaque caractère est associé à un entier (son code ASCII)

    printf("%c", c); // Affichage du caractère contenu dans la variable 'c'

    printf("%d", c); // Remarque : si on choisit de l'afficher comme entier, cela affiche le code ASCII associé

    char text[7] = "Bonjour"; // Une chaîne de caractère (texte) se traite comme un tableau de caractères

    printf("%c", text[0]); // Affiche 'B'


    // Une matrice est un tableau dont les cases contiennent des tableaux. On a donc un tableau 3x3

    int mat[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    printf("%d", mat[0][1]); // Affiche l'entier à la ligne 0 et à la colonne 1, c'est-à-dire 2

    // Pour afficher une matrice, on affiche les éléments case par case en parcourant chaque ligne

    for (int ligne=0; ligne<3; ligne++)
    {
        // Le code ci-dessous permet d'afficher une ligne de la matrice

        for (int colonne=0; colonne<3; colonne++)
        {
            printf("%d\t", mat[ligne][colonne]);
        }
        printf("\n"); // On saute une ligne après avoir affiché une ligne

    }

    return EXIT_SUCCESS; // Indique que le programme s'est terminé correctement

}

Exemple : recherche du maximum d’un tableau d’entier

On souhaite recherche l’entier le plus grand d’un tableau d’entiers.

On décrit informellement le fonctionnement du programme. Il s’agit d’une étape de conception avant la réalisation (écriture du programme lui-même). Les règles de rédactions peuvent varier.

Nom : Max
Entrée :
Sortie :

Algorithme
On déclare tab (tableau d'entiers)
On déclare max (entier)
max = tab[0]
Pour tout élément x de tab (à partir du second) :
    Si x > max :
        max = x
Fin de boucle
Affiche max
Retour : OK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdlib.h>
#include <stdio.h>
#define N 5

int main()
{
    // Déclaration d'un tableau de taille 5

    int tab[N] = {1, 5, 10, 7, 8};
    // On suppose que le premier élément est le plus grand puis on vérifie si c'est bien le cas

    int max = tab[0];

    for (int i=1; i<N; i++) // i prend pour valeur les entiers de 1 à N-1

    {
        if (tab[i] > max) // On vérifie si la case qu'on regarde est plus grande que le max

        {
            // Si oui, il devient le nouveau max

            max = tab[i];
        }
    }
    printf("Le max est : %d\n", max);
    return EXIT_SUCCESS;
}

On a une colonne pour ligne, une ligne par données, et la sortie. On met seulement les lignes intéressantes (où une donnée est modifiée ou un affichage est effectué). Si on exécute le programme, on a l’évolution suivante des données :

Ligne tab max i affichage commentaire (optionnel)
8 {1, 5, 10, 7, 8}        
9   1     On suppose que 1 est le max
12     1   On commence la boucle à tab[1]
17   5     On fait 5>1, le max devient 5
12     2    
17   10     On fait 10>5, le max devient 10
12     3   On compare 7>10, on ne change rien
12     4   On compare 8>10, on ne change rien
20       “Le max est 10”  

Correction des TP notés

Calcul des multiples de 3 et de 5 à la fois qui sont inférieurs à n entré par l’utilisateur.

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
#include <stdlib.h>
#include <stdio.h>

int main()
{
    int n;
    printf("Entrer un entier strictement positif : ");
    scanf("%d", &n);

    // On vérifie que la valeur entrée est bien positive, sinon on arrête

    if (n > 0)
    {
        // On parcourt les entiers de 1 à n (inclus)

        for (int i = 1; i<=n; i++) // Remarque : on commence à 1

        {
            if ((i%5 == 0) && (i%7 == 0)) // n%k est le reste de la division n/k

            {
                printf("%d est un multiple de 3 et 5\n", i);
            }
        }
    }
    else
    {
        printf("L'entier entré n'est pas strictement positif\n");
    }
    return EXIT_SUCCESS;
}

Demande à l’utilisateur d’entrer N valeurs entières dans un tableau (on ignore les valeurs paires). On affiche seulement les valeurs positives dans l’ordre inverse.

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
#include <stdlib.h>
#include <stdio.h>
#define N 5

int main()
{
    int tab[N];
    int i = 0;
    int n;

    // On demande de remplir le tableau au clavier tant qu'on a pas atteint la limite N

    while (i < N)
    {
        printf("Entrez la valeur de tab[%d] : ", i);
        scanf("%d", &n);
        if (n % 2 != 0) // On permet de continuer en augmentant le compteur 'i' seulement si 'n' est impair

        {
            tab[i] = n; // On met la valeur de 'n' (entrée au clavier) dans la case 'i' de 'tab'

            i++;
        }
        // Remarque : si 'n' est pair alors on recommence la boucle avec le même 'i'

    }

    // On parcourt le tableau à l'envers (le compteur commence au dernier indice et on diminue 'i' de 1)

    for (int i=N-1; i>=0; i--)
    {
        if (tab[i] > 0) // On affiche l'entier seulement s'il est positif

        {
            printf("%d ", tab[i]);
        }
    }
    return EXIT_SUCCESS;
}