Vous êtes sur la page 1sur 3

TPs FORTRAN

Exercice 1 On se propose de rsoudre le systme suivant en (x,y) : rl = alx + b1y r2 = a2x + b2y Demander l'utilisateur les valeurs des ri, ai et bi pour i variant de 1 2 et les lire. Dterminer les solutions du systme Afficher les solutions lcran Exercice 2 Ecrire un programme permettant limpression des n premires lignes du triangle de Pascal avec allocation dynamique du triangle. Exercice 3 crire un programme qui, partir d'une date exprime sous la forme jour mois anne, calcule le nombre de jours couls depuis le dbut de l'anne jusqu' la date prcise. Exemple : Le programme appel avec la date 01 03 1996 produira l'affichage suivant : Nombre de jours couls entre le dbut de 1996 et cette date : 61 (rsultat de : 31+29+1). Exercice 4 Ecrire un programme qui lit une chane de caractres et qui permet de calculer et dafficher le nombre de fois quon trouve chaque caractre constituant cette chane de caractres (un caractre dont on a dj affich le nombre de fois dapparition ne doit pas tre affich une deuxime fois). Exemple : si on lit la chane de caractres apostrophes, le programme doit afficher : Le caractre a apparait 1 fois dans apostrophes Le caractre p apparait 2 fois dans apostrophes Le caractre o apparait 2 fois dans apostrophes Le caractre s apparait 2 fois dans apostrophes Le caractre t apparait 1 fois dans apostrophes Le caractre r apparait 1 fois dans apostrophes Le caractre h apparait 1 fois dans apostrophes Le caractre e apparait 1 fois dans apostrophes Exercice 5 Ecrire un programme qui calcule la moyenne et la variance dune quantit de donnes. Le nombre dlments tre lus dans un tableau X dynamique de rels est n. le programme doit utiliser une procdure externe pour calculer la moyenne et la variance, donnes par : n mean = x(i ) / n i =1 n 2 variance = ( x(i ) mean ) / (n 1) i =1
1

Exercice 6 On se propose de rechercher le zro de la fonction f(x)=x3-3x2-3x-37 sur lintervalle [0,7] par la mthode de dichotomie. La mthode de dichotomie est dcrite par les tapes suivantes : 1. On recherche dans un premier temps a et b>a tels que f(a)f(b)<0 ; cette premire tape consiste donc encadrer la solution cherche, 2. On choisit un point c entre a et b (le milieu du segment), puis on calcule f(c), 3. Si f(a)f(c)<0 la solution est entre a et c, sinon elle est entre c et b, si f(c)=0 la solution est trouve, 4. On remplace donc lintervalle [a,b] par [a,c] ou [c,b] suivant le cas et on itre le processus jusqu convergence. On arrte le calcul lorsque f(c)=0 ou bien lorsque la longueur de lintervalle qui encadre la solution est infrieure epsilon donn. En prenant comme intervalle de dpart lintervalle [0,7] et epsilon=10-12, crire un programme qui recherche la solution de f(x)=0 pour la fonction donne ci-dessus. Votre programme devra, chaque itration, afficher sur une mme ligne : le numro de litration, la valeur des deux bornes de lintervalle [a,b], la longueur de lintervalle, la valeur de la solution c et la valeur f(c). Exercice 7 Faire un programme qui calcule lintgrale de la fonction f(x)=ax2+bx+c sur un intervalle [x0,x1] (a, b, c, x0 et x1 des rels donns) par la mthode des trapzes de deux faons : a : en spcifiant lavance le nombre n (assez grand) des sous intervalles =(x1x0)/n sur lesquels on calcul la surface du trapze tel que

x0

x1

b : au lieu de choisir un petit intervalle juste priori, on se propose de calculer le optimum par ce qui suit : on prend au dpart 1=[x0,x1] et on calcule lintgrale S1 de la fonction f(x), on prend ensuite 2 qui vaut la moiti de 1 et on recalcule lintgrale S2 de la fonction f(x). si |S2 S1| > epsilon (valeur fixe au dpart exemple : 10-5 ) on se dit quavec 2 on a plus de prcision et on continue subdiviser lintervalle, cest dire on prend 3 qui vaut la moiti de 2 , on calcule S3 lintgrale de la fonction f(x) et on compare S3 avec S2. On arrte le calcul lorsque |Sn Sn-1| < epsilon (subdiviser encore lintervalle napporte plus de prcision et ne fait que augmenter le temps de calcul). Lintgrale de la fonction f(x) vaut ds lors Sn .

Exercice 8 Crer une procdure somprod gnrique qui permet de calculer la somme, le produit des lments positifs et ventuellement le nombre d'lments nuls (paramtre optionnel) d'un vecteur d'entiers ou de rels. Ecrire un programme qui permet de tester cette procdure gnrique avec des vecteurs dentiers et des vecteurs de rels en calculant parfois le nombre dlments nuls. Exercice 9 Ecrire un programme qui fait appel une fonction somme_int pour faire la somme de tout les entiers entre un min et un max. Le min et le max doivent tre des argument optionnels. Par dfaut, on prendra le min=1 et le max=10. on fera les appels suivants : Somme_int() ; somme_int(min=3,max=8) ;somme_int(min=5) ; some_int(max=7). Faire les vrifications ncessaires. Exercice 10 Soit M est une matrice carre de taille n*n o n est une constante entire. 1. crire une fonction symetrique(M) qui retourne la valeur TRUE si la matrice M passe en paramtre est symtrique, FALSE sinon (on rappelle que la matrice (Mij)ij=1,n est symtrique si M(i,j)=M(j,i) i,j=1,n. ) 2. crire une fonction sommeTriSup(M) qui retourne la somme des lments de la partie triangulaire suprieure de la matrice M, 3. crire une procdure pointsCols(M) qui affiche les points-cols de la matrice M. On appelle points-cols les lments d'une matrice qui sont la fois un maximum sur leur ligne et un minimum sur leur colonne. La procdure affichera les positions et les valeurs de tous les points-cols trouvs. Vous pourrez supposer que tous les lments des matrices sont distincts. Exemple : dans la matrice 1 2 3 A= 4 5 6 7 8 9 l'lment A(1,3)=3 est un point-col. 4. crire un programme qui fait la saisie dune matrice A carre et qui fait appel et test les units ci-dessus. Exercice 11 Crer un module qui dfinit un type POINT par deux rels x et y et un type SEGMENT dfinit par deux points A et B. Crer une fonction qui calcule la longueur dun segment, surdfinir loprateur ( + ) pour que lopration S1 + S2 donne la longueur totale des deux segments S1 et S2, et surdfinir loprateur ( > ) pour que la comparaison S1 > S2 retourne un boolen en comparant leur deux longueurs respectives. Ecrire un programme qui utilise ce module, qui fait la saisie de deux segments, affiche leurs longueurs respectives et test la surdfinition S1 + S2, et la comparaison S1 > S2.