{********************************************************* programme qui montre le fonctionnement de la MAP prise en exemple dans didapage. vendredi 20 avril 2007 ecrit en turbo pascal 7.0 Borland telechargeable gratuitement sur http://turbo-pascal.developpez.com/ **********************************************************} program MAP; uses crt; {pour utiliser une interface d'affichage DOS mais pour que cela marche sur une machine rapide, il faut installer un crt patch, sinon on a un message d'erreur } {vous pouvez vous passer de ce patch, mais il faut alors supprimer les deux lignes ou l'instruction clrscr figure; clrscr efface l'ecran} var c : char ; {caractere qui controle la boucle } {tableau des coefficients des polynomes } var tab_coeff_poly : array[0..2,0..8] of integer; {entrees et sorties au temps t et t+1 de la MAP} var entree_t,sortie_t,entree_t_1,sortie_t_1 : integer ; {coefficients du polynome de la boite externe} var a_boite_externe, b_boite_externe, c_boite_externe : integer ; {compteur du nombre de points de la trajectoire } var compteur : integer ; {colonnes des coefficients des polynomes definis par i/o au temps t et t+1 } var colonne_t, colonne_tplus1 : integer; {coefficients des polynomes definis par i/o au temps t et t+1} var a_t,b_t,c_t,a_tplus1,b_tplus1,c_tplus1 : integer ; {initialisation du tableau des coefficients des polynomes} procedure fait_tab_coeff_poly ; begin tab_coeff_poly[0,0] := 2 ; tab_coeff_poly[0,1] := 1 ; tab_coeff_poly[0,2] := 2 ; tab_coeff_poly[1,0] := 2 ; tab_coeff_poly[1,1] := 0 ; tab_coeff_poly[1,2] := 0 ; tab_coeff_poly[2,0] := 2 ; tab_coeff_poly[2,1] := 2 ; tab_coeff_poly[2,2] := 0 ; tab_coeff_poly[0,3] := 1 ; tab_coeff_poly[0,4] := 2 ; tab_coeff_poly[0,5] := 0 ; tab_coeff_poly[1,3] := 0 ; tab_coeff_poly[1,4] := 1 ; tab_coeff_poly[1,5] := 0 ; tab_coeff_poly[2,3] := 2 ; tab_coeff_poly[2,4] := 1 ; tab_coeff_poly[2,5] := 1 ; tab_coeff_poly[0,6] := 0 ; tab_coeff_poly[0,7] := 0 ; tab_coeff_poly[0,8] := 0 ; tab_coeff_poly[1,6] := 1 ; tab_coeff_poly[1,7] := 0 ; tab_coeff_poly[1,8] := 2 ; tab_coeff_poly[2,6] := 1 ; tab_coeff_poly[2,7] := 2 ; tab_coeff_poly[2,8] := 1 ; end; {*********** ecrit le tableau des coefficients des polynomes *****} procedure print_tab_coeff_poly ; var i,j : integer; begin for i:=0 to 2 do begin writeln(' '); for j:=0 to 8 do begin write(' ', tab_coeff_poly[i,j]); end; end; writeln; writeln; end; {**************************************************************** calcule la sortie de la boite externe a partir de son entree ***} function boite_externe (entree : integer) :integer; begin boite_externe := (a_boite_externe * entree * entree + b_Boite_externe * entree + c_boite_externe) mod 3 ; end ; {************************************************************* calcule le numero de la colonne du tableau des coefficients des polynomes} function fait_colonne (entree, sortie :integer) : integer; begin fait_colonne := 3 * entree + sortie ; end ; {** polynome a partir des coefficients de la colonne du tableau des coefficients des ploynomes et de l'entree calcule la sortie *} function polynome (entree, colonne : integer) : integer; var coeff_a, coeff_b, coeff_c : integer; begin coeff_a := tab_coeff_poly [0,colonne]; coeff_b := tab_coeff_poly [1,colonne]; coeff_c := tab_coeff_poly [2,colonne]; polynome:= (coeff_a * entree * entree + coeff_b * entree + coeff_c) mod 3; end; {******** debut du programme principal *************************} begin clrscr; randomize; writeln ('*****************************************************'); writeln; writeln (' INITIALISATION DE LA MAP'); writeln; writeln (' Tableau initial des coefficients des polynomes'); fait_tab_coeff_poly ; print_tab_coeff_poly ; entree_t_1 := 2; sortie_t_1 := 0; writeln (' entree_t_1 = ', entree_t_1, ' sortie_t_1 = ', sortie_t_1); writeln ; a_boite_externe := 2; b_boite_externe := 1; c_boite_externe := 1; writeln (' a_boite_externe = ',a_boite_externe); writeln (' b_boite_externe = ',b_boite_externe); writeln (' c_boite_externe = ',c_boite_externe); writeln ; compteur := 0; {calcul du prochain point de la trajectoire de la MAP} c := 'a'; while c <> 'n' do begin writeln ('*****************************************************'); writeln; writeln (' CALCUL DU POINT SUIVANT DE LA MAP'); writeln ; writeln (' taper n''importe quelle touche et retour '); writeln (' ou sur la touche ''n'' et retour pour arreter'); writeln; writeln (' point numero : ',compteur); writeln; writeln (' tableau des coefficients des polynomes'); print_tab_coeff_poly ; writeln ; writeln (' entree_t_1 = ', entree_t_1, ' sortie_t_1 = ', sortie_t_1); writeln ; colonne_t := fait_colonne ( entree_t_1 , sortie_t_1) ; writeln (' colonne_t = ',colonne_t); writeln; entree_t := boite_externe (sortie_t_1); a_t := tab_coeff_poly [0,colonne_t]; b_t := tab_coeff_poly [1,colonne_t]; c_t := tab_coeff_poly [2,colonne_t]; sortie_t := polynome(entree_t,colonne_t); writeln (' entree_t = ', entree_t, ' sortie_t = ', sortie_t); writeln; colonne_tplus1 := fait_colonne ( entree_t, sortie_t) ; writeln (' colonne_tplus1 = ',colonne_tplus1); a_tplus1 := tab_coeff_poly [0,colonne_tplus1]; b_tplus1 := tab_coeff_poly [1,colonne_tplus1]; c_tplus1 := tab_coeff_poly [2,colonne_tplus1]; tab_coeff_poly [0,colonne_t] := (a_t + a_tplus1) mod 3 ; tab_coeff_poly [1,colonne_t] := (b_t + b_tplus1) mod 3 ; tab_coeff_poly [2,colonne_t] := (c_t + c_tplus1) mod 3 ; writeln (' tableau des coefficients des polynomes modifie'); writeln (' c''est la colonne numero ',colonne_t, ' qui a ete reecrite'); print_tab_coeff_poly ; {********** report des valeurs ******************} entree_t_1 := entree_t; sortie_t_1 := sortie_t; writeln ; compteur := 1 + compteur; readln(c); clrscr; end; end.