TD Enonces
TD Enonces
TD Enonces
— L’éditeur emacs
1
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 1 4 octobre 2016
Rappels :
— Ouvrir le site du cours avec les énoncés des TD, les notes de cours, et plein d’autres informations utiles :
site
— Il sera utile de créer un sous-répertoire nommé TD1 (avec la commande mkdir TD1) et s’y placer (avec la commande
cd TD1) pour faire ce TD.
— Ouvrir l’éditeur emacs :
emacs prog1.cpp & ou
em prog1.cpp
— En C il y a distinction entre minuscules et majuscules.
— Pour afficher à l’écran de la façon la plus simple, placer en tête du fichier contenant le programme :
#include<iostream>
using namespace std;
et utiliser, par exemple dans le cas d’une variable k :
cout << k << endl;
— Pour compiler et exécuter en une seule commande :
ccc nom_de_fichier.cpp
(Alternativement, il faut d’abord compiler : g++ -lm nom_de_fichier.cpp puis exécuter : ./a.out)
Prévoir le résultat des quatre programmes C dont le texte est donné ci-dessous, puis écrire chacun de ces programmes
dans un fichier propre, le faire exécuter et comparer au résultat prévu. Seul le programme 1 doit être tapé intégralement.
A partir du programme 2, il suffit d’utiliser la copie de fichiers et de ne taper que ce qui doit être modifié.
2
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 1 4 octobre 2016
Mélange de types
Programme 4
#include<iostream>
using namespace std;
int main() {
cout << (2.*3)/4 << " " << 2.*(3/4) << " " << 2.*3/4 << endl;
return 0;
}
ρ(x) = exp − 2 t2
a2 1 + 4~
q
π a 1 + 4~2 t2 m2 a4
m2 a4
Prendre telles quelles les valeurs numériques suivantes qui sont exprimées dans un système d’unités (fermi, Mev) approprié
au cas d’une particule telle que l’électron :
a = 105 fm (paramètre déterminant la largeur du paquet d’ondes à t = 0 avec 1 fm= 1 Fermi= 10−15 mètre)
~ = 197 MeV.fm.c−1 (constante de Planck avec MeV = Méga électron-volt)
t = 105 fm.c−1 (instant considéré, c = vitesse de la lumière)
m = 0.5 MeV.c−2 (masse de la particule)
x = 105 fm (position à laquelle on calcule la densité de probabilité)
k0 = 5.10−4 fm−1 (paramètre déterminant la vitesse ~k0 /m du centre du paquet d’ondes)
Calculer ρ(x) dans les unités indiquées. Ne pas oublier d’utiliser des variables intermédiaires pour simplifier l’expression
finale (comme par exemple u = 2~t/(ma2 )).
Remarques
Il peut être utile de laisser des parenthèses superflues si elles rendent l’expression plus lisible.
Quelle est l’unité de ρ(x) ?
3
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 2 4 octobre 2016
Préambule :
Créer dans le répertoire initial un sous-répertoire nommé TD2 et s’y placer pour faire ce TD.
(Si vous ne l’avez pas fait la semaine dernière : créer d’abord un sous-répertoire nommé TD1 et copier dans
TD1 tous les fichiers déjà écrits pour faire le TD n◦ 1 (se reporter à la partie Linux du polycopié de TD).)
Remarques
Les limitations et diagnostics que l’on va observer ici se retrouvent sur tous les ordinateurs mais avec des
variantes selon le type de machine. Ce qui est étudié ici n’est donc valable, en détail, que pour les ordinateurs
que nous utilisons.
Pour écrire tous les programmes qui suivent utiliser au maximum la copie (de lignes dans un fichier et d’un
fichier dans un autre).
Résumer les résultats produits par les programmes proposés dans le tableau donné à la fin de ce texte de TD.
Les entiers de type int sont écrits sur 4 octets (32 bits), ceux de type long int sur 8 octets (64 bits).
Un bit est réservé au signe, les autres aux chiffres.
Pour les int ne peuvent donc être écrits que les entiers compris entre -231 =-2 147 483 648 et 231 -1=2 147 483 647 inclus.
Pour les long int ne peuvent être écrits que les entiers compris entre -263 =-9 223 372 036 854 775 808 et 263 -1=9 223
372 036 854 775 807 inclus.
Écrire le programme suivant et remarquer le résultat produit.
#include<iostream>
using namespace std;
int main() {
int m;
m = 2147483646;
cout << m << " " << m+1 << " " << m+2 << " " << m+3 << endl;
long int n;
n = 9223372036854775806;
cout << n << " " << n+1 << " " << n+2 << " " << n+3 << endl;
return 0;
}
À part cette limitation les opérations arithmétiques entre entiers sont exactes (compte tenu de ce que la division donne
la partie entière du résultat).
Pour les réels il y a également des limites et de plus, un nombre n’est en général écrit que de façon approchée, avec un
nombre de chiffres significatifs exacts limité. Lors d’une opération algébrique entre réels le résultat sera lui-même arrondi
ce qui entraîne une nouvelle approximation. Dans certains cas les erreurs peuvent s’accumuler au cours des calculs.
Les réels de type double sont écrits sur 8 octets (= 64 bits).
Pour les réels il existe aussi le type float (sur 4 octets) et le type long double (sur 16 octets) mais nous ne considérerons
4
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 2 4 octobre 2016
Rappel : 1.798e-308 est la notation informatique pour 1.798 · 10−308 . Pour les nombres sub-normaux (limites entre paren-
thèses) il n’y a pas de diagnostic, mais le nombre de chiffres significatifs exacts est moindre.
Pour les valeurs absolues inférieures à la plus petite valeur sub-normale ou supérieures à la plus grande valeur normale il
y a un diagnostic de dépassement.
Contrairement au cas des entiers il y a donc un diagnostic de dépassement pour les réels mais l’exécution se poursuit.
Ecrire et faire exécuter le programme suivant :
#include<iostream>
using namespace std;
int main() {
double x = 1.e-308, y = 1.e-10;
cout << "1.e-308 = " << x << endl;
x = x*y;
cout << "1.e-318 = " << x << endl;
x = x*y;
cout << "1.e-328 = " << x << endl;
return 0;
}
puis :
#include<iostream>
using namespace std;
int main() {
double x = 1.e308, y = 1.e10;
cout << "1.e308 = " << x << endl;
x = x*y ;
cout << "1.e318 = " << x << endl;
x = x*y ;
cout << "1.e328 = " << x << endl;
return 0;
}
et remplir les lignes correspondantes du tableau récapitulatif donné en fin d’énoncé.
5
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 2 4 octobre 2016
c) Même question pour une sphère de diamètre 1 mm, de densité 1, avec a = 1 µm.
Commentaire sur cet exercice, à lire attentivement après avoir fait les questions
2~t
Il faut calculer la quantité sans dimension u = , l’élever au carré et l’ajouter à 1. On peut utiliser indiffé-
ma2
remment les unités microscopiques introduites au TD n◦ 1 ou les unités SI. On obtient les ordres de grandeur
suivants :
u u2
Electron 2.3e+16 5.3e+32
Proton 1.2e+13 1.5e+26
Sphère 4.0e-16 1.6e-31
Il faut ensuite ajouter u2 à 1. Dans le cas de l’électron et du proton l’intervalle entre les deux nombres réels
représentables dans l’ordinateur qui encadrent la valeur de u2 est beaucoup plus grand que 1. Ajouter 1 à
u2 n’aura donc strictement aucun effet, le 1 ne sera pas pris en compte, mais cela n’entraîne qu’une erreur
négligeable. Dans le cas de la sphère, c’est l’inverse : l’intervalle entre 1 et le premier nombre représentable
qui le suit est beaucoup plus grand que u2 , qui n’est donc pas pris en compte. Le résultat du calcul indique
alors un élargissement nul, alors qu’en réalité il est extrêmement petit mais non nul. Pour le calculer il faut
faire un développement limité p
1 + u2 = 1 + u2 /2
justifié par le fait que, dans ce cas, l’erreur commise est inférieure ou égale à u4 /8, et qui indique que la
variation relative de la largeur du paquet d’onde est de l’ordre de 10−31 .
Diviser par 0
6
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 3 4 octobre 2016
3. Tests et boucles
Remarques
Certains programmes demandés ici pourront être utiles dans des TD ultérieurs en les transformant en fonc-
tions.
Un des buts des exercices suivants est de montrer que des formules équivalentes mathématiquement ne le sont
pas du point de vue de la programmation.
Pour savoir comment changer la notation des réels, obtenir le nombre de chiffres voulu lors de l’affichage d’un
réel avec la fonction cout, écrire et lire dans un fichier, consulter le chapitre du cours : Entrées, sorties,
fichiers, en C++ .
∗ ∗ ∗ Factorielle ∗ ∗ ∗
Calculer n! avec :
1. une boucle for
2. une boucle while
Jusqu’à quelle valeur de n le calcul est-il juste si on travaille en entiers de type int ? Pour répondre à cette question,
trouver une méthode pour tester si la valeur maximale d’une variable du type int est dépassée pendant les calculs.
∗ ∗ ∗ Combinaison ∗ ∗ ∗
Calculer le nombre de combinaisons de k éléments pris parmi n :
n!
Cnk =
k!(n − k)!
en utilisant la formule de récurrence :
n−i+1
Cni = Cni−1
i
Peut-on tirer profit de la propriété :
Cnk = Cnn−k ?
Ce programme permet-il de calculer le nombre de possibilités de choisir 10 élèves parmi 45 ? Et 44 parmi 45 ?
Pourquoi n’applique-t-on pas directement la formule en calculant n!, k!, (n − k)! puis n!/(k!(n − k)!) ?
∗ ∗ ∗ Pluie ∗ ∗ ∗
On considère un évènement qui a la probabilité p d’avoir lieu lors d’une épreuve. On note q = 1 − p la probabilité pour
qu’il n’ait pas lieu. La probabilité b(k) pour qu’il se produise k fois lors de n épreuves est donnée par la loi binomiale :
∗ ∗ ∗ Suite ∗ ∗ ∗
La limite de la suite :
1 A
u0 = A un+1 = (un + )
2 un
√
est A.
7
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 3 4 octobre 2016
a) Calculer ainsi une racine carrée avec une boucle for avec compteur, le nombre d’itérations étant fixé à l’avance à
nmax. On fera afficher les nombres avec le maximum de chiffres significatifs (15) en écrivant, en début de programme,
l’instruction :
cout << setprecision(15);
(setprecision nécessite la directive #include<iomanip>)
b) Ajouter une condition pour que le calcul s’arrête comme au a) ou si :
un+1 − un
| |<ε
un
ε étant fixé à l’avance.
Pour cela on pourra ajouter un break dans le for ou utiliser une boucle do ... while().
Pourrait-on utiliser une boucle while() au lieu de la boucle do ... while() ?
c) Avec les réels double combien faut-il d’itérations pour satisfaire la condition du b) lorsque A = 2 et ε=10−10 ?
d) Au vu des résultats affichés à l’écran, combien faut-il d’itérations, lorsque A = 2, pour que le résultat obtenu soit
identique avec celui donné par la fonction de la bibliothèque mathématique sqrt (inclure la directive #include<math.h>) ?
∗ ∗ ∗ Sinus ∗ ∗ ∗
1) Calculer et afficher sin x de 0◦ à 90◦ de 10◦ en 10◦ à l’aide du développement :
x3 x2n+1
sin x = x − + ... + (−1)n + ...
6 (2n + 1)!
en additionnant tous les termes de la série dont la valeur absolue est supérieure à 10−6 . Pour faire cela, il faut d’abord
déduire une formule de récurrence pour calculer le nouveau terme à partir du terme précédent, vu qu’on ne veut surtout pas
calculer x2n+1 et (2n + 1)! explicitement pour chaque terme à cause des problèmes élucidés dans les exercices précédents.
Comparer au résultat donné par la fonction sin de la bibliothèque mathématique.
2) Pour x = 20◦ par exemple, combien faut-il de termes de la série pour obtenir 6 chiffres significatifs identiques au
résultat de la fonction sin ? Même question pour 12 chiffres significatifs.
∗ ∗ ∗ Test ∗ ∗ ∗
Le test de l’égalité de deux réels peut ne pas être fiable, car la plupart des réels ne peuvent pas être écrits de manière
exacte dans l’ordinateur, le nombre de bits consacré à chacun d’eux étant fini (64 pour les doubles). Quel est le résultat
du programme suivant ?
#include<iostream>
using namespace std;
int main() {
int i;
double x;
x = -1.;
for(i = 1; i <= 10; i++)
x = x + 0.1;
if(x != 0.)
cout << "x = " << x << " le test trouve x différent de 0" << endl;
else
cout << "x = " << x << " le test trouve x égal à 0" << endl;
return 0;
}
∗ ∗ ∗ Équation du second degré ∗ ∗ ∗
Calculer les racines réelles de l’équation du second degré à coefficients réels :
ax2 + bx + c = 0
On supposera que a, b, c peuvent avoir des valeurs réelles quelconques, y compris a = b = c = 0, car s’ils sont issus d’un
calcul précédent il faut prévoir tous les cas. Le programme doit afficher la valeur d’une variable entière qui vaut :
8
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 3 4 octobre 2016
9
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 4 4 octobre 2016
4. Fonctions
Remarque
Dans tous les cas on fera afficher les données de départ et les résultats par le programme principal.
∗ ∗ ∗ Force gravitationnelle ∗ ∗ ∗
Le module de la force gravitationnelle exercée par une sphère homogène de rayon R et de masse M sur une masse
ponctuelle m située à une distance d du centre de M , vaut :
Mm M md
G pour d ≥ R et G pour d ≤ R
d2 R3
G étant la constante de la gravitation universelle.
Écrire une fonction d’arguments M , R, m et d qui retourne le module de la force.
∗ ∗ ∗ Combinaisons ∗ ∗ ∗
Transformer en fonction le programme, écrit dans un TD précédent, qui calcule le nombre de combinaisons de k éléments
choisis parmi n, ces deux paramètres étant transmis en argument à la fonction.
∗ ∗ ∗ Fonction créneau ∗ ∗ ∗
Ecrire une fonction dont l’argument est un réel x et dont la valeur est celle de la fonction créneau :
O a x
Figure 1 –
∗ ∗ ∗ Fonction de répartition ∗ ∗ ∗
1) Écrire une fonction d’arguments x et n, retournant la valeur de :
Z x
1 t2
√ exp(− ) dt
2π 0 2
10
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 4 4 octobre 2016
1. Voir la notice Graphisme avec Python Matplotlib du site de l’enseignement d’informatique L3-Mag1.
11
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 5 4 octobre 2016
5. Pointeurs
12
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 5 4 octobre 2016
∗ ∗ ∗ Dérivée ∗ ∗ ∗
Étant donné une fonction f (x), une valeur approchée de sa dérivée en x est donnée par la formule à cinq points suivante :
1
f 0 (x) = [f (x − 2∆x) − 8f (x − ∆x) + 8f (x + ∆x) − f (x + 2∆x)] (1)
12 ∆x
∆x étant une variation de x choisie par l’utilisateur.
1) Écrire une fonction à laquelle on fournit en argument :
une fonction f (x)
une valeur x0
une valeur de la variation ∆x
et dont la valeur est la valeur approchée de la dérivée en x0 calculée par la formule (1).
(Tester la précision de la formule avec la fonction arc tangente dont la dérivée est :
1
1 + x2
ou tout autre fonction au choix.)
2) Étudier la précision du résultat en fonction de la valeur de ∆x.
13
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 6 4 octobre 2016
6. Tableaux dynamiques
∗ ∗ ∗ Matrice ∗ ∗ ∗
Soit la matrice suivante :
0.1 10.31 8.7 2
2841.573 54 6.57 185.34
5.03 0.73 1065 0.07
L’utiliser pour initialiser un tableau et la faire afficher à l’écran.
∗ ∗ ∗ Remplirtab ∗ ∗ ∗
Écrire un programme qui remplit un tableau d’entiers n(10,9) de la façon suivante :
000000000 ______ second indice
100000001
200090002
300090003
400090004
500090005
600090006
700090007
800090008
999999999
|
|
|
premier indice
∗ ∗ ∗ Vecteur unitaire ∗ ∗ ∗
Les composantes d’un vecteur ~v dans un repère orthonormé à n dimensions sont définies dans un programme principal
par un tableau v à n éléments.
1) Écrire une fonction de type int qui :
si ~v n’est pas nul, vaut 1 et retourne en argument les composantes du vecteur unitaire ~u parallèle à ~v et de
même sens que lui dans un tableau u
si ~v est nul vaut 0 et retourne le vecteur nul au lieu d’un vecteur unitaire dans le tableau u.
Comment faire pour interdire à priori toute modification des valeurs de v dans la fonction ?
2) Dans le programme principal, faire deux appels successifs de la fonction avec deux vecteurs de dimensions différentes.
14
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 6 4 octobre 2016
fournie en argument.
∗ ∗ ∗ Produit de matrices ∗ ∗ ∗
Écrire une fonction à laquelle on passe en argument une matrice a à m lignes et n colonnes et une matrice b à n lignes et
p colonnes et qui retourne en argument la matrice produit.
0 30 50 55 75 105
y (indice j)
20
0 volts 1000 volts
40
0 volts 1000 volts Toute l’enceinte
est a 0 volts
60
x
Les cotes sont exprimees en prenant
(indice i) comme unite le pas du reseau
Figure 2 – Agrandir cette figure à l’écran pour bien distinguer les traits pleins des traits pointillés
Le but de l’exercice est de calculer le potentiel électrostatique V (x, y) à l’intérieur de l’enceinte, hormis sur les conducteurs.
Il s’agit de déterminer numériquement la solution unique de l’équation :
∆V = 0 entre les conducteurs
V a les valeurs imposées sur les conducteurs
On effectue le calcul de V uniquement aux points d’un réseau régulier 2 appliqué sur l’enceinte, c’est à dire en des points
tels que x = i et y = j, i et j étant des entiers nuls ou positifs. La quantité V (i, j) est notée Vi,j . Dans ces conditions la
solution est obtenue de la façon suivante :
1. pour tous les points situés sur un conducteur, y compris l’enceinte, on attribue à V la valeur du potentiel de ce
conducteur
2. pour tous les autres points de l’enceinte on attribue à V une valeur initiale nulle puis on calcule tous les Vi,j par
la formule :
Vi−1,j + Vi,j−1 + Vi+1,j + Vi,j+1
Vi,j = (moyenne arithmétique des quatre points adjacents)
4
3. on réitére l’étape 2. jusqu’à obtenir une convergence satisfaisante.
1) Écrire un programme qui calcule le potentiel pour un nombre d’itérations fixé par l’utilisateur et imprime les valeurs
finales dans un fichier sous la forme :
V0,0 V0,1 ... V0,j ... V0,105
V1,0 V1,1 ... V1,j ... V1,105
... ... ... ... ... ...
Vi,0 Vi,1 ... Vi,j ... Vi,105
... ... ... ... ... ...
V60,0 V60,1 ... V60,j ... V60,105
2. dont on choisit le pas comme unité de longueur
15
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 6 4 octobre 2016
2) Compléter le programme précédent pour que le calcul s’arrête dès que l’une des deux conditions suivantes est réalisée :
le nombre d’itérations fixé par l’utilisateur est dépassé
|Vi,j (itération n+1) − Vi,j (itération n)| ≤ ε pour chacune des valeurs de i et j hors conducteurs, ε étant choisi par
l’utilisateur.
3) Tracer la surface V (x, y) avec Python Matplotlib 3 sous forme de nappe puis sous forme de courbes de niveau.
∗ ∗ ∗ Interpolation linéaire ∗ ∗ ∗
On suppose qu’on ne connaît une fonction mathématique f (x) qu’en n points d’abscisses xi . Les valeurs des xi et les
valeurs correspondantes yi = f (xi ) de la fonction sont données dans un fichier organisé de la façon suivante :
sur la première ligne n
sur les n suivantes les couples xi yi
Les xi ne sont pas nécessairement régulièrement espacées mais sont rangées par ordre croissant. L’abscisse minimum est
donc x0 et l’abscisse maximum xn−1 .
Exemple d’un tel fichier :
8
0.2 2.5
0.35 0.198669
...
0.67 -8.472
1) Écrire un programme qui stocke les valeurs des xi dans un tableau à un indice et les valeurs des yi dans un autre
tableau à un indice, puis qui calcule la valeur interpolée linéairement de f en un point d’abscisse x quelconque comprise
entre x0 et xn−1 .
2) Transformer la partie du programme qui fait le calcul d’interpolation en une fonction dont les arguments sont n, les
xi , les yi , x et qui retourne la valeur interpolée de f (x).
∗ ∗ ∗ Trinum ∗ ∗ ∗
On donne une liste de n réels dans un tableau. Réécrire cette liste dans le même tableau par ordre croissant. On pensera
à ce que l’on fait quand on remet un jeu de cartes dans l’ordre.
La liste des réels sera fournie dans le programme par initialisation du tableau.
3. Voir la notice Graphisme avec Python Matplotlib du site de l’enseignement d’informatique L3-Mag1.
16
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 6 4 octobre 2016
f (x + h) − f (x − h)
2h
h étant le pas de dérivation numérique à choisir par l’utilisateur.
Ce champ de vecteurs est défini par une fonction du type :
17
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 7 4 octobre 2016
7. Générateur aléatoire
∗ ∗ ∗ Lancer de pièces ∗ ∗ ∗
On lance n pièces identiques de rayon r dans le fond d’une boîte carrée de côté 1. Les pièces tombent à plat et peuvent
se chevaucher. Si une des pièces heurte le bord de la boîte on ne compte pas le lancer.
Figure 3 –
On veut calculer la proportion de la surface du fond de la boîte qui est recouverte en moyenne par les pièces. Pour cela :
- simuler un lancer de pièces en tirant au hasard les coordonnées xi et yi des centres des n pièces.
- calculer la proportion de la surface recouverte par un lancer donné en tirant au hasard un très grand nombre de
points dans la boîte et en comptant la proportion de ceux qui se trouvent sur une pièce.
- répéter l’expérience un grand nombre de fois pour trouver la valeur moyenne de cette proportion.
Indiquer quelques conditions dans lesquelles on peut tester la justesse du programme.
Utiliser la fonction drand48() (nécessite la directive #include<stdlib.h>) dont la valeur varie aléatoirement, à chaque
appel, dans l’intervalle [0, 1] avec une distribution uniforme. Pour initialiser la suite des valeurs aléatoires à une valeur
qui sera différente à chaque exécution du programme (à savoir le nombre de secondes depuis le 1er janvier 1970, c’est à
dire l’heure UNIX), mettre la commande srand48(time(NULL)); au début du programme (ce qui nécessite en plus la
directive #include<time.h>).
18
L3-Mag1 Phys. fond., TD info C 16-17 n◦ 8 4 octobre 2016
8. Équations différentielles
z
S
θ m
O y
x
Figure 4 –
Un pendule simple est constitué d’une tige rigide sans masse, libre de tourner autour du point fixe S de l’axe Oz et d’une
masse m située à l’autre extrémité de la tige.
−→ −→
La position et la vitesse initiale sont contenues dans le plan yOz. On pose θ = (SO, Sm). Tracer la courbe de θ en fonction
du temps, sans faire l’approximation des petits angles :
a) par la méthode d’Euler en programmant soi-même la formule d’Euler
b) par la méthode de Runge-Kutta d’ordre 4, en utilisant la fonction rk4 4 décrite dans le cours.
Tracer sur un même graphe les deux courbes obtenues aux a) et b) et celle résultant de l’approximation des petits angles.
4. Pour pouvoir utiliser cette fonction, il suffit d’ajouter la directive #include<bibli_fonctions.h> et de compiler et exécuter avec ccc.
19
L3-Mag1 Phys. fond. 16-17 TD Info : emacs 4 octobre 2016
L’éditeur emacs
Introduction
Un éditeur de texte permet d’écrire des caractères dans un fichier à partir du clavier et de la souris.
Toutes les commandes emacs peuvent être effectuées à partir du clavier, mais seules certaines d’entre elles peuvent l’être à l’aide de
la souris, en utilisant les menus de la barre supérieure. Les commandes au clavier commencent par une des deux touches particulières
Ctrl ou Alt, suivie d’un caractère. Par exemple :
Ctrl-d signifie : maintenir la touche Ctrl enfoncée et appuyer sur la touche d (ce qui a pour effet d’effacer le caractère
situé à l’emplacement du curseur).
Alt-< signifie : maintenir la touche Alt enfoncée et appuyer sur la touche < (ce qui a pour effet de placer le curseur au
début du fichier).
Il est à noter que la combinaison spéciale Ctrl-x est toujours suivie par un deuxième caractère (avec ou sans Ctrl), tandis que la
combinaison spéciale Alt-x permet de taper le nom explicite d’une commande dans la barre de dialogue.
Dans la suite on notera C pour la touche Entrée.
Fermer
Sauver et fermer avec le même nom de fichier Ctrl-x Ctrl-c
Sauver sans fermer avec le même nom de fichier Ctrl-x Ctrl-s
Sauver sans fermer dans le fichier de nom lili (il y a demande du nom du fichier) Ctrl-x Ctrl-w lili C
Ce qu’on écrit à l’écran est stocké dans une zone de la mémoire appelée buffer et n’est pas enregistré dans un fichier tant que l’on
n’a pas sauvé d’une des trois façons précédentes. En cas d’arrêt anormal, une partie ou la totalité du contenu du buffer peut donc
être perdue. A chaque fois qu’on sauve, la version précédente est conservée dans un fichier portant le même nom suivi d’un tilde :
ici, par exemple, fich.cpp∼. Si on ferme sans sauver (dans ce cas une double confirmation est demandée) le contenu du buffer non
sauvé est conservé dans un fichier de même nom encadré de dièses : ici, par exemple, #fich.cpp# 5
5. Pour avoir accès à ce fichier dans une commande Linux il faut mettre des antislash avant les dièses : \#fich.cpp\#
20
L3-Mag1 Phys. fond. 16-17 TD Info : emacs 4 octobre 2016
Chercher
Chercher la chaîne zzz vers l’avant (l’arrière) à partir du curseur Ctrl-s (r) zzz
(puis Ctrl-s (r) pour chercher l’endroit suivant)
Chercher et remplacer avec confirmation la chaîne zzz par la chaîne yyy Alt-% zzz C yyy C
et répondre y pour remplacer, n sinon
et q pour quitter
Chercher et remplacer sans confirmation la chaîne zzz par la chaîne yyy Alt-x replace-string C zzz C yyy C
Indenter
Indenter une région d’un fichier C Alt-x indent-region C
Idem Alt-Ctrl-\
Avoir la liste des commandes dont le nom commence par la chaîne zzz (longueur qqc) Alt-x zzz Tab (touche Tabulation)
Avoir la liste de toutes les commandes Alt-x Tab
Dans la liste affichée il suffit ensuite de cliquer sur la commande désirée pour la faire s’exécuter.
Par exemple si on veut ajouter la chaîne zzz en fin de ligne, on tape :
21
L3-Mag1 Phys. fond. 16-17 TD Info : emacs 4 octobre 2016
Alt-x qu Tab
emacs affiche alors la liste de toutes les commandes commençant par qu et, dans cette liste, se trouve la commande query-replace-
regexp sur laquelle il suffit de cliquer pour que la commande s’exécute.
En cas d’erreur
Interrompre une commande en cours Ctrl-g
Annuler les derniers changements un par un Ctrl-x u ou Ctrl-_
Annuler tous les changements depuis la dernière sauvegarde Alt-x revert-buffer C
Revenir à la version initiale, avant ouverture Ctrl-x Ctrl-f fich.cpp∼ C
Ctrl-x Ctrl-w fich.cpp C
Accéder à l’aide en ligne Ctrl-h
Débloquer l’écran Ctrl-q
22
L3-Mag1 Phys. fond. 16-17 Commandes Linux 4 octobre 2016
Commandes Linux
Dans ces pages on donne une liste de commandes courantes avec le minimum d’explications dans le but d’une utilisation
simple et immédiate.
Linux distingue entre les minuscules et les majuscules.
Les fichiers sont rangés dans des répertoires répartis en arborescence.
Les commandes doivent être écrites dans la fenêtre Terminal, après l’invite, et validées par un Entrée.
Les commandes cp, rm, mv des tableaux suivants sont accompagnées d’une demande de confirmation si on leur ajoute
l’option -i. Exemple :
rm fich destruction sans confirmation
rm -i fich destruction avec confirmation.
Les commandes suivies du signe (+) ont été ajoutées, elles sont propres à l’environnement du L3/Magistère.
Ctrl-b signifie : maintenir la touche Ctrl enfoncée et appuyer sur la touche b (ne signifie pas qu’il faut taper de - entre
Ctrl et b).
23
L3-Mag1 Phys. fond. 16-17 Commandes Linux 4 octobre 2016
24
L3-Mag1 Phys. fond. 16-17 Commandes Linux 4 octobre 2016
25
L3-Mag1 Phys. fond. 16-17 Commandes Linux 4 octobre 2016
26