Tableaux de Recherche en C : Un Guide pour Débutants

Bonjour, aspirants programmeurs ! Aujourd'hui, nous allons plonger dans le monde passionnant des tableaux de recherche en C. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - je vais vous guider à travers ce concept étape par étape, tout comme j'ai fait pour des centaines d'étudiants au cours de mes années d'enseignement. Alors, embarquons dans cette aventure ensemble !

C - Lookup Tables

Qu'est-ce que les Tableaux de Recherche ?

Avant de passer aux exemples, comprenons ce qu'est un tableau de recherche. Imaginez que vous êtes dans une bibliothèque, et au lieu de chercher dans chaque livre pour trouver ce dont vous avez besoin, vous utilisez un catalogue qui vous indique exactement où se trouve chaque livre. C'est essentiellement ce que fait un tableau de recherche en programmation - il s'agit d'une structure de données qui remplace les calculs à l'exécution par une opération d'indexation dans un tableau plus simple.

Maintenant, explorons ce concept à travers quelques exemples pratiques.

Exemple 1 : Jours de la Semaine

Commençons par un exemple simple - un tableau de recherche pour les jours de la semaine.

#include <stdio.h>

int main() {
const char *jours[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
int numero_jour;

printf("Entrez un numéro de jour (0-6) : ");
scanf("%d", &numero_jour);

if (numero_jour >= 0 && numero_jour <= 6) {
printf("Le jour est : %s\n", jours[numero_jour]);
} else {
printf("Numéro de jour invalide !\n");
}

return 0;
}

Dans cet exemple, nous avons créé un tableau jours qui stocke les noms des jours de la semaine. Lorsqu'un utilisateur entre un nombre entre 0 et 6, nous pouvons rapidement récupérer le nom du jour correspondant en utilisant l'indexation du tableau. Cela est beaucoup plus rapide et propre que d'utiliser une série de instructions if-else !

Exemple 2 : Traducteur de Code Morse

Passons maintenant à quelque chose de plus complexe - un traducteur de code Morse.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
const char *morse[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
char texte[100];
int i;

printf("Entrez un mot en majuscules : ");
scanf("%s", texte);

for (i = 0; i < strlen(texte); i++) {
if (isalpha(texte[i])) {
printf("%s ", morse[texte[i] - 'A']);
}
}
printf("\n");

return 0;
}

Ici, nous avons créé un tableau de recherche pour le code Morse. Chaque lettre contient son équivalent en code Morse. Lorsqu'un utilisateur entre un mot, nous traduisons chaque lettre en son équivalent Morse en utilisant la valeur ASCII de la lettre comme index dans notre tableau de recherche.

Exemple 3 : Conversion de Température

Créons un tableau de recherche pour une conversion rapide de Fahrenheit en Celsius.

#include <stdio.h>

#define TABLE_SIZE 101

int main() {
float celsius_table[TABLE_SIZE];
int i;

// Remplir le tableau de recherche
for (i = 0; i < TABLE_SIZE; i++) {
celsius_table[i] = (i - 32) * 5.0 / 9.0;
}

int fahrenheit;
printf("Entrez la température en Fahrenheit (0-100) : ");
scanf("%d", &fahrenheit);

if (fahrenheit >= 0 && fahrenheit <= 100) {
printf("%.2f°C\n", celsius_table[fahrenheit]);
} else {
printf("Température en dehors de la plage !\n");
}

return 0;
}

Dans cet exemple, nous pré-calculons les valeurs Celsius pour les températures Fahrenheit de 0 à 100 et les stockons dans un tableau de recherche. Cela permet des conversions de température instantanées sans nécessiter de calculs à l'exécution.

Exemple 4 : Fonctions Trigonométriques

Les tableaux de recherche sont particulièrement utiles pour des opérations coûteuses en termes de calculs, comme les fonctions trigonométriques. Voici un exemple d'un tableau de recherche pour la fonction sinus :

#include <stdio.h>
#include <math.h>

#define TABLE_SIZE 360
#define PI 3.14159265

int main() {
float sine_table[TABLE_SIZE];
int i;

// Remplir le tableau de recherche
for (i = 0; i < TABLE_SIZE; i++) {
sine_table[i] = sin(i * PI / 180);
}

int angle;
printf("Entrez un angle en degrés (0-359) : ");
scanf("%d", &angle);

if (angle >= 0 && angle < 360) {
printf("sin(%d°) = %.4f\n", angle, sine_table[angle]);
} else {
printf("Angle en dehors de la plage !\n");
}

return 0;
}

Cet exemple pré-calcul les valeurs sinus pour les angles de 0 à 359 degrés. En utilisant ce tableau de recherche, nous pouvons rapidement récupérer les valeurs sinus sans effectuer la fonction sinus coûteuse en termes de calculs à l'exécution.

Tableaux de Recherche dans les Afficheurs 7 Segments

Enfin, regardons comment les tableaux de recherche peuvent être utilisés dans une application pratique - piloter un afficheur 7 segments.

#include <stdio.h>

#define SEGMENTS 7

int main() {
// Tableau de recherche pour l'afficheur 7 segments (0-9)
const unsigned char seven_seg_digits[10][SEGMENTS] = {
{1, 1, 1, 1, 1, 1, 0},  // 0
{0, 1, 1, 0, 0, 0, 0},  // 1
{1, 1, 0, 1, 1, 0, 1},  // 2
{1, 1, 1, 1, 0, 0, 1},  // 3
{0, 1, 1, 0, 0, 1, 1},  // 4
{1, 0, 1, 1, 0, 1, 1},  // 5
{1, 0, 1, 1, 1, 1, 1},  // 6
{1, 1, 1, 0, 0, 0, 0},  // 7
{1, 1, 1, 1, 1, 1, 1},  // 8
{1, 1, 1, 1, 0, 1, 1}   // 9
};

int chiffre;
printf("Entrez un chiffre (0-9) : ");
scanf("%d", &chiffre);

if (chiffre >= 0 && chiffre <= 9) {
printf("Affichage 7 segments pour %d :\n", chiffre);
for (int i = 0; i < SEGMENTS; i++) {
printf("%c ", seven_seg_digits[chiffre][i] ? '*' : ' ');
}
printf("\n");
} else {
printf("Chiffre invalide !\n");
}

return 0;
}

Dans cet exemple, nous utilisons un tableau de recherche 2D pour stocker les motifs de segments pour les chiffres 0-9 sur un afficheur 7 segments. Chaque ligne représente un chiffre, et chaque colonne représente un segment (1 pour allumé, 0 pour éteint). Cela nous permet de rapidement récupérer le motif correct pour n'importe quel chiffre.

Conclusion

Les tableaux de recherche sont un outil puissant dans l'arsenal d'un programmeur. Ils peuvent améliorer significativement les performances en échangeant de la mémoire contre la vitesse, surtout dans les situations où les calculs sont complexes ou fréquemment répétés. Lorsque vous continuerez votre parcours en programmation, vous trouverez de nombreuses autres applications pour les tableaux de recherche.

Souvenez-vous, la pratique rend parfait ! Essayez de créer vos propres tableaux de recherche pour différentes situations. Bonne programmation, et n'hésitez pas à me contacter si vous avez des questions !

Méthode Description Exemple
Indexation de Tableau Utiliser un tableau pour stocker des valeurs pré-calculées Jours de la semaine, Code Morse
Tableaux Multidimensionnels Utiliser des tableaux 2D ou 3D pour des données plus complexes Afficheur 7 segments
Pré-calcul Calculer des valeurs à l'avance et les stocker dans un tableau Conversion de température, Fonctions trigonométriques
Mappage de Caractères Mapper des caractères aux valeurs en utilisant ASCII Traducteur de code Morse
Vérification de Plage Assurer que l'entrée est dans la plage valide pour le tableau Tous les exemples (0-6, 0-100, 0-359, 0-9)

Credits: Image by storyset