Modèles et formulaires

Guide : Implémenter get_iemedans des fichiers avec tableaux circulaires en C

×

Recommandés

La fonction get_iemepermet de récupérer le i-ème élément d’un fichier implémenté en tableau circulaire. Ce guide vous expliquera comment intégrer cette fonctionnalité dans un programme C qui gère des fichiers en tableaux circulaires.


1. Objectif deget_ieme

La fonction get_iemedoit permettre de récupérer l’élément situé à une position spécifique dans un fichier circulaire sans le retirer. Le fichier est géré sous forme de tableau circulaire.


2. Prérequis

Pour intégrer get_ieme, nous devons disposer les éléments suivants dans la structure de la fiche circulaire :

  • Un tableau : Pour stocker les données.
  • Un indexhead : Pointant vers le début de la file.
  • Un indextail : Pointant vers la position suivante pour l’insertion.
  • La capacité : Taille maximale du fichier.
  • La taille actuelle : Nombre d’éléments dans le fichier.

3. Structure et Fonctions de Base

Structure du fichier

 typedef struct {
int *data; // Tableau pour stocker les éléments
int capacity; // Capacité maximale du tableau
int head; // Indice du premier élément
int tail; // Indice du prochain emplacement d'insertion
int size; // Nombre d'éléments actuels
} CircularQueue;

Initialisation du fichier

 void initializeQueue(CircularQueue *queue, int capacity) {
queue->data = (int *)malloc(capacity * sizeof(int));
if (queue->data == NULL) {
printf("Erreur d'allocation mémoire.\n");
exit(1);
}
queue->capacity = capacity;
queue->head = 0;
queue->tail = 0;
queue->size = 0;
}

4. Mise en œuvre deget_ieme

Description deget_ieme

  • Mais : Récupérer l’élément situé à la position i(i-ème élément) sans modifier le fichier.
  • Conditions préalables :
    • La position idoit être valide (0 ≤ i < taille actuelle du fichier).
    • Le fichier ne doit pas être vide.
  • Approche :
    • L’index circulaire de l’élément peut être calculé avec :cCopier le codeindex = (head + i) % capacity;

Code deget_ieme

 int get_ieme(CircularQueue *queue, int i, int *value) {
if (i < 0 || i >= queue->size) {
return -1; // Indice invalide
}

int index = (queue->head + i) % queue->capacity; // Calcul de l'indice circulaire
*value = queue->data[index];
return 0; // Succès
}

5. Code complet avec exemple

Voici un programme complet intégrant get_ieme:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
int *data; // Tableau pour stocker les éléments
int capacity; // Capacité maximale
int head; // Indice du premier élément
int tail; // Indice du prochain emplacement d'insertion
int size; // Nombre d'éléments actuels
} CircularQueue;

// Initialisation de la file
void initializeQueue(CircularQueue *queue, int capacity) {
queue->data = (int *)malloc(capacity * sizeof(int));
if (queue->data == NULL) {
printf("Erreur d'allocation mémoire.\n");
exit(1);
}
queue->capacity = capacity;
queue->head = 0;
queue->tail = 0;
queue->size = 0;
}

// Ajouter un élément à la file
int enqueue(CircularQueue *queue, int value) {
if (queue->size == queue->capacity) {
return -1; // La file est pleine
}
queue->data[queue->tail] = value;
queue->tail = (queue->tail + 1) % queue->capacity; // Gestion circulaire


queue->size++;
return 0;
}

// Retirer un élément de la file
int dequeue(CircularQueue *queue, int *value) {
if (queue->size == 0) {
return -1; // La file est vide
}
*value = queue->data[queue->head];
queue->head = (queue->head + 1) % queue->capacity; // Gestion circulaire
queue->size--;
return 0;
}

// Récupérer le i-ème élément de la file
int get_ieme(CircularQueue *queue, int i, int *value) {
if (i < 0 || i >= queue->size) {
return -1; // Indice invalide
}

int index = (queue->head + i) % queue->capacity; // Calcul de l'indice circulaire
*value = queue->data[index];
return 0; // Succès
}

// Libérer la mémoire de la file
void freeQueue(CircularQueue *queue) {
free(queue->data);
queue->data = NULL;
queue->capacity = queue->head = queue->tail = queue->size = 0;
}

// Programme principal
int main() {
CircularQueue queue;
initializeQueue(&queue, 5); // Capacité de la file : 5

// Ajout d'éléments dans la file
enqueue(&queue, 10);
enqueue(&queue, 20);
enqueue(&queue, 30);
enqueue(&queue, 40);
enqueue(&queue, 50);

// Récupérer le i-ème élément sans le retirer
int value;
for (int i = 0; i < queue.size; i++) {
if (get_ieme(&queue, i, &value) == 0) {
printf("Élément %d : %d\n", i, value);
} else {
printf("Impossible de récupérer l'élément %d\n", i);
}
}

// Libérer la mémoire
freeQueue(&queue);
return 0;
}

6. Fonctionnement du programme

  1. Initialisation :
    • Un fichier circulaire de capacité 5 est créé.
  2. Insertion ( enqueue) :
    • Cinq éléments (10, 20, 30, 40, 50) sont insérés dans le fichier.
  3. Accès avecget_ieme :
    • La fonction get_iemepermet de récupérer chaque élément sans modifier le fichier.
  4. Libération :
    • La mémoire développée dynamiquement est libérée à la fin.

7. Résultats

Si vous exécutez le programme, vous obtiendrez la sortie suivante :

 Élément 0 : 10
Élément 1 : 20
Élément 2 : 30
Élément 3 : 40
Élément 4 : 50

8. Points Clés

  1. Validité de l’indice :
    • La position idoit être comprise entre 0et queue->size - 1.
  2. Gestion circulaire :
    • L’index circulaire est calculé avec (head + i) % capacity.
  3. Indépendance :
    • get_iemene modifiez pas le fichier, contrairement à dequeue.

9. Extensions

  • Rendre get_iemethread-safe : Utilisez des verrous ou des fonctions atomiques pour sécuriser l’accès dans un environnement multithread.
  • Support pour types génériques : Remplacez le type intpar void *pour gérer différents types de données.
  • Gestion dynamique : Ajoutez une fonctionnalité pour augmenter la taille du fichier lorsque nécessaire.

Recommandés

Le Bon de Réception : Modèle à...
Le bon de réception est un...
En savoir plus
Calcul de la Recette Marginale : Fiche...
La recette marginale est un concept...
En savoir plus
Rapport de faisabilité d'un projet : Modèle...
La réussite d'un projet dans le...
En savoir plus
La Matrice des Compétences : Exemple téléchargeable
Télécharger un modèle de matrice des...
En savoir plus
Pyramide Documentaire ISO 9001:2015 : Modèle Excel
L'ISO 9001:2015 est une norme internationale...
En savoir plus
Optimisation des Opérations : Le Modèle de...
Dans le monde concurrentiel d'aujourd'hui, la...
En savoir plus
AZ

Recent Posts

Méthode des points de vue narratifs en 4ème

Introduction En classe de 4ème, l’étude du récit occupe une place importante dans l’apprentissage du…

10 heures ago

Classification des Documents : Organiser et Automatiser la Gestion Documentaire

Dans toute organisation moderne — entreprise, association, service administratif ou bureau de projet — la…

3 jours ago

Modèle de Bilan Actif Passif sur Excel : Concevoir un tableau comptable clair et automatisé

Dans la pratique comptable, le bilan constitue l’un des documents les plus fondamentaux pour comprendre…

3 jours ago

Fiche Méthode analyse linéaire + guide complet pour la réussir

L’analyse linéaire impressionne souvent plus qu’elle ne le devrait. Au moment d’aborder l’oral du bac…

3 jours ago

Analyse linéaire au bac français : méthode complète, exemples et conseils pour réussir l’oral

L’analyse linéaire occupe une place centrale à l’oral du bac français. C’est l’exercice qui permet…

4 jours ago

Créer une fiche de suivi en ligne : générateur personnalisable à imprimer

Créer une fiche de suivi claire et adaptée à son activité prend souvent plus de…

4 jours ago

This website uses cookies.