/*********************************************** Fichier exemple didapage MAP modulo 3.cpp Le mardi 12 avril 2007 code source compilable avec le C++ Borland version 4.5 ************************************************/ #include #include #include #include #define modulo 3 #define NB_LIGNE modulo #define NB_COLONNE (modulo * modulo) short int ** tab_coeff_poly; short int entree_t_1,sortie_t_1,entree_t,sortie_t ; int a_boite_externe, b_boite_externe, c_boite_externe; int colonne,colonneplus1; int a_t,b_t,c_t,a_tplus1,b_tplus1, c_tplus1; int compteur_boucle = 0 ; typedef int T_FONC (int x, int colonne); /* les coefficients du polynome de MAP sont un vecteur colonne du tableau des coefficients des polynomes */ T_FONC polynome { int resultat; resultat= (tab_coeff_poly[0][colonne]*x*x + tab_coeff_poly[1][colonne]*x + tab_coeff_poly[2][colonne])% modulo; return resultat; } /* le polynome de la boite externe */ int boite_externe (int entree) { int sortie ; sortie = (a_boite_externe * entree * entree + b_boite_externe * entree + c_boite_externe) % modulo; return (sortie); } /* initialisation du tableau des coefficients des polynomes */ void initialise_tab_coeff_poly (short int ** tab){ tab[0][0]=2;tab[0][1]=1;tab[0][2]=2;tab[0][3]=1;tab[0][4]=2;tab[0][5]=0; tab[1][0]=2;tab[1][1]=0;tab[1][2]=0;tab[1][3]=0;tab[1][4]=1;tab[1][5]=0; tab[2][0]=2;tab[2][1]=2;tab[2][2]=0;tab[2][3]=2;tab[2][4]=1;tab[2][5]=1; tab[0][6]=0;tab[0][7]=0;tab[0][8]=0; tab[1][6]=1;tab[1][7]=0;tab[1][8]=2; tab[2][6]=1;tab[2][7]=2;tab[2][8]=1; return; } /* affichage du tableau */ void print_tab_coeff_poly (short int ** tab){ short int i,j; for(i=0;i ",entree_t_1, sortie_t_1 ); printf (" colonne = %d \n ", colonne); /* l'entree de la boite externe est sortie_t_1 la sortie de la boite externe est entree_t */ entree_t = boite_externe (sortie_t_1); /* l'colonne est le numero de colonne du tableau ou l'on va chercher les coefficients du polynome du polynome au temps t */ sortie_t = polynome (entree_t, colonne); /* premier argument entree, deuxieme colonne */ printf ("entree_t = %d, sortie_t = %d -> ",entree_t, sortie_t ); colonneplus1 = fait_colonne (entree_t, sortie_t) ; printf (" colonne = %d \n ", colonneplus1); /* coefficients du polynome n */ a_t = tab_coeff_poly [0][colonne]; b_t = tab_coeff_poly [1][colonne]; c_t = tab_coeff_poly [2][colonne]; printf ("coefficients du polynome t (colonne %d): %d, %d, %d \n",colonne, a_t, b_t, c_t); /* coefficients du polynome n+1 */ a_tplus1 = tab_coeff_poly [0][colonneplus1]; b_tplus1 = tab_coeff_poly [1][colonneplus1]; c_tplus1 = tab_coeff_poly [2][colonneplus1]; printf (" coefficients du polynome correspondant a la colonne %d : %d, %d, %d \n",colonneplus1, a_tplus1, b_tplus1, c_tplus1); /* calcul du nouveau tableau des coefficients de polynome */ a_t = (a_t + a_tplus1) % modulo; b_t = (b_t + b_tplus1) % modulo; c_t = (c_t + c_tplus1) % modulo; tab_coeff_poly [0][colonne]=a_t; tab_coeff_poly [1][colonne]=b_t; tab_coeff_poly [2][colonne]=c_t; printf (" nouveau tableau des coefficients des polynomes -> \n "); printf ("ecriture de (coeff poly t) + (coeff poly colonne %d) = %d %d %d a la colonne %d \n",colonneplus1,a_t,b_t,c_t,colonne); print_tab_coeff_poly(tab_coeff_poly); /* report des valeurs pour le point suivant dela SPM */ entree_t_1 = entree_t; sortie_t_1 = sortie_t; c = getch(); } printf ("\n -------------------- fin de la boucle ---------------------------- \n"); return 0; }