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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| #include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//#include <stdbool.h>
typedef enum e_bool { false=0, true } bool;
#define a1 6
#define b1 24
#define a2 10
#define b2 16
typedef enum {EVT_A, EVT_S, EVT_D} type;
struct chainon_event
{
type event_type;
float event_time;
struct chainon_event *pNext;
};
struct liste_events
{
struct chainon_event *pTete;
};
struct chainon_event *ExtrairePremier(struct liste_events * const pListe)
{
struct chainon_event *pRet = NULL;
/* test la validite du parametre */
if (pListe->pTete != NULL)
{
struct chainon_event *p;
p = pListe->pTete;
if (p == NULL)
{
printf("liste vide\n");
}
else
{
pListe->pTete = p->pNext;
pRet = p;
printf("l'evennement extrait est: ");
/* on force l'affichage */
fflush(stdout);
}
}
return pRet;
}
/* purge le tampon du flux d'entree standard */
void purger(void)
{
int c;
while ((c = fgetc(stdin)) != '\n' && c != EOF)
{ }
}
void pause(char const * const message)
{
if (message != NULL)
{
printf("%s", message);
fflush(stdout);
}
purger();
}
struct chainon_event * CreerEvent(char tp, float val)
{
struct chainon_event *pEvent = malloc(sizeof *pEvent);
if (pEvent != NULL)
{
pEvent->event_type = tp;
pEvent->event_time = val;
}
return pEvent;
}
void insertion(struct liste_events * const pListe, char tp, float val)
{
/* programmation defensive: on s'assure de la validite des parametres */
if (pListe != NULL)
{
struct chainon_event * const pEvent = CreerEvent(tp, val);
/* tester si l'allocation a reussi */
if (pEvent != NULL)
{
/* on se place au debut de la liste */
struct chainon_event *pt1 = NULL;
struct chainon_event *pt2 = pListe->pTete;
/* on parcourt toute la liste */
while (pt2 != NULL)
{
pt1 = pt2;
pt2 = pt2->pNext;
/* Il manque un test ici pour sortir de la liste avant la fin
Ce test sera sans doute sur event_time... */
}
if (pt2 == pListe->pTete)
{
pListe->pTete = pEvent;
}
else
{
pt1->pNext = pEvent;
}
pEvent->pNext = pt2;
}
}
}
void affichage(struct chainon_event const * const pcTete)
{
/* pas d'affichage, la liste est vide */
if (pcTete != NULL)
{
struct chainon_event const * pcCourant = pcTete;
while (pcCourant != NULL)
{
printf(" le type de l'evennement est: %c\n", pcCourant->event_type);
printf(" le temps de l'evennement est: %f\n", pcCourant->event_time);
pcCourant = pcCourant->pNext;
}
}
} |