/** \fn recherche_mot_grille(t_valeurmot mot_dico,t_lettre grille[N][M]); \brief recherche un mot dans la grille \param (le mot,la grille) \return 1 si le mot est present 0 sinon */ int recherche_mot_grille(t_valeurmot *mot_dico,t_lettre grille[N][M]){ int i,j,k=0; int chemin_mot_sommet,redondance_lettre_sommet; t_coord chemin_mot_pile[t_max]; t_coord redondance_lettre_pile[t_max]; /*On recherche la premiere lettre du mot parmis la grille,ce sera nos points de departs*/ for(i=0;i<N ;i++){ for(j=0;j<M;j++){ /*Si on trouve un point de depart*/ if(grille[i][j].c==mot_dico->mot[k]){ /*On initialise nos piles de chemin et de redondance*/ initpile(&chemin_mot_sommet); initpile(&redondance_lettre_sommet); /*On push les coordonnées de depart à nos piles*/ push(i,j,chemin_mot_pile,&chemin_mot_sommet); push(i,j,redondance_lettre_pile,&redondance_lettre_sommet); k++; /*TANT QUE tout les chemins ne sont pas teste*/ while(chemin_mot_sommet!=-1){ if(mot_dico->mot[k]=='\0'){ calc_score(mot_dico,chemin_mot_pile,&chemin_mot_sommet,grille); return 1; } chemin(grille,mot_dico->mot[k],&k,chemin_mot_pile,redondance_lettre_pile,&chemin_mot_sommet,&redondance_lettre_sommet); // on cherche le chemin de la prochaine lettre du mot } } } } /*On a parcouru la grille sans trouve de mot on retourne donc 0*/ return 0; }
/*fonction recherche_mot_matrice *utilisation des fonctions precedentes afin de rechercher un mot dans la matrice jeu *retourne 1 si le mot donne en parametre est present *retourne 0 dans le cas inverse */ int recherche_mot_matrice(char mot[20],t_case matrice[TAILLE_MATRICE][TAILLE_MATRICE]){ //declaration int i; int j; int k=0; //recherche d'une lettre à partir de la case (0;0)de la matrice jeu for(i=0;i<TAILLE_MATRICE;i++){ for(j=0;j<TAILLE_MATRICE;j++){ if(matrice[i][j].lettre==mot[k]){ //declaration pour chaque départ d'une case int p; //initialisation: //de la structure redondance à -1 pour toutes les lignes, initialisation avec une valeur impossible pour une coordonnees for(p=0;p<TAILLE_MATRICE*TAILLE_MATRICE;p++){ redondance[p].ligne=-1; } //de la pile initpile(); empiler(i,j); k++; //de la structure redondance redondance[0].ligne=i; redondance[0].colonne=j; //traitement while(sommet!=-1){ if(mot[k]=='\0')return 1; chemin(matrice,mot[k],&k,redondance); } } } } return 0; }
/* set all fields in pile to zero */ static int L_init_pile(lua_State *L) { int i; CHECKARG(1); ISNUM(1); i=TONUM(1); if(i<0 || i>=piles) error("init_pile: index %d out of bounds.\n",i); initpile(i); return 0; }
void main () { typePile *pile; char expr [TAILLEMAX]; int val; char *ptexpr; typeNoeud *feuille, *noeud, *droit, *gauche; typeNoeud *racine; pile = initpile (TAILLEPILE); ptexpr = expr; printf ("Entrer une expression postfixee\n"); fgets (expr, TAILLEMAX, stdin); while (*ptexpr == ' ') ptexpr++; while ( *ptexpr != '=' && *ptexpr != '\n' ) { if (!isdigit (*ptexpr)) { droit = depiler(pile); gauche = depiler(pile); noeud = creerNoeud (*ptexpr, gauche, droit); empiler (pile, noeud); ptexpr++; } else { sscanf (ptexpr, "%d", &val); while (isdigit(*ptexpr)) ptexpr++; feuille = creerFeuille (val); empiler (pile, feuille); } while (*ptexpr == ' ') ptexpr++; } racine = depiler(pile); printf ("\nExpression infixee : \n"); infixe (racine); printf ("\n\n"); printf ("Expression prefixee : \n"); prefixe (racine); printf ("\n\n"); printf ("Valeur de l'expression : %d\n", eval (racine)); }
int main (void) { /* Declaration d'un objet pile */ typePile *pile; // VARIABLES STD char expr [TAILLEMAX]; int val; char *ptexpr; // VARIABLES DE L'ARBRE typeNoeud *feuille, *noeud, *droit, *gauche; typeNoeud *racine; // Pointe sur la racine de l'arbre // INIT PILE pile = initpile (TAILLEPILE); // POINTEUR SUR L'EXPRESSION ENTREE ptexpr = expr; // DEMANDE EXPRESSION A L'UTILISATEUR printf ("Entrer une expression postfixee\n"); fgets (expr, TAILLEMAX, stdin); //------------------------------------------------- // COMMENCER LE TRAITEMENT DE L'OPERATION POSTFIXEE //------------------------------------------------- // SAUTER LES BLANCS DU DEBUT while (*ptexpr == ' ') ptexpr++; /* L'expression se termine sur = ou \n */ while ( *ptexpr != '=' && *ptexpr != '\n' ) { if (!isdigit (*ptexpr)) { /* On a un operateur dans *ptexpr */ droit = depiler(pile); /* Depiler le fils droit */ //3 gauche = depiler(pile); /* Depiler le fils gauche */ //4 noeud = creerNoeud (*ptexpr, gauche, droit); //5 empiler (pile, noeud); /* Empiler le sous arbre */ //6 ptexpr++; } else { /* On a un operande dont la valeur est dans val */ sscanf (ptexpr, "%d", &val); while (isdigit(*ptexpr)) ptexpr++; /* Sauter les digits */ feuille = creerFeuille (val); //1 empiler (pile, feuille); /* Empiler le noeud */ //2 } while (*ptexpr == ' ') ptexpr++; /* Sauter les blancs */ } racine = depiler(pile); // La racine est le dernier ÈlÈment de la pile printf ("\nExpression infixee : \n"); infixe (racine); /* Parcours infixe de l'arbre obtenu */ printf ("\n\n"); printf ("Expression prefixee : \n"); prefixe (racine); /* Parcours prÈfixe de l'arbre obtenu */ printf ("\n\n"); printf ("Valeur de l'expression : %d\n", eval (racine)); system ("pause"); }