1. Livres et vidéos
  2. Langage C - Maîtriser la programmation procédurale (avec exercices pratiques)

Langage C Maîtriser la programmation procédurale (avec exercices pratiques)

  • Accès illimité 24h/24, 7J/7
  • Tous les livres en ligne, les vidéos et les cours enregistrés ENI
  • Plus de 10 nouveautés livres et vidéos chaque mois
  • Les nouveautés disponibles le jour de leur sortie
  • Accès 100% en ligne
  • En stock
  • Expédié en 24h00
  • Livraison à partir de 0,01 €
  • Version en ligne offerte
  • 1 h d'accès gratuit à tous nos livres et vidéos pour chaque commande
  • Accessible immédiatement
  • Version HTML
  • Accès illimité 24h/24, 7J/7

Présentation

Ce livre s'adresse aux développeurs débutants qui souhaitent maîtriser la conception algorithmique en s'appuyant sur le langage C. Il est particulièrement adapté aux étudiants en licence d'informatique, école d'ingénieur et prépa scientifique. L'efficacité, la modularité et la généricité du langage C vont permettre au lecteur d'acquérir un savoir-faire fondamental en programmation informatique.

Au-delà du fonctionnement du langage, l'auteur fournit ce qu'il faut de précision et de pratique pour que le lecteur se l'approprie et le maîtrise ; chaque section théorique est suivie d'une section "Mise en pratique" dédiée, composée d'exercices diversifiés et une section "Expérimentation" propose des études de cas.

Les sept premiers chapitres concernent l'apprentissage du langage C et les premières armes en algorithmique : des variables simples, unions, structures et tableaux jusqu'aux pointeurs avec les concepts de sauts, de branchements, de boucles et de fonctions. La suite du livre apporte des approfondissements avec l'étude des listes en C. Les listes chainées dynamiques, mais également les piles et les files ainsi que les arbres, essentiellement les arbres binaires, sont expliqués. Pour ce faire, un chapitre expose la récursivité, élément incontournable pour l'implémentation des arbres.

Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.


Les chapitres du livre :
Introduction – Variables simples – Les contrôles des blocs d'instructions – Les structures – Les tableaux – Les unions – Structuration d'un programme – Les pointeurs – Récursivité – Listes en C – Annexe

Table des matières

  • Introduction
    • 1. Objectif : apprendre à programmer avec le C
    • 2. Contenu
    • 3. Librairies graphiques
    • 4. Public visé
    • 5. Comment apprendre à programmer ?
      • 5.1 Comprendre n'est pas savoir faire
      • 5.2 Trois niveaux de difficulté
        • 5.2.1 Maîtriser les outils
        • 5.2.2 Résoudre un problème
        • 5.2.3 Concevoir un programme
      • 5.3 Un apprentissage non linéaire
    • 6. Organisation du livre
      • 6.1 Chapitres
      • 6.2 Des questions pour faciliter apprentissage et synthèse
      • 6.3 Solutions des exercices
    • 7. Environnements de développement
    • 8. Remerciements
    • 9. Conclusion : la programmation comme écriture
  • Variables simples
    • 1. Introduction dans la programmation C
      • 1.1 Qu'est-ce que programmer ?
      • 1.2 Le positionnement par rapport à l'ordinateur
      • 1.3 Les logiciels de la programmation
        • 1.3.1 Le compilateur
        • 1.3.2 L'IDE : environnement de développement
        • 1.3.3 Installation
      • 1.4 Base d'un programme
        • 1.4.1 Des données et des instructions
        • 1.4.2 Des librairies de fonctions
      • 1.5 Créer un projet
        • 1.5.1 Créer un projet sous Code::Blocks
        • 1.5.2 Créer un projet sous Visual Studio
      • 1.6 Premier programme
        • 1.6.1 La fonction main() : entrée du programme
        • 1.6.2 Afficher du texte avec la fonction printf()
        • 1.6.3 Compiler et lancer le programme
      • 1.7 Créer un modèle de projet (template) sous Visual Studio
      • 1.8 Mise en pratique : découverte du compilateur
    • 2. Variables simples
      • 2.1 Qu'est-ce qu’une variable en informatique ?
      • 2.2 Définir des variables dans un programme
        • 2.2.1 Les types de variables élémentaires en C
        • 2.2.2 Déclarer ses variables dans un programme
        • 2.2.3 Contraintes pour le choix des noms
      • 2.3 Mise en pratique : définir des variables dans un programme
      • 2.4 Manipulations de base sur les variables
        • 2.4.1 Affecter une valeur à une variable
        • 2.4.2 Des valeurs de type caractère (codage ASCII)
        • 2.4.3 printf() pour afficher des valeurs
        • 2.4.4 Obtenir des caractères accentués dans la console (sous Windows)
        • 2.4.5 Obtenir et afficher la taille en mémoire d'une variable
        • 2.4.6 Obtenir et afficher l'adresse mémoire d'une variable
        • 2.4.7 scanf() pour récupérer une valeur entrée par l'utilisateur
        • 2.4.8 Les pièges de scanf()
      • 2.5 Mise en pratique : manipulations des variables
      • 2.6 Les constantes
        • 2.6.1 Définition, mot-clé const
        • 2.6.2 Macro constantes #define
        • 2.6.3 Suite de constantes enum
      • 2.7 Comprendre les variables
        • 2.7.1 Codage et mesure de l'information
        • 2.7.2 Plages de valeurs en décimal
        • 2.7.3 Troncature
        • 2.7.4 Codage des nombres négatifs
      • 2.8 Expérimentation : variables simples, déclaration, affectation, affichage, saisie
      • 2.9 Mise en pratique : codage des informations numériques
    • 3. Les opérations
      • 3.1 La notion d'expression
      • 3.2 Opérations arithmétiques
        • 3.2.1 Les opérateurs +, -, *, /, %
        • 3.2.2 Les affectations combinées
        • 3.2.3 Opérateurs d’incrémentation et de décrémentation
        • 3.2.4 Opérations entre types différents, opérateur de conversion (cast)
        • 3.2.5 Priorités entre opérateurs
      • 3.3 Mise en pratique : opérations arithmétiques, cast
      • 3.4 Obtenir des valeurs aléatoires
        • 3.4.1 Principe du pseudo aléatoire
        • 3.4.2 La fonction rand()
        • 3.4.3 La fonction srand()
        • 3.4.4 Valeurs aléatoires dans des fourchettes
      • 3.5 Mise en pratique : opérations et nombres aléatoires
      • 3.6 Opérations bit à bit
        • 3.6.1 ET : opérateur &
        • 3.6.2 OU exclusif : opérateur ^
        • 3.6.3 OU inclusif : opérateur |
        • 3.6.4 Complément : opérateur ~
        • 3.6.5 Décalages gauche et droite : opérateurs >> et <<
        • 3.6.6 Priorités des opérateurs bit à bit
      • 3.7 Mise en pratique : opérations bit à bit
      • 3.8 Expérimentation : opérations arithmétiques, valeurs aléatoires
  • Les contrôles des blocs d'instructions
    • 1. Blocs d'instructions et conditions
      • 1.1 Qu'est-ce qu’un bloc d'instructions ?
        • 1.1.1 Définition
        • 1.1.2 Exemple
        • 1.1.3 Utilité d'un bloc d'instructions
      • 1.2 Définir une condition
        • 1.2.1 Pourquoi une condition ?
        • 1.2.2 Comment définir une condition ?
        • 1.2.3 Les opérateurs de comparaison
        • 1.2.4 L'opérateur unaire NON : !
        • 1.2.5 Priorités des opérateurs NON et comparaison
      • 1.3 Mise en pratique : opérateurs de comparaison et NON
    • 2. Sauts conditionnels
      • 2.1 L'instruction if
      • 2.2 Le couple d'instructions if-else
      • 2.3 La forme contractée du if-else, opérateur conditionnel ?
      • 2.4 La cascade d'instructions if-else if-else
      • 2.5 Expérimentation : les sauts conditionnels (les trois if)
      • 2.6 Mise en pratique : les sauts conditionnels
    • 3. Branchements
      • 3.1 Branchement sélectif : switch, case et break
      • 3.2 Rupture de séquence : goto avec étiquette
      • 3.3 Expérimentation : branchement sélectif switch
      • 3.4 Mise en pratique : l'aiguillage switch
    • 4. Les tests multiconditions (ET/OU)
      • 4.1 Conjonction ET : opérateur &&
        • 4.1.1 ET avec deux expressions membres
        • 4.1.2 ET avec plus de deux expressions membres
      • 4.2 Disjonction OU, opérateur ||
        • 4.2.1 OU avec deux expressions membres
        • 4.2.2 OU avec plus de deux expressions membres
      • 4.3 ET prioritaire sur OU
      • 4.4 Priorité avec les autres opérateurs
      • 4.5 Mise en pratique : les opérateurs logiques ET, OU
    • 5. Boucles
      • 5.1 Boucle TANT QUE : le while
      • 5.2 Boucle FAIRE {...} TANT QUE : le do-while
      • 5.3 Boucle comptée POUR : le for
      • 5.4 Boucles imbriquées
      • 5.5 Sortie et saut forcés dans une boucle
        • 5.5.1 Sortir avec l'instruction break
        • 5.5.2 Passer à l'itération suivante avec l'instruction continue
        • 5.5.3 Sortir d'une ou de plusieurs boucles imbriquées avec l'instruction goto
      • 5.6 Mise en pratique : les boucles while, do-while et for
    • 6. Utilisations typiques de boucles
      • 6.1 Créer un menu utilisateur
      • 6.2 Boucle d'événements dans un jeu vidéo
        • 6.2.1 Récupérer les entrées clavier : kbhit() et getch()
        • 6.2.2 Boucle d'événements simple
        • 6.2.3 Contrôler le temps d'exécution
      • 6.3 Commencer la création d'un jeu en mode console
      • 6.4 Mise en pratique : menus, boucles d'événements
    • 7. Fonctions
      • 7.1 Qu'est-ce qu’une fonction ?
      • 7.2 Écrire sa fonction
        • 7.2.1 Où écrire sa fonction ?
        • 7.2.2 Conditions à remplir
        • 7.2.3 Exemple de fonction sans retour ni paramètre
        • 7.2.4 Exemple de fonction avec retour et sans paramètre
        • 7.2.5 Exemple de fonction sans retour avec un paramètre
        • 7.2.6 Exemple de fonction avec retour et paramètre
        • 7.2.7 Conclusion : quatre cas d'écriture de fonction
      • 7.3 Utiliser sa fonction
        • 7.3.1 Appel de la fonction (bonjour1)
        • 7.3.2 Récupération de la valeur de retour (bonjour2)
        • 7.3.3 Passage de valeurs aux paramètres (bonjour 3 et 4)
        • 7.3.4 Précision sur le passage par valeur
        • 7.3.5 Visibilité et déclaration de la fonction
      • 7.4 Fonctions avec liste variable de paramètres
        • 7.4.1 Liste variable de paramètres de même type
        • 7.4.2 Liste variable de paramètres de types différents
        • 7.4.3 Transformer printf()
      • 7.5 Fonctions récursives
      • 7.6 Mise en pratique : fonctions
        • 7.6.1 Identifier les composants d'une fonction
        • 7.6.2 Déclaration de fonctions
        • 7.6.3 Procédures sans paramètre
        • 7.6.4 Fonctions sans paramètre
        • 7.6.5 Fonctions avec paramètres
    • 8. Gestion des variables
      • 8.1 Visibilité des variables
        • 8.1.1 Profondeur de la déclaration
        • 8.1.2 Portée des variables
        • 8.1.3 Masquage d'une variable
      • 8.2 Durée de vie des variables
        • 8.2.1 Variables globales
        • 8.2.2 Variables locales (auto)
        • 8.2.3 Variables static
      • 8.3 Choix méthodologiques
      • 8.4 Mise en pratique : gestion des variables
      • 8.5 Expérimentations : circuit de voiture
        • 8.5.1 Principe du circuit
        • 8.5.2 Structure de données du circuit
        • 8.5.3 Structure de données de la voiture
        • 8.5.4 Étapes de l'algorithme, fonctions nécessaires
        • 8.5.5 Programme commenté
        • 8.5.6 Conclusion
      • 8.6 Mise en pratique : recherches algorithmiques
        • 8.6.1 Création de circuits aléatoires
        • 8.6.2 Création de trajets non bouclés
        • 8.6.3 Ascenseur de la tour infernale
        • 8.6.4 Tracer des lignes
    • 9. Style, commentaires et indentations
      • 9.1 Pourquoi soigner le style ?
      • 9.2 Typographie et choix des noms
      • 9.3 Indentations rigoureuses et accolades
      • 9.4 Parenthèses pour dissiper les ambiguïtés
      • 9.5 Commentaires pertinents
      • 9.6 Mise en pratique : style, indentations, commentaires
  • Les structures
    • 1. Structure
      • 1.1 Qu'est-ce qu’une structure ?
      • 1.2 Disposer d’une structure dans un programme
        • 1.2.1 Définir un type de structure
        • 1.2.2 Où placer sa définition de structure
        • 1.2.3 Déclarer ses variables structure
        • 1.2.4 Utiliser un typedef
      • 1.3 Utiliser une structure
        • 1.3.1 Accès aux éléments avec l'opérateur point
        • 1.3.2 Priorité de l'opérateur point
        • 1.3.3 Une structure comme champ dans une structure
        • 1.3.4 Initialiser une structure à la déclaration
        • 1.3.5 Copier une structure
      • 1.4 Mise en pratique : définir, déclarer, initialiser des structures
    • 2. Structures et fonctions
      • 2.1 Retourner une structure
      • 2.2 Structures en paramètre de fonction
      • 2.3 Mise en pratique : structures et fonctions
      • 2.4 Expérimentation
        • 2.4.1 Fourmi 1 : une fourmi mobile à l’écran
        • 2.4.2 Voiture 2 : structure circuit, structure voiture
  • Les tableaux
    • 1. Tableaux statiques
      • 1.1 Qu'est-ce qu’un tableau ?
      • 1.2 Disposer d’un tableau statique dans un programme
        • 1.2.1 Définir et déclarer un tableau
        • 1.2.2 Utiliser des #define pour les tailles
      • 1.3 Utiliser un tableau
        • 1.3.1 Accéder aux éléments du tableau avec l'opérateur [ ]
        • 1.3.2 Priorité de l'opérateur [ ]
        • 1.3.3 Débordement de tableau
        • 1.3.4 Initialiser un tableau à la déclaration
        • 1.3.5 Parcourir un tableau avec une boucle for
        • 1.3.6 Trier un tableau
      • 1.4 Précisions sur #define et enum
        • 1.4.1 Utiliser un #define
        • 1.4.2 Utiliser un enum
      • 1.5 Tableaux à plusieurs dimensions
        • 1.5.1 Déclarer un tableau à plusieurs dimensions
        • 1.5.2 Initialiser la déclaration
        • 1.5.3 Parcourir un tableau à plusieurs dimensions
      • 1.6 Expérimentation : tableaux statiques
      • 1.7 Mise en pratique : opérations de base sur les tableaux statiques (non dynamiques)
        • 1.7.1 Déclaration de tableaux, accès aux éléments
        • 1.7.2 Initialisation de tableaux à la déclaration
        • 1.7.3 Tableaux à plusieurs dimensions
        • 1.7.4 Boucles et tableaux
    • 2. Exemples d'utilisations de tableaux
      • 2.1 Chaînes de caractères
      • 2.2 Image bitmap
      • 2.3 Stocker des données localisées
      • 2.4 Expérimentation : utilisation de chaînes de caractères
      • 2.5 Mise en pratique : tableaux
        • 2.5.1 Chaînes de caractères
        • 2.5.2 Image, terrain de jeux
        • 2.5.3 Localisation de données via plusieurs dimensions
    • 3. Tableaux et structures
      • 3.1 Tableau comme champ dans une structure
      • 3.2 Tableau de structures
      • 3.3 Différences entre tableaux et structures
      • 3.4 Mise en pratique : tableaux de structures
      • 3.5 Expérimentations : amélioration du programme voiture 2
        • 3.5.1 Voiture 3 : une structure trait et un tableau de traits
        • 3.5.2 Voiture 4 : tableau de structures voiture
        • 3.5.3 Voiture 5 : un circuit par voiture
        • 3.5.4 Voiture 5b : un circuit différent pour chaque voiture
    • 4. Tableaux et fonctions
      • 4.1 Utiliser un tableau déclaré en global
      • 4.2 Tableau en paramètre de fonction
        • 4.2.1 Précision sur le type tableau
        • 4.2.2 La variable pointeur
        • 4.2.3 En paramètre, conversion du tableau en pointeur
        • 4.2.4 Choix pour l'écriture des tableaux en paramètre
        • 4.2.5 Modification des données via un passage par adresse
      • 4.3 Quelques fonctions de traitement de chaînes de caractères
        • 4.3.1 Récupérer une chaîne entrée par l'utilisateur
        • 4.3.2 Obtenir la taille d'une chaîne
        • 4.3.3 Copier une chaîne
        • 4.3.4 Comparer deux chaînes
        • 4.3.5 Concaténer deux chaînes
      • 4.4 Expérimentation : tableaux et fonctions
      • 4.5 Mise en pratique : tableaux et fonctions
        • 4.5.1 Appels de fonctions, tableaux en paramètre
        • 4.5.2 Manipulations sur les chaînes
      • 4.6 Fourmi 2 : une colonie de fourmis
      • 4.7 Fourmi 3 : plusieurs colonies de fourmis
  • Les unions
    • 1. Principe de l'union
    • 2. Union de structures
    • 3. Tableau d'unions
  • Structuration d’un programme
    • 1. Structuration d'un programme, étude d'un automate cellulaire
      • 1.1 Clarifier et définir ses objectifs
        • 1.1.1 Principe de l'automate cellulaire
        • 1.1.2 Fonctionnement envisagé
      • 1.2 Trouver une structure de données valable
      • 1.3 Identifier les fonctions principales
      • 1.4 Choisir le niveau des variables fondamentales
      • 1.5 Écrire les fonctions
        • 1.5.1 Fonction d'initialisation
        • 1.5.2 Fonction d'affichage
        • 1.5.3 Fonction de calcul
        • 1.5.4 Fonction de comptage des voisins
        • 1.5.5 Fonction de recopie
        • 1.5.6 Montage dans le main()
      • 1.6 Intégrer une librairie personnelle
      • 1.7 Répartir son code sur plusieurs fichiers C
        • 1.7.1 Code réparti en quatre fichiers C
        • 1.7.2 Problème de redéfinition
      • 1.8 Mise en pratique : structuration d'un programme
        • 1.8.1 Simulation d'un feu de forêt
        • 1.8.2 Tristus et rigolus
        • 1.8.3 Simulation d'une attaque de microbes dans le sang
        • 1.8.4 Bancs de poissons, mouvements de populations
        • 1.8.5 Élection présidentielle
        • 1.8.6 Chenille
        • 1.8.7 Système de vie artificielle, colonies de fourmis
        • 1.8.8 Boutons et pages
        • 1.8.9 Panneaux de bois et entrepôts
        • 1.8.10 Nenuphs et clans
        • 1.8.11 Neige 1
        • 1.8.12 Neige 2
        • 1.8.13 Neige 3
        • 1.8.14 Casse-brique simple
        • 1.8.15 Casse-brique guru
        • 1.8.16 Space Invaders simple
        • 1.8.17 Space Invaders more
        • 1.8.18 Space Invaders guru
        • 1.8.19 Pacman débutant
        • 1.8.20 Pacman intermediate
        • 1.8.21 Pacman guru
        • 1.8.22 Jeu de miroirs
        • 1.8.23 Simulations football
  • Les pointeurs
    • 1. Principe du pointeur
      • 1.1 Qu'est-ce qu’un pointeur ?
        • 1.1.1 Mémoire RAM
        • 1.1.2 Une variable pointeur
        • 1.1.3 Quatre opérateurs
        • 1.1.4 Quatre utilisations fondamentales des pointeurs
      • 1.2 Déclarer un pointeur dans un programme
      • 1.3 Fonctionnement des quatre opérateurs
        • 1.3.1 Opérateur adresse : &
        • 1.3.2 Opérateur étoile : *
        • 1.3.3 Opérateur flèche : ->
        • 1.3.4 Opérateur crochet : [ ]
        • 1.3.5 Priorité des quatre opérateurs
      • 1.4 Allouer dynamiquement de la mémoire
        • 1.4.1 La fonction malloc()
        • 1.4.2 Libérer la mémoire allouée : la fonction free()
        • 1.4.3 Le pointeur générique void*
        • 1.4.4 La valeur NULL
      • 1.5 Attention à la validité d'une adresse mémoire
        • 1.5.1 Validité d'une adresse mémoire
        • 1.5.2 Pourquoi caster le retour des fonctions d'allocation ?
      • 1.6 Pointeurs et constantes
        • 1.6.1 Pointeur variable sur un objet constant
        • 1.6.2 Pointeur constant sur un objet variable
        • 1.6.3 Pointeur constant sur un objet constant
      • 1.7 Cas des tableaux de pointeurs
        • 1.7.1 Une structure de données très utile
        • 1.7.2 Un tableau de chaînes de caractères
        • 1.7.3 Utiliser les arguments de lignes de commandes
      • 1.8 Cas des pointeurs de fonction
        • 1.8.1 Une fonction est une adresse
        • 1.8.2 Reconnaître un type de fonction
        • 1.8.3 Appeler une fonction via un pointeur
        • 1.8.4 Pourquoi des pointeurs de fonction ?
      • 1.9 Expérimentation : base pointeurs
      • 1.10 Mise en pratique : base sur les pointeurs
        • 1.10.1 Définir et manipuler des pointeurs
        • 1.10.2 Tests tableaux/pointeurs
        • 1.10.3 Base allocation dynamique
        • 1.10.4 Attention aux erreurs
        • 1.10.5 Tableaux de chaînes
    • 2. Allocation dynamique de tableaux
      • 2.1 Allouer un tableau avec un pointeur
      • 2.2 Allouer une matrice avec un pointeur de pointeur
      • 2.3 Allouer un tableau dynamique de pointeurs
        • 2.3.1 Allocation d'un tableau dynamique de structures
        • 2.3.2 Allocation dynamique d'un tableau de pointeurs sur des unions
      • 2.4 Différences entre tableaux statiques et dynamiques
      • 2.5 Autres fonctions d'allocation dynamique
        • 2.5.1 Fonction calloc()
        • 2.5.2 Fonction realloc()
      • 2.6 Mise en pratique : allocation dynamique
        • 2.6.1 Allouer dynamiquement des tableaux
        • 2.6.2 Allouer dynamiquement des matrices
        • 2.6.3 Allocation dynamique calloc() et realloc()
    • 3. Pointeurs en paramètres de fonction
      • 3.1 Passage par référence
        • 3.1.1 Cas général d'une variable quelconque
        • 3.1.2 Exemple : une fonction qui retourne l'heure
        • 3.1.3 Passage par référence d'une structure
        • 3.1.4 Passage par référence d'une variable pointeur
      • 3.2 Subtilités à propos des tableaux en paramètre de fonction
      • 3.3 Mise en pratique : passage par référence
        • 3.3.1 Passage par référence, base
        • 3.3.2 Passage par référence, opérateurs bit à bit
        • 3.3.3 Passage de pointeurs par référence
        • 3.3.4 Passage de tableaux dynamiques
    • 4. Établir des relations entre structures
      • 4.1 Association de structures de types différents
      • 4.2 Association de deux structures de même type
    • 5. Fichiers (type FILE*)
      • 5.1 Notions de base
        • 5.1.1 Le type FILE*
        • 5.1.2 Ouverture et fermeture d'un fichier
        • 5.1.3 Spécifier un chemin d'accès
      • 5.2 Fichiers binaires
        • 5.2.1 Écriture et lecture en mode binaire
        • 5.2.2 Détecter la fin d'un fichier binaire
        • 5.2.3 Déplacements dans un fichier
      • 5.3 Écriture et lecture en mode texte
        • 5.3.1 Détecter la fin d'un fichier : EOF et feof()
        • 5.3.2 Lecture/écriture de caractères
        • 5.3.3 Lecture/écriture de chaînes
        • 5.3.4 Lecture/écriture formatées
      • 5.4 Sauvegarde d'éléments dynamiques
        • 5.4.1 Sauvegarder et récupérer un tableau dynamique
        • 5.4.2 Récupérer des données via des pointeurs
      • 5.5 Expérimentation : récapitulation sauvegardes binaires
      • 5.6 Mise en pratique : fichiers
  • Récursivité
    • 1. Fonctions récursives
      • 1.1 Qu'est-ce que la récursivité ?
      • 1.2 Une fonction récursive basique
      • 1.3 Pile d'appels et débordement
      • 1.4 Retourner une valeur
      • 1.5 Représentation et analyse du fonctionnement
        • 1.5.1 Analyse descendante
        • 1.5.2 Analyse ascendante
      • 1.6 Choisir entre itératif ou récursif
    • 2. Exemples classiques de fonctions récursives
      • 2.1 Calculs
        • 2.1.1 Afficher les chiffres d'un entier
        • 2.1.2 Produit factoriel
        • 2.1.3 Suite de Fibonacci
        • 2.1.4 Changement de base arithmétique d'un nombre
        • 2.1.5 Puissance
        • 2.1.6 Plus grand commun dénominateur (PGCD), algorithme d'Euclide
      • 2.2 Dessins
        • 2.2.1 Tracé d'une règle graduée : "diviser pour résoudre"
        • 2.2.2 Tracé de cercles
        • 2.2.3 Tracé de carrés
        • 2.2.4 Tracé d'un arbre
      • 2.3 Créations et jeux
        • 2.3.1 Trouver un chemin dans un labyrinthe
        • 2.3.2 Création d'un labyrinthe
      • 2.4 Les tours de Hanoï
      • 2.5 Tri rapide d'un tableau de nombres
    • 3. Mise en pratique : récursivité
  • Listes en C
    • 1. Listes chaînées dynamiques
      • 1.1 Qu'est-ce qu'une liste chaînée ?
        • 1.1.1 Une chaîne constituée de maillons
        • 1.1.2 Trois types de listes chaînées
        • 1.1.3 Les actions sur une liste chaînée
        • 1.1.4 Listes chaînées contre tableaux
      • 1.2 Implémenter une liste simple
        • 1.2.1 Structure de données d'un maillon
        • 1.2.2 Début et fin de la liste
        • 1.2.3 Initialiser un maillon
        • 1.2.4 Ajouter un maillon au début d'une liste
        • 1.2.5 Insérer un maillon dans une liste
        • 1.2.6 Parcourir la liste
        • 1.2.7 Supprimer un maillon au début de la liste
        • 1.2.8 Supprimer un élément sur critère
        • 1.2.9 Détruire la liste
        • 1.2.10 Sauvegarder la liste
      • 1.3 Implémenter une liste simple circulaire
        • 1.3.1 Structure de données d'une liste circulaire
        • 1.3.2 Liste vide
        • 1.3.3 Début et fin de la liste
        • 1.3.4 Initialiser un maillon
        • 1.3.5 Ajouter un maillon
        • 1.3.6 Parcourir la liste
        • 1.3.7 Supprimer un maillon
        • 1.3.8 Détruire la liste
      • 1.4 Implémenter une liste symétrique
        • 1.4.1 Structure de données
        • 1.4.2 Liste vide
        • 1.4.3 Début et fin de la liste
        • 1.4.4 Initialiser un élément
        • 1.4.5 Ajouter un élément au début
        • 1.4.6 Ajouter un élément à la fin
        • 1.4.7 Parcourir et afficher la liste
        • 1.4.8 Supprimer un élément
        • 1.4.9 Détruire la liste
        • 1.4.10 Copier une liste
      • 1.5 Mise en pratique : listes chaînées
    • 2. Piles
      • 2.1 Principes de la pile
        • 2.1.1 Modèle de données pile
        • 2.1.2 Implémentation statique ou dynamique
        • 2.1.3 Primitives de gestion des piles
        • 2.1.4 Applications importantes des piles
      • 2.2 Implémentation d'une pile en dynamique
        • 2.2.1 Structure de données
        • 2.2.2 Pile vide, pile pleine
        • 2.2.3 Initialisation
        • 2.2.4 Empiler
        • 2.2.5 Lire le sommet
        • 2.2.6 Dépiler
        • 2.2.7 Vider, détruire
        • 2.2.8 Affichage
        • 2.2.9 Test dans le main()
      • 2.3 Implémentation d'une pile en statique (tableau)
        • 2.3.1 Structure de données
        • 2.3.2 Initialisation
        • 2.3.3 Pile vide, pile pleine
        • 2.3.4 Empiler
        • 2.3.5 Lire le sommet
        • 2.3.6 Dépiler
        • 2.3.7 Vider, détruire
        • 2.3.8 Affichage
        • 2.3.9 Test dans le main()
      • 2.4 Mise en pratique : les piles
    • 3. Files
      • 3.1 Principes de la file
        • 3.1.1 Modèle de données file
        • 3.1.2 Implémentation statique ou dynamique
        • 3.1.3 Primitives de gestion des files
        • 3.1.4 Applications importantes des files
      • 3.2 Implémentation d'une file en dynamique
        • 3.2.1 Structure de données
        • 3.2.2 File vide, file pleine
        • 3.2.3 Initialisation
        • 3.2.4 Enfiler
        • 3.2.5 Lire la tête, lire la queue
        • 3.2.6 Défiler
        • 3.2.7 Vider, détruire
        • 3.2.8 Affichage
        • 3.2.9 Test dans le main()
      • 3.3 Implémentation d'une file en statique (tableau)
        • 3.3.1 Structure de données
        • 3.3.2 File vide, file pleine
        • 3.3.3 Initialisation
        • 3.3.4 Enfiler
        • 3.3.5 Lire la tête, lire la queue
        • 3.3.6 Défiler
        • 3.3.7 Vider, détruire
        • 3.3.8 Affichage
        • 3.3.9 Test dans le main()
      • 3.4 Mise en pratique : les files
    • 4. Arbres
      • 4.1 Généralités sur les arbres
        • 4.1.1 Principe
        • 4.1.2 Exemples d'utilisation des arbres
        • 4.1.3 Nomenclature des arbres
      • 4.2 Types d'arbre
        • 4.2.1 Arbre binaire
        • 4.2.2 Arbre n-aire
        • 4.2.3 Transformer un arbre n-aire en arbre binaire
      • 4.3 Représentations en mémoire
        • 4.3.1 Arbre n-aire
        • 4.3.2 Arbre binaire
        • 4.3.3 Structures de données statiques ou dynamiques
    • 5. Contrôler un arbre binaire
      • 5.1 Créer un arbre binaire
        • 5.1.1 Créer un arbre à partir d'un schéma descriptif
        • 5.1.2 Créer un arbre à partir des données aléatoires d'un tableau
        • 5.1.3 Créer un arbre en insérant des éléments ordonnés
      • 5.2 Parcourir l'arbre
        • 5.2.1 Parcours en profondeur
        • 5.2.2 Parcours en largeur, par niveau
      • 5.3 Afficher l'arbre
        • 5.3.1 Afficher un arbre avec indentation
        • 5.3.2 Dessiner l'arbre sans les liens
      • 5.4 Obtenir des propriétés de l'arbre binaire
        • 5.4.1 Connaître la taille
        • 5.4.2 Connaître la hauteur
        • 5.4.3 Savoir si un nœud est une feuille
        • 5.4.4 Compter le nombre des feuilles de l'arbre
        • 5.4.5 Lister toutes les feuilles
        • 5.4.6 Faire la somme des valeurs des nœuds
        • 5.4.7 Comparer des valeurs des nœuds de l'arbre
        • 5.4.8 Ramener un nœud de l'arbre à partir d'une valeur
      • 5.5 Dupliquer l'arbre
      • 5.6 Détruire l'arbre
      • 5.7 Conversion statique-dynamique d'un arbre binaire
        • 5.7.1 Conversion d'un arbre statique en dynamique
        • 5.7.2 Conversion d'un arbre dynamique en statique
      • 5.8 Sauvegarde et chargement d'un arbre binaire
        • 5.8.1 Sauvegarder un arbre dynamique
        • 5.8.2 Charger (load) un arbre dynamique
      • 5.9 Arbres binaires sur fichiers
        • 5.9.1 Structure de données
        • 5.9.2 Lecture d'un nœud à partir de son numéro d'enregistrement
        • 5.9.3 Adaptation des fonctions pour les arbres binaires dynamiques ou statiques
      • 5.10 Mise en pratique : arbre binaire
    • 6. Arbres binaires de recherche
      • 6.1 Définition
      • 6.2 Structure de données
      • 6.3 Insérer un élément dans l'arbre selon sa clé
        • 6.3.1 Comparer deux clés
        • 6.3.2 Insérer un élément à la bonne place
      • 6.4 Rechercher dans l'arbre un élément selon sa clé
      • 6.5 Supprimer un élément dans l'arbre de recherche
        • 6.5.1 Trois cas
        • 6.5.2 Fonction de recherche du nœud max
        • 6.5.3 Fonction de suppression
      • 6.6 Lister tous les éléments de l'arbre (parcours en largeur)
      • 6.7 Afficher l'arbre
      • 6.8 Test dans le main()
      • 6.9 Mise en pratique : arbres
  • Annexe
    • 1. Priorité et associativité des opérateurs
    • Index

Auteur

Frédéric DROUILLONEn savoir plus

Frédéric DROUILLON est enseignant, chercheur et aussi créateur dans le domaine de l’informatique et des arts numériques. Il envisage la programmation et ses langages comme un moyen d’expression et de formulation d’idées qui nécessite de la recherche et de la créativité. L’objectif de son enseignement en langage C est de permettre au lecteur d’acquérir un savoir-faire fondamental en programmation informatique pour ensuite circuler le plus librement possible dans les différentes techniques et langages de programmation.

Caractéristiques

  • Niveau Initié à Confirmé
  • Nombre de pages 615 pages
  • Parution juin 2018
    • Livre (broché) - 17 x 21 cm
    • ISBN : 978-2-409-01400-0
    • EAN : 9782409014000
    • Ref. ENI : RIPROPC
  • Niveau Initié à Confirmé
  • Parution juin 2018
    • HTML
    • ISBN : 978-2-409-01406-2
    • EAN : 9782409014062
    • Ref. ENI : LNRIPROPC

Téléchargements

En complétant ce formulaire, vous acceptez d'être contacté afin de recevoir des informations sur nos produits et services ainsi que nos communications marketing. Vous aurez la possibilité de vous désabonner de nos communications à tout moment. Pour plus d'informations sur notre politique de protection des données, cliquez ici.
  • Des fichiers complémentaires (4,37 Mo)