Algorithmes pour les travaux dirigés de Fortran – Second semestre Lionel GUEZ 3 octobre 2016 Algorithme 1 prime_stat, premier niveau Déclarations : tableau entier prime(n_primes) tableau logique sieve(2 :n) ! vrai pour un nombre premier Instructions : entrer(n) remplir sieve prime = {i ∈ {2, . . . , n}, sieve(i) est vrai} écrire(n_primes) si n_primes ≤ 30 alors écrire(prime) fin si écrire((prime(n_primes) - prime(1)) / (n_primes - 1)) pour i = 1 à n_primes - 1 faire écrire(prime(i + 1) - prime(i)) fin pour 1 Algorithme 2 prime_stat, second niveau Déclarations : tableau entier prime(n_primes) tableau logique sieve(2 :n) ! vrai pour un nombre premier Instructions : entrer(n) ! Crible d’Ératosthène : sieve = vrai √ pour i = 2 à E( n) faire si sieve(i) alors sieve(i2 :n :i) = faux fin si fin pour prime = {i ∈ {2, . . . , n}, sieve(i) est vrai} écrire(n_primes) si n_primes ≤ 30 alors écrire(prime) fin si écrire((prime(n_primes) - prime(1)) / (n_primes - 1)) pour i = 1 à n_primes - 1 faire écrire(prime(i + 1) - prime(i)) fin pour Algorithme 3 population_2 Déclarations : tableau entier department(n_dep) tableau entier census(n_dep, 2) ! census( :, 1) pour 1999 et census( :, 2) pour 1990 Instructions : entrer(department, census) pour i = 1 à n_dep faire si |census(i, 1) / census(i, 2) - 1| ≥ 5 % alors écrire(department(i)) fin si fin pour entrer(my_dep) si my_dep ≤ 95 alors i = my_dep sinon i = my_dep - 871 fin si écrire(census(i, 1) / census(i, 2) - 1) pour j = 1 à 2 faire écrire(1 + nombre d’éléments de census( :, j) strictement supérieurs à census(i, j)) fin pour 2 Algorithme 4 tropical_temp entrer(Z(1), p, T ) pour i = 2 à n faire (i) Z(i) = Z(i − 1) + gR0 T (i−1)+T ln p(i−1) 2 p(i) fin pour θ = T (p/pref )κ pour i = 2 à n - 1 faire (i) θ(i+1)−θ(i−1) Sp (i) = − Tθ(i) p(i+1)−p(i−1) fin pour écrire(Z, θ, Sp ) Algorithme 5 Attractor entrer(n, x, y) pour i = 1 à n faire x_prev = x x = b y + f(x_prev) y = - x_prev + f(x) écrire(x, y) fin pour Algorithme 6 Age_in_days : algorithme principal Déclarations : entier year, month, d, h, mn, s ! date réel jd1, jd2, r Instructions : entrer (year, month, d, h, mn, s) ! date de naissance jd1 = julian_date(year, month, d, hour_with_fraction(h, mn, s)) year, month, d, h, mn, s = date courante jd2 = julian_date(year, month, d, hour_with_fraction(h, mn, s)) r = jd2 - jd1 d = E(r) r = (r - d) * 24 ! en h h = E(r) r = (r - h) * 60 ! en mn mn = E(r) s = E((r - mn) * 60) écrire (d, h, mn, s) 3 Algorithme 7 Age_in_days : fonction julian_date Déclarations : fonction julian_date(year, month, day, hour) réel juliandate données entier year, month, day réel donnée hour entier a, y, m Instructions : a = ... y = ... m = ... julian_date = (day + . . .- 32045) + (h - 12) / 24 Algorithme 8 Age_in_days : fonction hour_with_fraction Déclarations : fonction hour_with_fraction(h, mn, s) réel hour_with_fraction données entier h, mn, s Instructions : hour_with_fraction = h + (mn + s / 60) / 60 4