Les buts de cette section.
Quel que soit le langage de programmation utilisé il y a très facilement moyen de rendre le code créé parfaitement incompréhensible.
Si l'idée peut parraître tentante, dans le but de se rendre indispensable dans une équipe, ou plus simplement pour «protéger ses sources», il s'agit en réalité d'un très mauvais plan.
Cette page explique pourquoi, et les moyens d'y remédier.
Brève historique de l'évolution des langages.
Pour savoir de quoi on parle.
Il faut un minimum de méthode pour programmer.
Tout ce qu'il faut pour les différentes opérations.
Le but de tout programme est de gérer des informations.
Pour gérer ces informations, il faut utiliser des couples de noms et de valeurs nommés variables.
Cette page leur est consacrée.
Le «flowchart» est sûrement la plus connue des méthodes pour créer un algorithme de programmation.
En voici le principe.
Cette page présente la mise en oeuvre d'un premier flowchart.
Une méthode très utile pour la création d'algorithme, et pourtant trop méconnue, est le nassichneiderman.
Cette page lui est dédiée.
Voici un premier exemple de nassichneiderman.
Les types de variables simples dont on dispose sont très souvent insufisants.
La première manière de disposer de variables correspondant à nos attentes est souvent l'utilisation de tableaux…
Cette page leur est consacrée.
Il est souvent nécessaire de pouvoir combiner plusieurs types de données de manière à pouvoir les utiliser au sein d'une seule et unique variable propre au programmeur.
La combinaison de différents types de données permet de créer des variables que l'on appelle «variables structurées», ou encore «types de variable personnalisés».
Cette page traîte de leur utilité et de leur utilisation.
Routine est un terme générique qui correspond à «sous-programme».
Ce terme reprend tout tronçon de programme écrit de manière à ce qu'il puisse être appelé de n'importe quel endroit de l'application pour en éviter la réécriture à chaque fois qu'un code similaire doit être effectué.
Les pointeurs sont des entités assez particulières.
Ils sont en effet en mesure de garder l'adresse mémoire à laquelle trouver une variable d'un type précis.
Leur utilisation permet énormément de choses, et cette page tente de vous les expliquer.
Il est parfaitement possible d'introduire un pointeur dans une structure
Maintenant que nous avons une idée à peu près précise de ce que sont les pointeurs, voyons un peu comment s'y prendre pour les gérer dans les structures
Voici quelques pages, j'ai tenté de vous initier à l'utilisation de tableaux.
Si vous avez lu toutes les pages de ce tutorial, vous devriez en connaître suffiemment pour pouvoir vous attaquer à la gestion dynamique des tableaux.
C'est donc le moment de nous y attaquer
Le système est simple, le premier élément auquel on peut accéder est le dernier élément à avoir été ajouté, un peu comme une pile de caisse dans un supermarché.
Il est impossible d'arriver à retirer une caisse avant d'avoir retiré la caisse qui se trouve au dessus d'elle (du moins, si on veut éviter de toutes les faire tomber).
Le système est tout aussi simple: le premier élément auquel on accède est le premier élément qui a été rajouté selon le principe de ce qui se passe dans la file d'attente pour passer aux caisse…
On entre dans la file par la gauche et on en sort par la droite (ou inversément).
Très similaire à la deuxième solution (la file).
on accepte simplement l'idée qu'un élément puisse s'introduire entre deux éléments qui attendent leur tour (il y a souvent des gens sympas qui,voyant que vous n'avez qu'une boite de soupe, vous laissent passer avant eux).
L'avantage que l'on peut entre autre en tirer, c'est qu'il devient possible de trier les données qu'on obtient alors qu'on est encore à l'&eactue;tape d'acquisition…Une fois cette étape terminée, nous disposerons donc de données parfaitement triées.
Pour le reste, cela fonctionne comme une file.
La liste doublement chaînée est une liste chainée un peu particulière: chaque élément contient non seulement un pointeur vers l'élément suivant, mais aussi un pointeur vers l'élément précédent…
L'avantage que l'on en tire est qu'on peut parcourrir la chaine dans les deux sens, ce qui peut accélérer la recherche de manière assez spectaculaire (pour autant que la liste soit correctement triée).
Ajoutez l'histoire du serpent qui se bouffe la queue à une liste chaînée, et vous obtiendrez une liste circulaire.
Ce n'est donc rien de plus qu'une liste pour laquelle le dernier élément de la liste renvoie au premier… Mais ça peut présenter des avantages
Si cette méthode est utilisable, et qu'elle est correctement mise en oeuvre, c'est sans aucun doute celle qui permet de trouver un élément donné le plus rapidement… du moins sans avoir à recourrir à un algorithme trop compliqué
L'idée est simple: pour chaque élément on pren un pointeur vers l'élément plus grand et un autre vers l'élément plus petit.
Copyright (©) 2005 (Philippe Dunski)
Ce cours est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous).
Ce cours est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails.
Cependant, l'auteur apprécierait grandement que vous lui fassiez part de toute modification apportée à son contnu
Vous pouvez le contacter par mail à l'adresse koala01@free.fr
Vous pouvez trouver une adaptation française de la licence GNU/GPL à l'URL http://www.linux-france.org/article/these/gpl.html