04cours_exos.mws

Chapitre IV

> restart;

Booléens

> x:=1;

x := 1

> x=2;

1 = 2

> evalb(x=2);

false

> x>=0;

0 <= 1

> evalb(x>=0);

true

> a:="chaîne": b:="chaine":

> evalb(a=b);

false

> evalb(Pi>0);

-Pi < 0

> evalb((u+v)^2=u^2+v^2+2*u*v);

false

> is(Pi>0);

true

> is((u+v)^2=u^2+v^2+2*u*v);

true

>

> r:=Pi/3;s:=Pi/6;

r := 1/3*Pi

s := 1/6*Pi

> not(sin(r)=cos(s));

false

> evalb((sqrt(2)/2=cos(r)) or (sqrt(2)/2=cos(s)));

false

> evalb(1/2=cos(r) or 1/2=cos(s));

true

> evalb(1/2=cos(r) and 1/2=cos(s));

false

Tables de vérité.

>

> type(Pi, realcons);

true

> type(Pi, string);

false

> type(Pi, symbol);

true

> type(Pi, positive);

false

> restart;

Contrôle

> r:=Pi/3:s:=Pi/6:

> if (cos(r)=sin(s)) then "Il y a égalité" fi;

> if (cos(r)<>sin(s)) then "Il n'y a pas égalité" fi;

>

> t:=Pi/4:

> if (cos(t)=sin(t))
then "Il y a égalité";
else "Il n'y a pas égalité"
fi;

> a:=1:b:=2:c:=4: P:=a*X^2+2*b*X+c;

P := X^2+4*X+4

> if (b^2-a*c>=0)
then P||" a des racines réelles";
else P||" a des racines complexes";
fi;

`P a des racines réelles`

> if (b^2-a*c>0)
then P||" a deux racines réelles distinctes";
elif (b^2-a*c=0)
then P||" a une racine réelle double";
else P||" a deux racines complexes distinctes";
fi;

`P a une racine réelle double`

> restart;

> jour:="lundi":

> if jour="lundi" then "Escalope de dinde et choux-fleurs"
elif jour="mardi" then "Ravioli à la sauce tomate"
elif jour="mercredi" then "Hachis parmentier et salade verte"
elif jour="jeudi" then "Steack haché frites"
elif jour="vendredi" then "Filet de sole et sauce à l'oseille"
elif jour="samedi" or jour="dimanche" then "Casino"
else "Votre jour n'existe pas"
fi;

> restart;

Boucles

> for i from 1 to 10 do [i,evalf(sqrt(i),4)] od;

[1, 1.]

[2, 1.414]

[3, 1.732]

[4, 2.]

[5, 2.236]

[6, 2.450]

[7, 2.646]

[8, 2.828]

[9, 3.]

[10, 3.162]

> k:=3;

k := 3

> for k to 5 do k! od;

1

2

6

24

120

> k;

6

> restart;

> n:=0; while n<100 do n:=n+rand(0..10)() od;

n := 0

n := 9

n := 13

n := 14

n := 18

n := 22

n := 23

n := 26

n := 34

n := 43

n := 52

n := 54

n := 56

n := 65

n := 69

n := 74

n := 84

n := 90

n := 100

> restart; n:=3;
for k while isprime(n) do n:=2^(2^k)+1 od;

n := 3

n := 5

n := 17

n := 257

n := 65537

n := 4294967297

> n=ifactor(n);

4294967297 = ``(641)*``(6700417)

>

Exercices

> restart;

Exercice IV.1

> mafactorielle:=1: for k to 100 do mafactorielle:=mafactorielle*k od:
'mafactorielle'=%;
`100!`=100!;

mafactorielle = 93326215443944152681699238856266700...
mafactorielle = 93326215443944152681699238856266700...

`100!` = 933262154439441526816992388562667004907159...
`100!` = 933262154439441526816992388562667004907159...

> restart;

Exercice IV.2

> S:=0: for k while S<1000 do S:=S+k od:
k-1;

45

> sum(i,i=1..45);

1035

> sum(i,i=1..44);

990

> restart;

Exercice IV.3

> L:=[]:
for i while nops(L)<100
do
if isprime(i) then L:=[op(L),i] fi:
od:
L;

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43...
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43...
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43...

> restart;

Exercice IV.4

> a:=2;b:=3;

a := 2

b := 3

> garage:=a:a:=b:b:=garage:'a'=a;'b'=b;

a = 3

b = 2

> restart;

Exercice IV.5

> plot(tan(x)-x,x=3*Pi/2-1..3*Pi/2-1/10);

> f:=x->tan(x)-x;

f := proc (x) options operator, arrow; tan(x)-x end...

> a:=3*Pi/2-1;b:=3*Pi/2-1/10;

a := 3/2*Pi-1

b := 3/2*Pi-1/10

Le principe est le suivant : On sait que la racine est entre a et b. On regarde le signe de l'image du milieu de [a,b], ce qui permet de localiser la racine entre a et ce milieu ou b et ce milieu. On recommence alors en remplaçant a et b par les valeurs obtenues, jusqu'à obtenir un intervalle d'amplitude plus petite que l'erreur souhaitée.

> while ((b-a)>10^(-5))
do
milieu:=(a+b)/2:
if is(f(a)*f(milieu)<0) # i.e. Si la racine est entre a et milieu
then b:=milieu:
else a:=milieu:
fi:
od:
['a','b']=[evalf(a,7),evalf(b,7)];

[a, b] = [4.493408, 4.493415]

> restart;

Exercice IV.6

> n:=496:
somme:=0: # Variable affectée de la somme des diviseurs de n
for j from 1 to n-1
do
if irem(n,j)=0 then somme:=somme+j:
fi:
od:
if (somme=n)
then ""|| n || " est parfait";
else ""|| n || " n'est pas parfait";
fi;

>

>