ANNALES II : Deuxième semestre DEUG scientifique
Par Hugo ETIEVANT
|
Programmes des Travaux Pratiques d'Informatique de deuxième semestre, première année, de DEUG Sciences mention Sciences de la matière option Physique et application, filière 3, section A, groupe 4. Vous pouvez les télécharger en cliquant sur le bouton télécharger situé à coté du nom de l'exercice.
|
Tp 1, Exercice 1 |
Thermomètre au platine |
 |
Sujet : procédure paramétrées, structures répétitives.
L'équation thermocinétique d'un thermomètre à résistance de platine est, entre
t0=0°C et tM=630°C, de la forme :
R=A0+A1t+A2t2
R désignant la résistance du fil de platine à la température Celsius t.
On donne :
A0= 2 Ohms
A1=8.12 x 10-3 Ohms/°C
A2= -1.2 x 10-6 Ohms/ °C2
On se propose de calculer les valeurs successives prises par R lorsque t varie depuis
une valeur initiale tI jusqu'à une valeur finale tF par pas de PAST.
A0, A1, A2, t0, tM
seront déclarées comme constantes du programme.
Les températures tI et tF ainsi que le pas PAST seront entrés au clavier,
à l'aide d'une procédure saisie : les valeurs tI et tF ne seront acceptées que si elles
appartiennent au donaine [t0, tM] et si tF>tI.
Les valeurs correspondantes de t et R seront affichées, au fur et à mesure des calculs, sur une même
ligne de l'écran (procédure calculaffiche). Dans cette procédure, on prévoira une pause du programme, suivie d'un
effaçage de l'écran, chaque fois que 20 valeurs consécutives de couples (t, R) auront été affichées (un couple par ligne).
Le programme principal appelera les procédures ci-dessus, puis demandera à l'utilisateur s'il veut, ou non,
recommencer avec un nouveau jeu de données (tI, tF, PAST). Répondre O ou N.
L'ensemble des instructions du programme sera répété jusqu'à ce que l'utilisateur décide d'arrêter
le programme (réponse N).
N.B. On rappelle que : a Mod b renvoie le reste de la division entière de deux entiers
a et b.
|
Tp 1, Exercice 2 |
Construction d'un menu |
 |
|
Beaucoup d'applications informatiques proposent un choix d'actions à
l'utilisateur à l'aide d'un menu. Le programme à écrire va afficher un menu, lire le choix de
l'utilisateur et réaliser l'action demandée.
Ce programme est composé d'une procédure menu qui retourne
au programme principal le choix de l'utilisateur par le biais d'un caractère, la validité de celui-ci
ayant été testée dans la procédure.
Après l'appel de la procédure menu, le programme principal va
choisir l'action à mener grace à une structure de type Case... Of... . Les actions effectuées par
le programme se limiteront à l'affichage d'un message. Par exemple, si le choix de l'utilisateur est "D", le message affiché sera
"Modification d'un élément du tableau". Après chaque action l'affichage du menu apparaît de nouveau pour que l'utilisateur
demande une nouvelle action. Lorsque le choix demandé par l'utilisateur est "A", le programme s'arrête.
La procédure menu affiche sur l'écran :
[A] - Abandon
[B] - Création du tableau
[C] - Affichage du tableau
[D] - Modification d'un élément du tableau
[E] - Ajout d'un élément à la fin du tableau
[F] - Suppression d'un élément du tableau
[G] - Insertion d'un élément dans le tableau
[H] - Recherche du plus petit élément du tableau
[I] - Recherche du plus grand élément du tableau
et demande d'entrer au clavier le choix de l'utilisateur jusqu'à ce que le choix soit compris entre 'A' et ' I '.
|
Tp 2 |
Tableau à une dimension |
 |
|
Sujet : gestion d'un menu.
Reprendre le programme précédent. Ce programme répète l'affchage du menu et selon le choix de l'utilisateur
appelle la procédure correspondante jusqu'à ce que le choix soit 'A'. L'objet de ce TP est d'écrire les procédures
paramétrées correspondant aux différents choix possibles du menu, c'est-à-dire :
une procédure creer qui demande le nombre N d'entiers que l'on désire stocker
dans le tableau et génère ces N valeurs à l'aide de la fonction Random(x). Les nombres générés
devront appartenir à l'intervalle [100, 1000[
une procédure afficher qui affiche à l'écran les N valeurs stockées dans le tableau précédées
de leur rang
une procédure modifier qui demande le rang de la valeur à mofifier et la nouvelle valeur
du nombre, puis la range dans le tableau à la place voulue
une procédure ajouter qui lit au clavier la valeur à ajouter et la range dans le tableau à la suite
des valeurs existantes
une procédure supprimer qui demande le rang de l'élément à suprrimer et effectue sa suppression
en décalant vers la gauche tous les éléments suivants
une procédure inserer qui demande le rang et la valeur de l'élément à insérer, crée une place
dans le tableau en décalant vers la droite les éléments qui suivront cette nouvelle valeur et enfin insère la valeur dans le tableau
Ces 3 dernières procédures modifient N, le nombre d'éléments du tableau.
une procédure maxi qui recherche la plus grande valeur contenue dans le tableau et en donne
son rang
une procédure mini qui recherche la plus petite valeur contenue dans le tableau et en donne
son rang
|
Tp 3 |
Décharge d'un condensateur |
 |
|
Sujet : étude de la décharge d'un condensateur dans un circuit R,L,C.
L'intensité i du courant et la charge q du condensateur étant connus à un instant t, on peut calculer
leur valeur approchée à l'instant t+Dt avec Dt
suffisament petit. En calculant de proche en proche, à intervalles de temps très petits, les valeurs de i et de q, on
aura ainsi une approche de l'évolution de la charge du condensateur au cours du temps. De l'équation (1), on peut tirer :
Ecrire un programme permettant de calculer, lors de la décharge d'un condensateur, les valeurs de la charge q
à des intervalles de temps DeltaT réguliers. Ces valeurs seront stochées dans un tableau de réels TQ. Les
valeurs ainsi stockées pourront être affichées à l'écran sur demande de l'utilisateur. Elles feront ensuite l'objet du tracé d'une courbe
en fonction du temps.
Le programme va utiliser une constante nommée N de valeur 639 pour définit le nombre de valeurs
calculées et donc la dimension du tableau et définir de même le nombre de points constituant la courbe à tracer. Une deuxième constante
doit être définie, c'est DeltaT qui représente le pas de l'étude et qui être associée à la valeur 10-7.
Les caractéristiques de l'étude sont les suivantes : L=10-3 Henrys, R=100 Ohms,
C=10-9 Farads, V0=100 Volts, q0=C.V0, i0=0 Ampères.
Elles feront l'objet d'affectation en début de programme.
Avec la procédure creertab, le programme devra calculer les N valeurs de la charge à des instants
distants de DeltaT et les stocker dans le tableau TQ. Le programme doit alors proposer à l'utilisateur l'affichage des
valeurs stockées dans TQ en activant la procédure affiche si nécessaire. C'est alors que le programme, grace
à la procédure courbe, dessinera sur l'écran l'évolution au cours du temps de la décharge du condensateur.
Pour une bonne lisibilité, le programme doit compter les sous-programmes suivants :
la fonction F qui renvoie la valeur de di/dt à un instant donné t connaissant
i et q à cet instant (formule 3).
la procédure resolution qui, à partir de valeur connue de i et q à l'instant t,
calcule et renvoie les nouvelles valeurs de i et q à l'instant t+Dt en utilisant
la fonction F et les formules 4 et 5.
la procédure creertab qui calcule à l'aide de la procédure précédente les N valeurs de q
à des instervalles de temps réguliers DeltaT, à partir des conditions initiales (t0, i0
et q0) et les range dans le tableau TQ.
la procédure affiche qui affiche les N valeurs calculées. Sur chaque ligne on doit trouver un
temps avec 8 décimales et une valeur de charge avec 9 décimales. Il faudra prévoir une pause suivie d'un effacement de l'écran
toutes les 20 lignes.
la procédure courbe qui permet le tracé de l'évolution sinusoïdale de la charge du condensateur
au cours du temps tel que l'axe des abscisses débute à zéro, qu'il coupe l'écran en deux parties égales et que l'axe des ordonnées
soit assez grand pour laisser apparaître le maximum de la courbe. Le point origine (XOrig, YOrig) se trouvera donc à l'extrême
gauche et au milieu de la verticale. Les axes seront en bleu et la courbe en jaune.
Pour plus de commodité on calcule :
XMax et YMax avec les fonctions GetMaxX et GetMaxY.
XOrig et YOrig les coordonnées de l'origine dans le système écran.
Le facteur déchelle Ech:=YMax/(2*TQ[1]). TQ[1] étant la valeur maximum du tracé.
La courbe est en réalité une succession de segments tracés avec les procédures Line
ou LineTo et dont les coordonnées aux extréminées de chaque segment dans le système écran sont :
(i,YOrig-TQ[i]*Ech) et (i+1,YOrig-TQ[i+1]*Ech).
Un commentaire sera inscrit en blanc en bas de l'écran pour indiquer les valeurs de R,L,C qui ont été
prises en compte dans le calcul. Elles seront écrites avec un format de 10 caractères et constitueront une chaîne de caractère.
Dans la partie déclarative de la procédure courbe :
Var Ch:String[10] ;
Commentaire:String[40] ;
Dans la partie exécutable de cette procédure :
Str(R:10,Ch) ;
Commentaire:='R='+Ch ;
Str(L:10,Ch) ;
Commentaire:=Commentaire+' L='+Ch ;
Str(C:10,Ch) ;
Commentaire:=Commentaire+' C='+Ch ;
OutTextXY(XMax Div 2, YMax-20, Commentaire) ;
une procédure saisie permettant de saisir les valeurs de R,L,C qui caractérisent le circuit en
indiquant à l'utilisateur les valeurs utilisées pour la première courbe.
Après l'affichage de la courbe de départ, le programme doit proposer à l'utilisateur de faire l'étude avec des valeurs
numériques nouvelles (appel de la procédure saisie). Cette proposition doit être faite jusqu'à que l'utilisateur ne désire
plus de nouvelle étude. On pourra donc observer l'influence de R, puis de L et enfin de C sur la
décharge du condensateur.
|
Tp 4 |
Algorythme de tri et de recherche |
 |
Sujet : classement par ordre alphabétique des mots réservés du langage Pascal et
recherche d'un mot.
Ecrire un programme qui permet de dire si des mots entrés au clavier appartiennent ou non à la liste des mots
réservés du Pascal.
La recherche d'un mot dans une liste est beaucoup plus rapide lorsque la liste est triée alphabétiquement. Les mots
réservés du Pascal seront, dans un permier temps, stockés dans un tableau de chaînes de caractères dans l'ordre le plus probable
d'apparition dans un programme. Ce tableau sera ensuite trié alphabétiquement. Puis les recherches de mots réservés pourront se faire
dans ce tableau trié sachant que le Pascal ne fait pas de différence entre majuscules et minuscules dans les instructions du code.
Le programme sera décomposé comme suit :
une procédure init qui initialise le tableau des mots réservés (TabMots) avec la liste suivante,
dans l'ordre et en majuscules : PROGRAM, UNIT, INTERFACE, USES, CONST, TYPE, RECORD, ARRAY, PACKED, STRING,
FILE, SET, OBJECT, LABEL, PROCEDURE, FUNCTION, VAR, IMPLEMENTATION, BEGIN, END, FOR, TO, DOWNTO, DO, IF, THEN,
ELSE, WHILE, REPEAT, UNTIL, CASE, OF, GOTO, AND, OR, NOT, XOR, DIV, MOD, IN, SHL, SHR, WITH, NIL, ASM, INLINE,
CONSTRUCTOR, DESTRUCTOR. Cette procédure enverra en plus au programme appelant la longueur du tableau
(NbMots).
une procédure tri qui trie un tableau de chaînes de caractères (TabMots) connaissant
le nombre d'éléments de ce tableau (NbMots). Pour chaque élément d'indice i du tableau (i variant de
1 à NbMots-1) on parcours le tableau en faisant varier l'indice j entre i+1 et NbMots.
Si l'élément d'indice j est plus petit que l'élément d'indice i, on permute ces deux éléments
une fonction majuscule qui renvoie une chaîne de caractères en majuscules construite à partir d'une
chaîne de caractères donnée en paramètre contenant indifféremment des minuscules ou des majuscules ou des chiffres...
une procédure affiche qui permet l'affichage du tableau avec une pause suivie d'un effaçage
à la fin de chaque page écran
une fonction existe qui renvoie un booléen pour indiquer si un mot donné en paramètre à été trouvé
ou non dans un tableau de N chaînes de caractères.
Le programme fera effectuer toutes les recherches demandées par l'utilisateur à l'aide de ces sous-programmes.
|
Tp 5 |
Algorythme itératif de calcul approché |
 |
Ecrire un programme qui calcule les solutions d'un système de n équations à
n inconnues par la méthode itérative de Gauss-Seidel.
Le système à résoudre est de la forme :
a11x1 + a12x2 + ... + a1nxn = y1
a21x1 + a22x2 + ... + a2nxn = y2
...................................................
an1x1 + an2x2 + ... + annxn = yn
On choisit arbitrairement une approximation de la solution v1, v2,... vn.
On pose u=v.
On calcule une nouvelle approximation v1, v2,... vn à l'aide
de l'expression :
On répète les étapes 2 et 3 jusqu'à ce que l'on trouve un écart suffisamment petit entre deux solutions consécutives :
maximum pour tous les i de |(ui - vi)|<=epsilon. Il est prudent de prévoir un nombre d'itérations
maximal au cas où la convergence vers les solutions est trop lente ou même ne se produit pas. Cela arrive si les valeurs absolues
des éléments diagonaux aii ne sont pas assez grandes par rapport à celle des éléments non diagonaux
aij.
Le programme comporte :
Une procédure paramétrée saisie qui permet de saisir le nombre n d'équations, les coefficients
aij et les seconds membres yi.
Une fonction max qui retourne une valeur réelle correspondant au plus grand écart entre deux solutions
successives stockées dans les deux tableaux u et v.
Le programme fera appel à la procédure saisie pour lire au clavier les valeurs de n et des
éléments des tableau a et y.
Au départ on prendra comme approximation : vi=yi / aii.
Le calcul des éléments de v sera suivi de l'affichage de ces même éléments. On déterminera alors
grace à la fonction max la valeur de l'écart maximum entre l'avant-dernière solution u et la dernière v.
Le résultat ainsi obtenu comparé à l'écart toléré epsilon ainsi qu'un test sur le nombre d'itérations déjà effectuées
permettront de décider si un nouveau calcul doit être fait.
Le résultat final sera alors affiché sous la forme des éléments du vecteur v ou d'un message d'erreur.
L'écart maximum toléré entre deux solutions consécutives (espilon=10-3) ainsi que
le nombre maximum d'itérations (nmaxit=50) seront déclarés en constantes du programme.
A la fin de chaque page-écran contenant les calculs intermédiaires, une pause sera prévue pour
permettre à l'utilisateur de lire les résultats. Le calcul reprendra après un appui sur une touche quelconque.
|
Examen de mai 1999 - M03 |
Billeterie automatique |
 |
On se propose de réaliser une version simplifiée de distributeur de billets de train.
Il saura délivrer des billets (pour une seule ligne de train), en faisant choisir au client les gares de départ et d'arrivée,
la classe (1 ou 2), la réduction (0 (plein tarif), 20 ou 50%). Il calculera le prix du billet et simulera le paiement par pièces
et le rendu de monnaie.
Les gares à déservir sont (dans l'ordre) : Lyon, Givors, Rive-de-Gier, Saint Chamond et Saint-Etienne.
Elles sont éloignées de Lyon de respectivement 20, 37, 47 et 59 km. Le nombre n de gares sera déclaré en
constante du programme.
On écrira une procédure initialisation qui initialisera un tableau des noms de gares : gares
et un tableau des distances correspondantes : distances.
On écrira une fonction arrondi qui arrondira le prix du trajet au franc supérieur.
On écrira une fonction prix qui calculera le prix du voyage selon les paramètres suivants :
Si d est la distance à parcourir, le prix en francs, en deuxième classe, plein tarif, est de : 10+0,5*d
si d<30 km, sinon de : 15+0,33*d.
En première classe, le prix est 50% plus cher.
On applique la réduction éventuelle, puis on arrondit le prix obtenu au franc supérieur à l'aide de la fonction précédente.
On écrira une fonction choix qui affiche la liste numérot&eacutée; des gares et demande
au client de choisir une gare en tapant son numéro. La fonction retourne la réponse du client après avoir vérifié sa validité.
On écrira une fonction euro qui convertit une somme de francs en euros. On rappelle
que pour cela, on divise le prix en francs par 6,55957 puis on arrondit le prix obtenu au centime d'euro le plus proche.
On écrira une procédure paiement qui encaisse le prix du voyage.
Pour cela, tant qu'il reste quelque chose à payer :
- afficher la somme restant à payer,
- demander d'introduire une pièce (valeurs autorisées : 1, 2, 5, 10, 20),
- calculer la nouvelle somme restant à payer.
A la fin, afficher les pièces à donner s'il est nécessaire de rendre la monnaie et remercier le client.
Exemple d'échange avec le client :
Reste à payer : 17 F
Vous entrez une pièce de : 20 F
Je vous rends :
- une pièce de 2 F
- une pièce de 1 F
Merci, à bientôt !
Le programme principal appellera deux fois la fonction choix (pour la gare de départ et
celle d'arrivée), puis demendera au client le pourcentage de réduction et la classe. Seules les valeurs plausibles seront acceptées.
Il calculera ensuite le prix et affichera un récapitulatif du billet . Exemple :
Vous avez demandé un billet de Lyon à Givors en 1ère classe, avec 20% de réduction.
Le prix du billet est de 21 F, soit 3,20 euros.
Il encaissera ensuite le prix en rendant la monnaie si nécessaire.
N.B. : La fonction trunc(x) prend la partie entière d'un réel x.
La fonction round(x) aussi, après avoir arrondi x à l'entier le plus proche. |
|
|