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
|
noeud *creerArbre(char *t)
{
noeud *s = malloc(sizeof(noeud));
int i=2,taille=0,nbPOuv=0,nbP=0,tolerance=0; // i initialisé à 2 pour sauté le =
taille=strlen(t);
s->valeur = t[0]; // implicitement, le caractère est transformé en Code ASCII
s->oper = "="; // permet de dire que nous sommes bien dans le premier élement pour la fonction d'affichage
s->gauche = NULL;
s->droite = NULL;
//maintenant on doit en fonction des parenthèse établir une hierarchie
//Utilisation d'une variable de tolérance, permettant de refaire des test de aractères tant que le nombre de parenthèse tolérée <= nombre de parenthèse dans la fonction
while (tolerance <= nbP)
{
while (i<= taille)
{
//gestion du nombre de parenthèse
if (t[i] == '(')
{
nbPOuv++;
nbP++;
}
if ((t[i] == ')') && (nbPOuv != 0)) // même si ça ne devrait jamais arriver, simple sécurité
nbPOuv--;
if (((t[i] == '+') || (t[i] == '-') || (t[i] == '*')) && (nbPOuv == tolerance)) //Si t est soit +, soit -, soit * et qu'en plus, le nombre de parenthèse ouverte est identique au nombre de parenthèse tolérée
{
printf("Caractère entrant : %c\n",t[i]);
ajouterNoeud(s,t[i],0);
//On ajoute à la suite les caractères précedants et suivant celui traité uniquement si on a pas de parenthése aant et après l'opérateur
if ((estTuUnChiffre(t[i-1])) && (estTuUnChiffre(t[i+1])))
{
//Ne pas oublier de faire une conversion en nombre à 2 digits si on le doit
if (estTuUnChiffre(t[i-2]))
ajouterNoeud(s,nombre(t[i-2],t[i-1]),1);
else
ajouterNoeud(s,t[i-1],1);
if (estTuUnChiffre(t[i+2]))
ajouterNoeud(s,nombre(t[i+1],t[i+2]),0);
else
ajouterNoeud(s,t[i+1],0);
}
}
i++;
}
//reinitialisation des paramètres
tolerance++;
i=2;
}while (tolerance <= nbP);
return s;
}
void ajouterNoeud(noeud **arbre, char valeur, int dir)
{
noeud *noeudfct;
noeud *arbrefct = *arbre;
noeud *elem = malloc(sizeof(noeud));
//Définition de l'élement que l'on ajoute
if (estTuUnChiffre(valeur))
{
elem->valeur = conversionEntier(valeur);
elem->oper = NULL;
elem->gauche = NULL;
elem->droite = NULL;
}
else
{
elem->valeur = NULL;
elem->oper = valeur;
elem->gauche = NULL;
elem->droite = NULL;
}
noeudfct = arbrefct;
printf("Hey\n");
//Maintenant, si c'est le premier élement de calcul de l'équation, il viendra forcément se placer à droite, et on aura forcément NULL
if (arbrefct->droite == NULL)
{
printf("Premier élement\n");
noeudfct->droite = elem;
return;
} |
Partager