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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
////////////////////////////////////////definition des types
typedef struct s_test
{
char *valeur_test;
struct s_instruction *then_branch;
struct s_instruction *else_branch;
}test;
typedef struct s_instruction
{
int numero; //le compteur du nombre d'instruction, car j'utilise les tableaux dynamiques
int cle;
int arite;
union
{
char *instruction_simple;
char *instruction_primitive;
test instruction_test;
}val;
}instruction;
typedef instruction *p_instruction;
typedef struct s_instance
{
int numero_instance;
int date_reveil;
int numero_tache;
instruction *p_instruction;
}instance;
typedef instance *p_instance;
////////////////////////////////////////definition des spécifications
//construit une instruction simple
instruction construit_instruction_simple(char*);
//initialise une instance
instance initialise_instance(int, int, int);
//ajouter une instruction à une instance
instance ajoute_instruction_instance(instruction, instance);
//affiche une instance
void affiche_instance(instance);
//affiche une instruction
void affiche_instruction(instruction);
//affiche un test
void affiche_test(test);
//affiche la then branch
void affiche_then_branch(p_instruction);
//affiche la else branch
void affiche_else_branch(p_instruction);
////////////////////////////////////////implémentation des spécifications
//construit une instruction simple
instruction construit_instruction_simple(char *ins)
{
instruction instruc;
instruc.arite = 1;
instruc.cle = 0;
instruc.numero = 0;
instruc.val.instruction_simple = ins;
return instruc;
}
//initialise une instance
instance initialise_instance(int numero_instance, int date_reveil, int numero_tache)
{
instance inst; /* = (instance)malloc(sizeof(instance));*/
inst.numero_instance = numero_instance;
inst.date_reveil = date_reveil;
inst.numero_tache = numero_tache;
inst.p_instruction = NULL;
return inst;
}
//ajouter une instruction à une instance
instance ajoute_instruction_instance(instruction ins, instance instan)
{
p_instruction p = (p_instruction)realloc(instan.p_instruction, (instan.p_instruction->numero +1)*sizeof(instruction));
if(p == NULL)
{
printf(" \n ajout d'une nouvelle instruction a une instance impossible \n");
}
else
{
p[p->numero] = ins;
p->numero++;
instan.p_instruction = p;
}
return instan;
}
//affiche une instance
void affiche_instance(instance instan)
{
int i;
for(i=0; i<instan.p_instruction->numero; i++)
{
affiche_instruction(instan.p_instruction[i]);
}
}
//affiche une instruction
void affiche_instruction(instruction instruc)
{
if(instruc.arite == 1)
{
printf(instruc.val.instruction_simple);
}
else if(instruc.arite == 2)
{
printf(instruc.val.instruction_primitive);
}
else if(instruc.arite == 3)
{
affiche_test(instruc.val.instruction_test);
}
}
//affiche un test
void affiche_test(test t)
{
printf(t.valeur_test);
printf("(");
affiche_then_branch(t.then_branch);
printf(",");
affiche_else_branch(t.else_branch);
printf(")");
}
//affiche la then branch
void affiche_then_branch(p_instruction p)
{
int i;
for(i=0; i<p->numero; i++)
{
affiche_instruction(p[i]);
}
}
//affiche la else branch
void affiche_else_branch(p_instruction p)
{
int i;
for(i=0; i<p->numero; i++)
{
affiche_instruction(p[i]);
}
}
///////////////////////////////////////fonction principale
int main()
{
instance instance1 = initialise_instance(1, 0, 1);
instance instance2 = initialise_instance(2, 0, 2);
instruction instruction1 = construit_instruction_simple("a1");
instruction instruction2 = construit_instruction_simple("a2");
instance1 = ajoute_instruction_instance(instruction1, instance1);
instance1 = ajoute_instruction_instance(instruction1, instance1);
instance2 = ajoute_instruction_instance(instruction2, instance2);
instance2 = ajoute_instruction_instance(instruction2, instance2);
instance2 = ajoute_instruction_instance(instruction2, instance2);
affiche_instance(instance1);
printf("\n");
affiche_instance(instance2);
printf("\n");
return 0;
} |
Partager