{ ---------------------------------------------------------------------------------------------- } { UE 10 Modelisation systemes biologiques & ecologiques } { Programme de oalcul des individus selon une loi exponentielle } {et par intégrations numériques. } {P. Coquillard } { ---------------------------------------------------------------------------------------------- } PROGRAM POULE_2; uses Crt, Graph, Graph2D; {Declaration des Unites } var {Declaration des variables } X, Y, {abscisse et ordonnee } pas, K : real; {pas de calcul et taux de croissance } { ---------------------------------------------------------------------------------------------- } { Saisie } { enseigne par le clavier la variable pas de temps } { NB : La vidéo est toujours en mode texte... } { ---------------------------------------------------------------------------------------------- } Procedure Saisie; begin clrscr; {effacer l'ecran} Write(' Entrez une valeur pour le pas de temps : '); readln(pas); end; { ---------------------------------------------------------------------------------------------- } {Initialise } {initialise quelques variables globales } { ---------------------------------------------------------------------------------------------- } Procedure Initialise; begin X:= 0; Y:= 10; end; { ---------------------------------------------------------------------------------------------- } {ModeGraphique } {assure le passage en mode graphique 640 x 480 pixels } { ---------------------------------------------------------------------------------------------- } Procedure ModeGraphique; Begin EcranGraphique; {Passage en mode graphique} Fenetre (0, 7 , 0, 1000); {Choix de la fenetre de l'univers} Cloture (100, 600, 100, 400); {Choix de la cloture de 1‘ecran} Axes; {Trace des axes} End; { ---------------------------------------------------------------------------------------------- } {Euler } {Fonction de calcul par integration numérique } {renvoie un entier en sortie } { ---------------------------------------------------------------------------------------------- } Procedure Euler; var deltay : real; {L'incrément par génération} begin DeplaceEn(0,10); repeat X := X + pas; {Calculs...} deltay := y * K * pas; Y := Y + deltay; tracevers(X,round(Y)); until (X > 7); end; { ---------------------------------------------------------------------------------------------- } {Euler_ameliore } {calcul par integration numérique } { ---------------------------------------------------------------------------------------------- } Procedure euler_ameliore; Var delta_y, delta_yprim, delta_yseconde, y_prim : real; begin DeplaceEn(0,10); repeat X := X + pas; delta_yprim := K * Y * pas; y_prim := Y + delta_yprim; delta_yseconde := K * y_prim * pas; delta_y := (delta_yprim + delta_yseconde)/2; Y := Y + delta_y; TraceVers(X,Y); until (x > 7); end; { ---------------------------------------------------------------------------------------------- } { Runge_K4 } { Fonction de calcul par integration numérique 1 j } { ---------------------------------------------------------------------------------------------- } Procedure Runge_K4; var N1,N2,N3,N4, deltay :real; begin DeplaceEn(0,10); repeat N1 := K * Y * pas; deltay := Y + (N1/2); N2 := K * deltay * pas; deltay := Y + (N2/2); N3 := K * deltay * pas; deltay := Y + N3; N4 := K * deltay * pas; deltay := (N1 + (2*N2) + (2*N3) + N4) / 6; Y := Y + deltay; X := X + pas; TraceVers(X,Y); until (X > 7); end; { ---------------------------------------------------------------------------------------------- } {Exponentielle } { Calcul exact au moyen du modele analytique } { ---------------------------------------------------------------------------------------------- } Procedure Exponentielle; begin Y := 10 * exp(K * X); DeplaceEn(X,Y); repeat X := X + 0.1; Y := 10 * exp (K * X); Tracevers (X,Y); until (X > 7); end; { ---------------------------------------------------------------------------------------------- } { LE PRINCIPAL DU PROGRAMME } { ---------------------------------------------------------------------------------------------- } BEGIN K := 0.44 * 3; {le taux de croissance} Saisie; {choix du pas de temps} ModeGraphique; { Change de mode d'affichage} Setcolor(red); Initialise; { Initialisation des variables} Exponentielle; Setcolor(green); Initialise; Euler; Setcolor(blue); Initialise; Euler_Ameliore; Setcolor(yellow); Initialise; Runge_K4; repeat until KeyPressed; { Boucle pour contempler indefiniment...} EcranTexte; { Retour en mode texte avant de quitter } END.