Académique Documents
Professionnel Documents
Culture Documents
000000000
Reportez votre numéro d’anonymat dans le cadre ci-dessous et en haut à gauche de chaque page de
l’énoncé.
A la fin de l’épreuve glissez ce cahier dans la copie double qui vous a été fournie, qui comporte
votre numéro d’anonymat et sur laquelle vous aurez écrit et masqué votre nom en rabattant dessus
et en collant la languette triangulaire. Vous ne devez rien écrire d’autre sur cette copie double.
Numéro d’anonymat :
1 s’il y en a un
2 s’il y en a
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 2 2010-03-10 23 :54 :31.000000000
Réponse à la question :
int main()
{
const int n=10000;
double x[n],y[n],d;
int i,j,nn;
for(i=0;i<n;i++){x[i]=alea(); y[i]=alea();} // ou n’importe quelle autre façon
// d’initialiser les points
for(d=0,nn=0,i=0;i<n;i++)
{
for(j=0;j<i;j++){d=d+sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); nn++;}
}
cout << "distance moyenne=" << d/nn << endl;
return 0;
}
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 3 2010-03-10 23 :54 :31.000000000
Réponse : Réponse :
1 1 1 n’importe quoi
2 1 2 n’importe quoi
Question 2 :
#include<iostream> #include<iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int x,*y; int x,*y;
x=1; y=&x; //
y=&x; x=1; //
cout << x << " " << *y << endl; cout << x << " " << *y << endl;
*y=2; *y=2;
cout << x << " " << *y << endl; cout << x << " " << *y << endl;
x=3; x=3;
cout << x << " " << *y << endl; cout << x << " " << *y << endl;
return 0; return 0;
} }
Réponse : Réponse :
1 1 1 1
2 2 2 2
3 3 3 3
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 4 2010-03-10 23 :54 :31.000000000
Question 3 :
#include<iostream> #include<iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int w=1,*x,*y; int w=1,*x,*y;
x=&w; y=x; //
y=x; x=&w; //
cout << w << " " << *x << " " << *y << endl; cout << w << " " << *x << " " << *y << endl;
*x=2; *x=2;
cout << w << " " << *x << " " << *y << endl; cout << w << " " << *x << " " << *y << endl;
return 0; return 0;
} }
Réponse : Réponse :
1 1 1 1 1 n’importe quoi
2 2 2 2 2 n’importe quoi
Question 4 :
#include<iostream> #include<iostream>
#include<stdlib.h> #include<stdlib.h>
using namespace std; using namespace std;
int main() int main()
{ {
int i; int i;
const int n=3; int n=3; //
int x[n]; int *x=(int *)malloc(n*sizeof(int)); //
int y[n]; int *y; //
for(i=0;i<n;i++) x[i]=i; for(i=0;i<n;i++) x[i]=i;
y=x; y=x;
for(i=0;i<n;i++) for(i=0;i<n;i++)
{cout << x[i] << " " << y[i] << endl;} {cout << x[i] << " " << y[i] << endl;}
return 0; return 0;
} }
Réponse : Réponse :
erreur à la compilation : 0 0
impossible d’écrire l’égalité 1 1
entre deux tableaux, cela 2 2
revient à écrire qu’une adresse
est égale à une autre adresse
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 5 2010-03-10 23 :54 :31.000000000
indice : n n′ n′′
point : A′ A C2 S1 O S2 C1 A′′ x
abscisse : (x′ ) (x) (c2 ) (s1 ) (s2 ) (c1 ) (x′′ )
(1) (2)
Le but de l’exercice est de tracer la courbe de x′′ en fonction de x pour des valeurs données des paramètres s1 , c1 ,
s2 , c2 , n, n′ et n′′ , puis de constituer la distribution statistique de x′′ à partir des erreurs statistiques commises sur
les mesures de x et des paramètres s1 , c1 , s2 , c2 (on suppose négligeables les erreurs sur n, n′ et n′′ ).
On a les relations suivantes entre les abscisses des différents points :
n′ n′′
x′ = s1 + ′ et x′′ = s2 + ′
n n−n n n′ − n′′
− −
x − s1 c1 − s1 x′ − s2 c2 − s2
Question 1 : écrire une fonction à laquelle on fournit cinq valeurs de type double dans des variables nommées u, s,
c, p, q et qui vaut :
q
s+ p p−q
−
u−s c−s
(on ne traitera pas les cas particuliers ou les dénominateurs sont nuls, ce que l’on devrait faire pour écrire un
programme propre).
Réponse à la question 1 :
double ff(double u,double s,double c,double p, double q)
{
double y;
y=p/(u-s)-(p-q)/(c-s);
return s+q/y;
}
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 6 2010-03-10 23 :54 :31.000000000
Question 2 : écrire un programme qui calcule les valeurs de x′′ correspondant à nv valeurs de x régulièrement
réparties de xmin à xmax et écrit ces valeurs dans un fichier en mettant un couple x x′′ par ligne de façon à obtenir
par exemple :
89.78 37.43
91.07 44.22
...
Des valeurs numériques à utiliser sont déjà écrites dans la réponse avec la déclaration des variables qui les contiennent.
Les autres variables devront être déclarées à la suite. On notera nv pour nv , xp pour x′ , xs pour x′′ , np pour n′ , ns
pour n′′ , etc.
Réponse à la question 2 :
int main()
{
double s1=0,c1=100,s2=20,c2=-50,n=1,np=1.4,ns=1,xmin=-500,xmax=500; // valeurs en millimètres
int i,nx=200;
double x,xp,xs,ddx;
ddx=(xmax-xmin)/(nx-1);
fstream res("dioptre_corrige_strict.res",ios::out);
for(i=0;i<nx;i++) // boucle sur les positions de l’objet
{
x=xmin+i*ddx;
xp=ff(x,s1,c1,n,np); xs=ff(xp,s2,c2,np,ns);
res << x << " " << xp << " " << xs << endl;
}
Question 3 : on suppose qu’on mesure un grand nombre de fois les cinq quantités x, s1 , c1 , s2 , c2 , chacune avec une
certaine erreur aléatoire, et qu’on calcule à chaque fois la valeur de x′′ correspondante. La valeur moyenne des valeurs
de x′′ obtenues donnera une bonne estimation de la valeur réelle inconnue de x′′ . On considère les mesures comme
des variables aléatoires distribuées uniformément dans un intervalle centré sur leurs valeurs exactes. Par exemple
le résultat d’une première mesure de x sera x + δ1 x, celui d’une seconde x + δ2 x, etc., les erreurs δi x ayant une
distribution aléatoire uniforme dans un intervalle [−d/2, d/2]. En supposant connues les valeurs exactes de x, s1 ,
c1 , s2 , c2 , compléter le programme écrit à la question 2 pour que, en simulant un grand nombre de mesures de ces
cinq quantités
p entachées d’une erreur aléatoire, il calcule la valeur moyenne et l’écart quadratique moyen de x′′ (qui
vaut < x > − < x′′ >2 , le symbole <> désignant la valeur moyenne) et constitue dans un tableau sa distribution
′′2
statistique dans l’intervalle [x′′min , x′′max ] supposé contenir la quasi-totalité des valeurs possibles de x′′ et découpé en
nt tranches égales.
Des valeurs numériques à utiliser pour x′′min et x′′max sont fournies au début de la réponse. On prend la même valeur
d=1mm pour les cinq quantités. Dans l’écriture du programme on notera nt pour nt , etc.
Réponse à la question 3 :
Ecrire ici la suite du programme commencé à la question 2
double xsmin=245,xsmax=270,d=1; // valeurs en millimètres
int ni=100000;
double dx,ds1,dc1,ds2,dc2,d=1;
double som,som2,xsmoy,sigxs,dxs; const int nt=10; int k,dist[nt];
x=-180;
dxs=(xsmax-xsmin)/nt;
for(i=0;i<nt;i++) dist[i]=0;
for(som=0,som2=0,i=1;i<=ni;i++) // boucle sur les mesures
{
dx=(alea()-0.5)*d; ds1=(alea()-0.5)*d; dc1=(alea()-0.5)*d;
ds2=(alea()-0.5)*d; dc2=(alea()-0.5)*d;
xp=ff(x+dx,s1+ds1,c1+dc1,n,np); xs=ff(xp,s2+ds2,c2+dc2,np,ns);
som+=xs; som2+=xs*xs;
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 7 2010-03-10 23 :54 :31.000000000
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 8 2010-03-10 23 :54 :31.000000000
Particule dans un champ électrostatique et un champ magnétique *** (12) [42 lignes]
On considère une enceinte carrée, de centre O et de côté 4R à l’intérieur de laquelle on distingue trois régions :
– la région (2), délimitée par le quart de cercle de centre O, de rayon R, situé dans le second cadran (x ≤ 0 et
y ≥ 0), dans laquelle est établi un champ électrostatique E ~ = E0 r0 u~r
r
– la région (3), délimitée par le quart de cercle de centre O, de rayon R, situé dans le premier cadran (x ≥ 0 et
y ≥ 0), dans laquelle est établi un champ magnétique B ~ = B0 r0 ~k
r
– la région (1), qui est la complémentaire des deux précédentes par rapport à l’enceinte et dans laquelle il n’y a
pas de champ.
~
E ~
JB
Région (2) :
~j Région (3) :
secteur électrostatique J secteur magnétique
O ~k ~i R x
v~0 θ0
× „ «
x0
P0 y0
Région (1) : complémentaire des régions (2) et (3) par rapport à l’enceinte
Question 1 : écrire une fonction à laquelle on fournit les coordonnées d’un point dans le repère (O,~i, ~j) ainsi que la
valeur du paramètre R et qui vaut :
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 9 2010-03-10 23 :54 :31.000000000
Réponse à la question 1 :
int pos(double x,double y ,double r)
{
double d2,r2=r*r,dr=2*r;
d2=x*x+y*y;
if(d2<=r2)
{
if(x<=0 && y>=0) return 2;
if(x>=0 && y>=0) return 3;
}
if(x>=-dr && x<=dr && y>=-dr && y<=dr) return 1;
return 0;
}
Une particule P , de coordonnées (x, y), de masse m et de charge q, est envoyée depuis un point P0 , de coordonnées
(x0 , y0 )3 , avec une énergie cinétique U0 , sa vitesse faisant un angle θ0 avec la normale à la face d’entrée du secteur
électrostatique. La vitesse initiale de la particule et les forces exercées par les champs E ~ et B ~ appartenant au plan
~ ~
(O, i, j), tout le mouvement s’effectue dans ce plan.
−−→
La relation fondamentale de la dynamique pour la particule s’écrit, en posant ~r = OP :
d2~r
– dans la région (1) : =0
dt2
d2~r q ~
– dans la région (2) : 2 = E
dt m
d2~r q ~
– dans la région (3) : 2 = ~v ∧ B
dt m
r
1 2U0
Le module v0 de la vitesse initiale est mv02 = U0 soit v0 = .
2 m
On choisit les produits E0 r0 et B0 r0 de telle façon que si la particule pénètre dans le secteur électrostatique en
incidence normale au rayon r elle décrit un demi-cercle de rayon r et de centre O.
Dans ces conditions on obtient pour les projections des équations du mouvement sur les axes :
dx dx dx
= vx = vx = vx
dt dt dt
dy dy dy
= vy = vy = vy
dt dt dt
dvx dvx x dvx vy
=0 = −v02 2 = v0
dt dt r dt r
dvy dvy y dvy vx
=0 = −v02 2 = −v0
dt dt r dt r
3 On suppose −R ≤ x0 ≤ 0 et y0 ≤ 0
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session
Numéro d’anonymat : 10 2010-03-10 23 :54 :31.000000000
p
avec r = x2 + y 2 .
Question 2 : écrire un programme qui calcule par la méthode d’Euler la trajectoire de la particule jusqu’à ce qu’elle
sorte de l’enceinte. Les résultats seront écrits dans un fichier en mettant un couple x y par ligne de façon à obtenir
par exemple :
-0.5 -1.5
-0.500087 -1.499
-0.500174 -1.49801
...
Des valeurs numériques à utiliser sont déjà écrites dans la réponse avec la déclaration des variables qui les contiennent.
Les autres variables devront être déclarées à la suite.
Le programme peut être écrit avec ou sans tableaux ou fonctions, l’essentiel est qu’il soit bref et clair.
Réponse à la question 2 :
int main()
{
double R=1,x0=-R/2,y0=-3*R/2,U0=3e3*1.6e-19,m=16.e-3/6.023e23,teta0=5*M_PI/180; // unités SI
int i,np=10000,zz;
double dt,x,xx,y,yy,vx,vy,r,alp,v0,r2;
v0=sqrt(2*U0/m); alp=-v0*v0;
fstream res("spectro_corrige_strict.res",ios::out);
dt=R/v0/1000;
x=x0; y=y0;
vx=v0*cos(teta0+M_PI/2); vy=v0*sin(teta0+M_PI/2);
for(i=1;i<=np;i++)
{
res << " " << x << " " << y << endl;
xx=x; yy=y; r2=x*x+y*y;
x=x+vx*dt; y=y+vy*dt;
zz=pos(xx,yy,R);
if(zz==0) break;
if(zz==2)
{
vx=vx+alp*xx/r2*dt; vy=vy+alp*yy/r2*dt;
}
else if(zz==3)
{
r=sqrt(r2);
vx=vx+v0*vy/r*dt; vy=vy-v0*vx/r*dt;
}
}
return 0;
}
Licence et Magistère 1ère année de Physique fondamentale Examen d’informatique 2009-2010 première session