Exemple #1
0
///////////////////////////////////////////////////////////////////////////////
///  public overloaded constructor  CCarte \n
///  constructeur d'une carte d'identité poly avec plusieurs textures. Cette version
///  est utile pour le laboratoire, car on peut spécifier en première texture la texture du Recto, 
///  en deuxième le Verso... pour la troisième, la normal map de perlin, on ne pourra pas la spécifier
///  ici, car elle ne sera pas lue à partir du disque, mais bien construite de façon procédurale
///  dans le programme... donc on devra la construire manuellement.
///
///  @param [in, out]  nomsFichiersTextures std::vector<char*> *    Le vecteur contenant la liste des noms de fichiers. Cette liste est copiée, alors l'appelant peut en disposer.
///  @param [in]       largeur float    largeur de la carte
///  @param [in]       hauteur float    hauteur de la carte
///  @param [in]       nbColonnes int   nombre de colonnes du maillage
///  @param [in]       nbRangees int    nombre de rangées du maillage
///  @param [in]       echelle float [=1.000000]    mise à l'échelle qui sera appliquée automatique (glScale)
///
///  @return Aucune
///
///  @author Frédéric Plourde 
///  @date   2008-02-20
///
///////////////////////////////////////////////////////////////////////////////
CCarte::CCarte(std::vector<char*> *nomsFichiersTextures, float largeur, float hauteur, int nbColonnes, int nbRangees, float echelle): 
CModele3DAbstrait(echelle, nomsFichiersTextures, TYPE_TEXTURE2D, true)
{
   // initialisations...
   largeur_ = largeur;
   hauteur_ = hauteur;
   nbColonnes_ = nbColonnes;
   nbRangees_ = nbRangees;

   // il est nécessaire d'appeler "construire" ici pour créer la liste d'affichage
   // et les textures associées
   construire(&dessiner, &appliquerTextures, false);
}
/*!
 *\brief Construction tableau de noms de fichiers
 *
 * Cette fonction a pour but de construire un tableau des nom des fichiers de nom qui est T_nom
 * dans notre cas a partir d'un tableau de chaine qui contient que des chiffres
 * exemple si on a t[1]="123" et t[2]="004", le reslutat de T_nom sera :
 * '\n'T_nom[1]="cent"
 * '\n'T_nom[1]="vingt"
 * '\n'T_nom[1]="trois"
 * '\n'T_nom[1]="vide"      ici on separe les chaine par un vide(silence)
 * '\n'T_nom[1]="zero"
 * '\n'T_nom[1]="zero"
 * '\n'T_nom[1]="quatre"
 *
 * \param char **t: tableau de chaîne de caractères contenant
 * \param int nbet: le nombre d'éléments du tableau t
 * \param int *nbe : le nombre d'éléments du tableau T_Nom
 * \param char **T_Nom tableau de chaîne de caractères à remplir par les chemins vers les enregistreemnts des fichiers audio
 *
 *\ingroup analyse
 */
void analyse_syntaxique(int int_voix, char **t, int nbet, int *nbe, char **T_Nom)
{

	char *voix;

	if (int_voix == 0) {
		voix = "feminin";
	} else if (int_voix == 1) {
		voix = "masculin";
	}

	int longueur;
	int k,milier,cent,dizaine,unite,nb_elem;
	int oups=0;

	nb_elem=0;

	/* pour chaque element du tableau t c-a-d on va traiter chacune des chaines de caracteres
	 *
	 */
	for (k=0;k<nbet;k++)
	{ oups=0;

		longueur=strlen(t[k]);/* on clacule la longueur de la chaine courante da la case du tableau t*/

		/*
		 * si lachaine est le caractere + on la met directement dans le tableau T_nom
		 */
		if (strcmp(t[k],"+")==0)
		{
			T_Nom[nb_elem]="plus";
			T_Nom[nb_elem+1] ="vide";
			nb_elem = nb_elem+2;

		}

		/* si non on appel la fonction construire qui nous donne les miliers,centaines
		 * dizaine et unites
		 */


		else
		{


			construire(t[k],longueur,&milier,&cent,&dizaine,&unite);


			/* selon la valeur de miliers on remplie le tableau de nom
			 * exemple si on a milier=0 on met la chaine "zero" dans le tableau T_nom
			 * 		  si on a milier=1 on met la chaine "un" puis la chaine "mille" dans le tableau T_nom
			 * 		  si on a milier=2 on met la chaine "deux" puis la chaine "mille" dans le tableau T_nom
			 *         etc.... jusqu a 9
			 */
			switch(milier)
			{

				case 0: {
					T_Nom[nb_elem]="zero";
					//ecriture_case (voix, T_Nom, nb_elem, "zero");
					nb_elem++;
					break;
				}
				case 1: { T_Nom[nb_elem]="mille";
					//ecriture_case (voix, T_Nom, nb_elem, "mille");
					nb_elem++;
					break;
				}
				case 2: { T_Nom[nb_elem]="deux";
					//ecriture_case (voix, T_Nom, nb_elem, "deux");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 3: { T_Nom[nb_elem]="trois";
					//ecriture_case (voix, T_Nom, nb_elem, "trois");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 4: { T_Nom[nb_elem]="quatre";
					//ecriture_case (voix, T_Nom, nb_elem, "quatre");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 5: { T_Nom[nb_elem]="cinq";
					//ecriture_case (voix, T_Nom, nb_elem, "cinq");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 6: { T_Nom[nb_elem]="si";
					//ecriture_case (voix, T_Nom, nb_elem, "six");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 7: { T_Nom[nb_elem]="sept";
					//ecriture_case (voix, T_Nom, nb_elem, "sept");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 8: { T_Nom[nb_elem]="hui";
					//ecriture_case (voix, T_Nom, nb_elem, "hui");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
				case 9: { T_Nom[nb_elem]="neuf";
					//ecriture_case (voix, T_Nom, nb_elem, "neuf");
					T_Nom[nb_elem+1]="mille";
					//ecriture_case (voix, T_Nom, nb_elem+1, "mille");
					nb_elem=nb_elem+2;
					break;
				}
			}

			// cas_millier(milier,&nb_elem,&T_Nom);

			/* on traite les centaines ds la meme maniere que les milliers */
			switch(cent)
			{
				case 0: {
					/* dans le cas si centaine est 0 on doit verifier si les miliers est 0 ou n'esxiste pas
					 * pourqu on remplie le tableau T_Nom par zero si non on fait rien
					 * exemple si la chaine est 0001 dans ce cas on doit lire le zero du centaine
					 * par contre si la chaine est 1001 on fait rien pour les centaines
					 */
					if (((milier==0) || (milier==-1)))
					{
						T_Nom[nb_elem]="zero";
						nb_elem++;
					}
					break;
				}
				case 1: { T_Nom[nb_elem]="cent";
					//ecriture_case (voix, T_Nom, nb_elem, "cent");
					nb_elem++;
					break;
				}
				case 2: { T_Nom[nb_elem]="deux";
					//ecriture_case (voix, T_Nom, nb_elem, "deux");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 3: { T_Nom[nb_elem]="trois";
					//ecriture_case (voix, T_Nom, nb_elem, "trois");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 4: { T_Nom[nb_elem]="quatre";
					//ecriture_case (voix, T_Nom, nb_elem, "quatre");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 5: { T_Nom[nb_elem]="cinq";
					//ecriture_case (voix, T_Nom, nb_elem, "cinq");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 6: { T_Nom[nb_elem]="si";
					//ecriture_case (voix, T_Nom, nb_elem, "six");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 7: { T_Nom[nb_elem]="sept";
					//ecriture_case (voix, T_Nom, nb_elem, "sept");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 8: { T_Nom[nb_elem]="hui";
					//ecriture_case (voix, T_Nom, nb_elem, "hui");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
				case 9: { T_Nom[nb_elem]="neuf";
					//ecriture_case (voix, T_Nom, nb_elem, "neuf");
					T_Nom[nb_elem+1]="cent";
					//ecriture_case (voix, T_Nom, nb_elem+1, "cent");
					nb_elem=nb_elem+2;
					break;
				}
			}



			/*
			 *
			 */

			switch(dizaine)
			{
				case 0: {


					/* Pareil comme le cas des centaine si dizaine est 0 et pour mettre "Zero" dans le tableau T_Nom
					 * il faut que les miliers et les centaines soient 0 ou n'existent pas
					 */

					if (((milier==0) || (milier==-1)) &&((cent==0)||(cent==-1)))
					{
						T_Nom[nb_elem]="zero";
						nb_elem++;
					}
					break;
				}
				case 1: { 	/* si dizaine =1 alros on doit siganler aux unite que le 1 devient onze,le 2 devien douze .....
							 donc j utilise la varialble booleene oups que je le mets a 1 dans ce cas */
					oups=1;

					break;
				}
				case 2: {     	/* si dizaine =2 on a trois cas a etudier
								 1- si unite =0 alors on doit doit dire vingt
								 2- si unite =1 alors on doit dire vingt teh un
								 3- si non alors on doit ditre vingtt (deux,trois .......)
								 */

					if (unite==0)
					{T_Nom[nb_elem]="vingt";
						//ecriture_case (voix, T_Nom, nb_elem, "vingt");
						nb_elem++;
					}
					else
					{if (unite==1)
					{T_Nom[nb_elem]="vingtt";
						//ecriture_case (voix, T_Nom, nb_elem, "vingt");
						T_Nom[nb_elem+1]="eh";
						//ecriture_case (voix, T_Nom, nb_elem+1, "teh");
						nb_elem=nb_elem+2;
					}

					else
					{T_Nom[nb_elem]="vingtt";
						//ecriture_case (voix, T_Nom, nb_elem, "vingtt");
						nb_elem++;
					}
					}
					break;
				}
				case 3: {      /*si dizaine =3 on a deux cas a etudier
								1-si unite =1 alors on doit dire trente eh un
								2-si non alors on doit dire trente (deux,trois .......)
								*/
					T_Nom[nb_elem]="trente";
					//ecriture_case (voix, T_Nom, nb_elem, "trente");

					if (unite==1)
					{T_Nom[nb_elem+1]="eh";
						//ecriture_case (voix, T_Nom, nb_elem+1, "eh");
						nb_elem++;
					}
					nb_elem++;
					break;
				}
				case 4: {
					/* si dizaine =4 on a deux cas a etudier
					 1- si unite =1 alors on doit dire quarante eh un
					 2- si non alors on doit dire quarante (deux,trois .......)
					 */
					T_Nom[nb_elem]="quarante";
					//ecriture_case (voix, T_Nom, nb_elem, "quarante");
					if (unite==1)
					{T_Nom[nb_elem+1]="eh";
						//ecriture_case (voix, T_Nom, nb_elem+1, "eh");
						nb_elem++;
					}
					nb_elem++;
					break;
				}

				case 5: {	/* si dizaine =5 on a deux cas a etudier
							 1- si unite =1 alors on doit dire cinquante eh un
							 2- si non alors on doit dire cinquante (deux,trois .......)
							 */
					T_Nom[nb_elem]="cinquante";
					//ecriture_case (voix, T_Nom, nb_elem, "cinquante");

					if (unite==1)
					{T_Nom[nb_elem+1]="eh";
						//ecriture_case (voix, T_Nom, nb_elem, "eh");
						nb_elem++;
					}
					nb_elem++;
					break;
				}
				case 6: {
					/* si dizaine =6 on a deux cas a etudier
					 1- si unite =1 alors on doit dire soixante eh un
					 2- si non alors on doit dire soixante (deux,trois .......)
					 */
					T_Nom[nb_elem]="soixante";
					//ecriture_case (voix, T_Nom, nb_elem, "soixante");

					if (unite==1)
					{T_Nom[nb_elem+1]="eh";
						//ecriture_case (voix, T_Nom, nb_elem+1, "eh");
						nb_elem++;
					}
					nb_elem++;
					break;
				}
				case 7: {
					/*
					 si dizaine =7 on a deux cas a etudier
					 1- si unite =1 alors on doit dire soixante eh onze
					 2- si non alors on doit dire soixante (douze,trize .......)
					 */
					T_Nom[nb_elem]="soixante";
					//ecriture_case (voix, T_Nom, nb_elem, "soixante");

					if (unite==1)
					{T_Nom[nb_elem+1]="eh";
						//ecriture_case (voix, T_Nom, nb_elem+1, "eh");
						nb_elem++;
					}
					nb_elem++;
					/* oups est une variable booleene qui indique au unite de faire
					 * attention dans le cas de 7 et neuf les unite seront plus un,deux trois
					 * ca devient onze douze trize ,,,,,
					 */
					oups=1;
					break;
				}
				case 8: {
					/* si dizaine =8 on doit remplir deux case du tableau par les deux elements quatree et vingt
					 ici on doit faire la difference entre quatre et quatree
					 */
					T_Nom[nb_elem]="quatree";
					T_Nom[nb_elem+1]="vingt";
					nb_elem=nb_elem+2;
					break;
				}
				case 9: { 	/* si dizaine =9 on le traite de la meme maniere de 8 mais en plus de mettre la variable boolen a 1
							 pour traiter les unites differement
							 */
					T_Nom[nb_elem]="quatree";
					T_Nom[nb_elem+1]="vingt";
					nb_elem=nb_elem+2;
					oups=1;
					break;
				}
			}


			switch(unite)
			{

				/* Pareil comme le cas des dizaine si unité est 0 et pour mettre "Zero" dans le tableau T_Nom il faut que les milliers et 					 *les centaines et dizaine soient 0 ou n'existent pas
				 */
				case 0: { if (((milier==0) || (milier==-1)) &&((cent==0)||(cent==-1)) &&  ((dizaine==0)||(dizaine==-1)))
				{
					T_Nom[nb_elem]="zero";
					nb_elem++;
				}
					if (oups==1)
					{T_Nom[nb_elem]="dix";
						//ecriture_case (voix, T_Nom, nb_elem, "dix");
						nb_elem++;
					}
					break;
				}

				/*si unite=1 on a deux cas ou bien on ajoute "un" ou "onze" dans le tableau de t_nom
				on ajoute "onze" dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "un" dans le tableau de t_nom
				*/
				case 1: { if (oups==1)
				{T_Nom[nb_elem]="onze";
					//ecriture_case (voix, T_Nom, nb_elem, "onze");
					nb_elem++;
				}
				else
				{T_Nom[nb_elem]="un";
					//ecriture_case (voix, T_Nom, nb_elem, "un");
					nb_elem++;
				}
					break;
				}

				/*si unité=2 on a deux cas ou bien on ajoute "deux" ou "douze" dans le tableau de t_nom
				on ajoute "douze" dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "deux" dans le tableau de t_nom
				*/
				case 2: {
					if (oups==1)
					{T_Nom[nb_elem]="douze";
						//ecriture_case (voix, T_Nom, nb_elem, "douze");
						nb_elem++;
					}
					else
					{T_Nom[nb_elem]="deux";
						//ecriture_case (voix, T_Nom, nb_elem, "deux");
						nb_elem++;
					}
					break;
				}

				/*si unité=3 on a deux cas ou bien on ajoute "trois" ou "treize" dans le tableau de t_nom
				 *on ajoute "treize" dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "trois" dans le tableau de t_nom
    				*/
				case 3: {
					if (oups==1)
					{T_Nom[nb_elem]="treize";
						//ecriture_case (voix, T_Nom, nb_elem, "treize");
						nb_elem++;
					}
					else
					{T_Nom[nb_elem]="trois";
						//ecriture_case (voix, T_Nom, nb_elem, "trois");
						nb_elem++;
					}
					break;
				}

				/*si unité=4 on a deux cas ou bien on ajoute "quatre" ou "quatorze" dans le tableau de t_nom
				on ajoute "quatorze" dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "quatre" dans le tableau de t_nom
				*/
				case 4: {
					if (oups==1)
					{T_Nom[nb_elem]="quatorze";
						//ecriture_case (voix, T_Nom, nb_elem, "quatorze");
						nb_elem++;
					}
					else
					{T_Nom[nb_elem]="quatre";
						//ecriture_case (voix, T_Nom, nb_elem, "quatre");
						nb_elem++;
					}
					break;
				}

				/*si unité=5 on a deux cas ou bien on ajoute "cinq" ou "quinze" dans le tableau de t_nom
				*on ajoute "quinze" dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "cinq" dans le tableau de t_nom*/
				case 5: {
					if (oups==1)
					{T_Nom[nb_elem]="quinze";
						//ecriture_case (voix, T_Nom, nb_elem, "quinze");
						nb_elem++;
					}
					else
					{T_Nom[nb_elem]="cinq";
						//ecriture_case (voix, T_Nom, nb_elem, "cinq");
						nb_elem++;
					}
					break;
				}

				/*si unité=6 on a deux cas ou bien on ajoute "six" ou "seize" dans le tableau de t_nom
				*on ajoute "seize" dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "six" dans le tableau de t_nom
				*/
				case 6: {
					if (oups==1)
					{T_Nom[nb_elem]="seize";
						//ecriture_case (voix, T_Nom, nb_elem, "seize");
						nb_elem++;
					}
					else
					{T_Nom[nb_elem]="six";
						//ecriture_case (voix, T_Nom, nb_elem, "six");
						nb_elem++;
					}
					break;
				}

				/*si unité=7 on a deux cas ou bien on ajoute "sept" ou ("di" et "sept") dans le tableau de t_nom
				 *on ajoute ("di" et "sept")  dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "sept" dans le tableau de t_nom
				*/
				case 7: { if (oups==1)
				{T_Nom[nb_elem]="di";
					//ecriture_case (voix, T_Nom, nb_elem, "di");
					nb_elem++;
				}
					T_Nom[nb_elem]="sept";
					//ecriture_case (voix, T_Nom, nb_elem, "sept");
					nb_elem++;

					break;
				}

				/*si unité=8 on a deux cas ou bien on ajoute "huit" ou ("diz" et "huit") dans le tableau de t_nom
				on ajoute ("diz" et "huit")  dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "huit" dans le tableau de t_nom
				*/
				case 8: {
					if (oups==1)
					{T_Nom[nb_elem]="diz";
						//ecriture_case (voix, T_Nom, nb_elem, "diz");
						nb_elem++;
					}
					T_Nom[nb_elem]="huit";
					//ecriture_case (voix, T_Nom, nb_elem, "huit");
					nb_elem++;
					break;
				}

				/*si unité=9 on a deux cas ou bien on ajoute "neuf" ou ("diz" et "neuf") dans le tableau de t_nom
  				on ajoute ("diz" et "neuf")  dans le cas dizaine=1,7 ou 9 c-a-d oups=1 sinon on ajoute "neuf" dans le tableau de t_nom
				*/

				case 9: {
					if (oups==1)

					{T_Nom[nb_elem]="diz";
						//ecriture_case (voix, T_Nom, nb_elem, "diz");
						nb_elem++;
					}
					T_Nom[nb_elem]="neuf";
					nb_elem++;

					break;
				}
			}
		/*les vide dans le t_nom sert a séparer les chaines*/
			T_Nom[nb_elem]="vide";
			nb_elem++;
		}
	}
	*nbe=nb_elem;


	ecriture_case(voix, T_Nom, nb_elem);

}
Exemple #3
0
Arbin Re(Arbin n){
  if(jeton=='+'){
    printf("Re->+TRe\n");
    AVANCER
    return construire('+',n,Re(T()));
  }