• Aucun résultat trouvé

1 Premiers contacts

N/A
N/A
Protected

Academic year: 2022

Partager "1 Premiers contacts"

Copied!
18
0
0

Texte intégral

(1)

1 Premiers contacts

Implantation

Entrée [3]: 

Entrée [4]: 

Entrée [5]: 

Entrée [6]: 

Out[4]:

[ 0 0 1/2 2 0 -2 -1 0 0 0]

[ 0 0 -2 -1 2 -2 0 0 0 0]

[ 0 0 0 0 -2 1 0 0 1/2 0]

[ 0 0 0 0 0 0 1 -1 0 1/2]

[ 0 0 0 0 1 2 -1 2 0 0]

[ 1 0 0 0 -1 0 -2 0 0 0]

[ -1 0 -2 0 0 0 0 0 0 2]

[ 0 1 0 0 -1 0 1 -1 0 0]

[ -1 0 1 0 -2 0 0 0 0 0]

[ 2 -2 0 0 0 0 0 0 0 1]

Out[6]:

Une matrice carrée de taille 6 sur l'anneau Integer Ring kk = QQ

n = 10

matrix.random(kk,n,n,density=.4) #sparse=true

class MatriceCarree(object):

def __init__(self,anneau,taille):

self._anneau = anneau self._taille = taille def nrows(self):

return self._taille def ncols(self):

return self._taille def base_ring(self):

return self._anneau def __repr__(self):

return "Une matrice carrée de taille %s sur l'anneau %s"%(self.nrows(), self.base_r

matcar = MatriceCarree(ZZ,6); matcar

(2)

class MatriceDense(MatriceCarree):

def __init__(self,anneau,mat):

self._taille = mat.nrows() self._anneau = anneau

self._mat = matrix(anneau,mat) def __repr__(self):

return "Une matrice dense de taille %s sur l'anneau %s"%(self.nrows(),self.base_rin def mat(self):

return self._mat def is_sparse(self):

return false def columns(self):

return self.mat().columns() def __getitem__(self,l):

return self.mat()[l]

def __add__(M, N):

S = Matrix(M.ncols(), M.ncols(), M.base_ring().zero()) if N in M.base_ring():

for i in range(0, M.ncols()):

for j in range(0, M.ncols()):

S[i, j] = M[i, j] + N return S

for i in range(0, M.ncols()):

for j in range(0, M.ncols()):

S[i, j] = M[i, j] + N[i, j]

return MatriceDense(M.base_ring(), S) def __mul__(M, N):

P = Matrix(M.ncols(),M.ncols(),M.base_ring().zero()) if N in M.base_ring():

for i in range(0,M.ncols()):

for j in range(0, M.ncols()):

P[i, j] = N * M[i, j]

return P

for i in range(0,M.ncols()):

for j in range(0,M.ncols()):

P[i,j] = sum(M[i, k] * N[k, j] for k in range(0,M.ncols())) return MatriceDense(M.base_ring(), P)

(3)

Entrée [9]: 

Entrée [10]: 

Out[9]:

Une matrice creuse de taille 10 sur l'anneau Rational Field

Out[10]:

(Rational Field, (1/2, -2), True) class MatriceCreuse(MatriceCarree):

def __init__(self,anneau,size,row,col,val):

assert size >= max(row)+1 assert size >= max(col)+1 assert len(row) == len(col) assert len(row) == len(val) assert len(col) == len(val) #assert is_sorted(row) #assert is_sorted(col) self._taille = int(size) self._row = vector(ZZ, row) self._col = vector(ZZ, col) self._val = vector(anneau, val) self._anneau = anneau

def __repr__(self):

return "Une matrice creuse de taille %s sur l'anneau %s"%(self.nrows(),self.base_ri def ligne(self):

return self._row def colonne(self):

return self._col def coef(self):

return self._val def is_sparse(self):

return true

def mul_vec(M,v): #M creuse, pas v ;v vecteur ligne, renovie M * v^T w = [M.base_ring().zero() for i in range(0,len(v))]

for i in range(0,len(M.ligne())):

w[M.ligne()[i]] = w[M.ligne()[i]] + M.coef()[i] * v[M.colonne()[i]]

return w

def __mul__(M,N): #M creuse, pas N

return MatriceDense(M.base_ring(),matrix(M.base_ring(), [M.mul_vec(v) for v in N.c

macreuse = MatriceCreuse(kk,10,[1,2],[6,8],[1/2,-2]); macreuse

macreuse.base_ring(),macreuse.coef(),macreuse.is_sparse()

(4)

Entrée [12]: 

Entrée [13]: 

Entrée [14]: 

Out[11]:

(

Une matrice dense de taille 2 sur l'anneau Rational Field, False, 4, [2 4] [2 3]

[6 8], [4 5]

)

Out[14]:

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 1/2 0 0 0]

[ 0 0 0 0 0 0 0 0 -2 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

madense = MatriceDense(kk,matrix([[1,2],[3,4]])); madense,madense.is_sparse(),madense[1,1],

def random_creuse(anneau,taille,phicoef): # phicoef < 2/3 row = []

col = []

val = []

P = [1-phicoef,phicoef] # 1 avec proba phicoef

X = GeneralDiscreteDistribution(P) # X est une v.a. sur {0, 1} de loi P(X=0) = 1 - phic for i in range(0,taille):

for j in range(0,taille):

if X.get_random_element() == 1:

row.append(i) col.append(j)

val.append(anneau.random_element())

return MatriceCreuse(anneau,taille,row,col,val) # à modifier en [row, col, val, taille]

def creuse_a_pleine(M):

res = matrix(M.base_ring(),M.nrows(),M.nrows(),M.base_ring().zero()) for i in range(0, len(M.ligne())):

res[M.ligne()[i],M.colonne()[i]] = M.coef()[i]

return MatriceDense(M.base_ring(),res)

creuse_a_pleine(macreuse).mat()

(5)

Entrée [16]: 

Entrée [17]: 

Out[15]:

[ 0 0 0 11/2 -9/2 -1 1 0 -8 -1 0 -1/2 2 0 0]

[ 3 0 -2 -1 2 1 5 -111/4 0 -1/2 -3/

2 1/6 -3/4 1/3 0]

[ 0 -1/14 1/12 1/3 0 0 0 -1 0 0 0 0 -3 1/2 2]

[ 0 -6 -1 -1/13 0 -1 0 -1/3 -1/4 1/2 -1/

3 2 0 -1/2 1]

[ 0 0 1/5 0 1 -1/29 -4 -3 1/3 0 0 1/3 0 -26 3]

[ -2/7 1 0 0 -1 0 -1/2 1 0 1 0 1/3 -1 0 11]

[ 0 -1 -1 0 0 0 0 -35 1/21 -1 0 1/36 2 1/7 1]

[ 1 -5 -1/11 0 -1 1 -1/6 -1 12/5 -1 - 1 0 2 0 1/3]

[ 0 0 0 1 0 0 1/2 0 -1 0 0 0 -1 0 0]

[ 1 -2 0 15 0 1 -1/158 -1/2 1/3 0 - 2 24 0 0 -2]

[ 0 1/9 10/3 0 0 -1/2 0 0 -5/2 0 3 0 7 -169/2 -6]

[ -1/3 0 -3/5 1 1 0 2 7 1/2 -1/2 -1/

5 0 -2/9 -3 5]

[ 73 2 0 -1/9 0 0 1 3/2 -2 0 0 0 1 0 5/2]

[ 0 0 0 0 0 1 0 1 1 0 1 0 0 0 -1/19]

[ 0 1 0 -7/13 0 0 -1 0 0 3/4 0 0 -2 -1 0]

Out[17]:

Une matrice creuse de taille 2 sur l'anneau Integer Ring creuse_a_pleine(random_creuse(QQ,15,.7)).mat()

def pleine_a_creuse(M):

row = []

col = []

val = []

for i in range(0,M.nrows()):

for j in range(0,M.ncols()):

if M[i,j] <> M.base_ring().zero():

row.append(i) col.append(j) val.append(M[i,j])

return MatriceCreuse(M.base_ring(),M.nrows(),row,col,val)

pleine_a_creuse(matrix([[0,1],[3,5]]))

(6)

Opérations

Entrée [19]: 

Entrée [20]: 

Entrée [21]: 

Comparaisons

Entrée [22]: 

Entrée [23]: 

Out[18]:

Une matrice dense de taille 2 sur l'anneau Integer Ring

Out[19]:

[0, 7/2, -18, 0, 0, 0, 0, 0, 0, 0]

Out[20]:

Une matrice dense de taille 10 sur l'anneau Rational Field

Out[21]:

Une matrice dense de taille 10 sur l'anneau Rational Field creuse_a_pleine(_)

macreuse.mul_vec(list(1..macreuse.nrows()))

macreuse*creuse_a_pleine(macreuse)

macreuse*matrix.identity(macreuse.nrows())

k = GF(17); n = 50; density=.01;

M = random_creuse(k,n,density) N = matrix.random(k,n,n)

Mdense = creuse_a_pleine(M) Mdense_sage = Mdense.mat()

Mcreuse_sage = Mdense_sage.sparse_matrix()

(7)

Entrée [25]: 

Entrée [26]: 

Entrée [27]: 

Exponentiation

Entrée [28]: 

CPU times: user 31 ms, sys: 0 ns, total: 31 ms Wall time: 44.4 ms

Out[24]:

Une matrice dense de taille 50 sur l'anneau Finite Field of size 17

CPU times: user 687 ms, sys: 172 ms, total: 859 ms Wall time: 1.02 s

Out[25]:

Une matrice dense de taille 50 sur l'anneau Finite Field of size 17

CPU times: user 0 ns, sys: 16 ms, total: 16 ms Wall time: 4.18 ms

Out[26]:

50 x 50 dense matrix over Finite Field of size 17 (use the '.str()' method t o see the entries)

CPU times: user 32 ms, sys: 0 ns, total: 32 ms Wall time: 122 ms

Out[27]:

50 x 50 dense matrix over Finite Field of size 17 (use the '.str()' method t o see the entries)

time M*N

time Mdense*N

time Mdense_sage*N

time Mcreuse_sage*N

def expo_naif(M,n):

if n == 0:

return identity_matrix(M.base_ring(), M.nrows()) else:

return M * expo_naif(M,n-1)

(8)

Entrée [30]: 

Entrée [31]: 

Entrée [32]: 

Entrée [33]: 

CPU times: user 453 ms, sys: 94 ms, total: 547 ms Wall time: 629 ms

Out[32]:

Une matrice dense de taille 50 sur l'anneau Finite Field of size 7

CPU times: user 3.52 s, sys: 437 ms, total: 3.95 s Wall time: 7.39 s

Out[33]:

Une matrice dense de taille 50 sur l'anneau Finite Field of size 7 def expo_rap(M,n):

if n == 0:

return identity_matrix(M.base_ring(), M.nrows()) else:

N = expo_rap(M, n // 2) N = N * N

if n % 2 == 0:

return N return M * N

def expo(M,n):

if M.is_sparse():

return expo_naif(M,n) return expo_rap(M,n)

M = random_creuse(GF(7), 50, 1/100) Mdense = creuse_a_pleine(M)

Mdense_sage = Mdense.mat()

Mcreuse_sage = Mdense_sage.sparse_matrix() # .sparse_matrix() convertie en une matrice creu n = 30

Mcreusesage = matrix.random(GF(7), 100, density=.07, sparse=true)

time expo_naif(M,n)

time expo_rap(M,n)

(9)

Entrée [35]: 

Entrée [36]: 

Entrée [37]: 

CPU times: user 5.92 s, sys: 797 ms, total: 6.72 s Wall time: 10 s

Out[34]:

Une matrice dense de taille 50 sur l'anneau Finite Field of size 7

CPU times: user 15 ms, sys: 0 ns, total: 15 ms Wall time: 13.1 ms

Out[35]:

50 x 50 dense matrix over Finite Field of size 7 (use the '.str()' method to see the entries)

CPU times: user 16 ms, sys: 0 ns, total: 16 ms Wall time: 5.91 ms

Out[36]:

50 x 50 dense matrix over Finite Field of size 7 (use the '.str()' method to see the entries)

CPU times: user 0 ns, sys: 0 ns, total: 0 ns Wall time: 9.35 ms

Out[37]:

50 x 50 dense matrix over Finite Field of size 7 (use the '.str()' method to see the entries)

time expo_rap(Mdense,n)

time expo_naif(Mdense_sage,n)

time expo_rap(Mdense_sage,n)

time Mdense_sage^n

(10)

Entrée [39]: 

Entrée [40]: 

2 Méthode de la puissance

Entrée [45]: 

3 Suites récurrentes linéaires

Entrée [46]: 

CPU times: user 203 ms, sys: 16 ms, total: 219 ms Wall time: 252 ms

Out[38]:

50 x 50 dense matrix over Finite Field of size 7 (use the '.str()' method to see the entries)

CPU times: user 15 ms, sys: 0 ns, total: 15 ms Wall time: 33.7 ms

Out[39]:

50 x 50 dense matrix over Finite Field of size 7 (use the '.str()' method to see the entries)

CPU times: user 0 ns, sys: 31 ms, total: 31 ms Wall time: 5.04 ms

Out[40]:

50 x 50 sparse matrix over Finite Field of size 7 (use the '.str()' method t o see the entries)

time expo_naif(Mcreuse_sage,n)

time expo_rap(Mcreuse_sage,n)

time Mcreuse_sage^n

#MnR = MatrixAlgebras()

K = QQ

(11)

Entrée [49]: 

Entrée [50]: 

Entrée [51]: 

Entrée [52]: 

Entrée [53]: 

Out[49]:

[X - 1, 0]

Out[50]:

[X^2 + X + 1, 0]

Out[51]:

[X, 2]

Out[52]:

[X^2 - X - 1, 3*X + 3]

Out[53]:

(X^2 - X - 1, 3*X + 3)

def division(A, B): # A, B sont dans KX ; renvoie [quotient, reste]

if B == KX.zero():

raise ValueError, "le quotient est nul"

if B.degree() > A.degree(): # le degré du polynôme nul est -1 return [KX.zero(), A]

Qloc = A.leading_coefficient() / B.leading_coefficient() * X^(A.degree() - B.degree()) respart = division(A - Qloc * B, B)

return [Qloc + respart[0], respart[1]]

division(X^2 - 1, X+1)

division(X^3-1,X-1)

division(X^2 + X + 2,X+1)

division(X^4+1,X^2+X+2)

(X^4+1).quo_rem(X^2+X+2)

(12)

Entrée [55]: 

Entrée [56]: 

Entrée [57]: 

Entrée [58]: 

Out[55]:

X^2 + 1

Out[56]:

X^2 + 1

def euclide(A, B): # A, B dans KX non tous nuls ; renvoie le pgcd unitaire de A et B via l' R0 = A

R1 = B

while R1 <> KX.zero():

R = R0 R0 = R1

R1 = division(R, R1)[1]

return R0 / R0.leading_coefficient()

euclide(X^4-1,X^3+X)

gcd(X^4-1,X^3+X)

def euclide_etendu_restr(A, m): # on fait l'algo d'Euclide à A et X^2m, mais on s'arrête dè R0 = A

R1 = X^(2*m) U0 = KX.one() U1 = KX.zero() V0 = KX.zero() V1 = KX.one() # U0 A + V0 B = R0 while R1.degree() >= m:

d = division(R0, R1) R0 = R1

R1 = d[1]

U = U0 V = V0 U0 = U1 V0 = V1

U1 = U - U0 * d[0]

V1 = V - V0 * d[0]

return U1

euclide_etendu_restr(X^2-X-1,2)

(13)

4 Inverse d'une matrice creuse

Entrée [60]: 

Entrée [61]: 

Entrée [62]: 

Entrée [63]: 

Out[59]:

(1, 3*X^3 - 2*X^2 + X - 1, -3*X + 5)

Out[62]:

[1 2]

[0 1]

Out[63]:

[ 1 -2]

[ 0 1]

xgcd(X^2 - X -1,X^4)

K = QQ

def pol_ann_en_inv(P, M): #P annulateur de M, renvoie M^-1 puiss = P.exponents()

if puiss[0] <> 0:

raise ValueError, "le polynôme ne possède pas de terme constant"

coeff = P.coefficients() #mode creux, comme puiss

# on doit renvoyer -sum(expo(M, puiss[i] - 1) * coeff[i] for i in range(1,len(coeff))) puissM = matrix.identity(M.base_ring(), M.nrows())

res = matrix.zero(M.base_ring(), M.nrows()) puiss[0] = 1

for i in range(1, len(puiss)):

for j in range(puiss[i-1], puiss[i]):

puissM = M * puissM

# puissM est maintenant M^(puiss[i] - 1) res = puissM * coeff[i] + res

return res * (-1 / coeff[0])

mamat = matrix([[1,2],[0,1]]); mamat

pol_ann_en_inv(X^2-2*X+1,mamat)

(14)

Entrée [65]: 

Entrée [69]: 

Entrée [70]: 

Entrée [71]: 

Entrée [72]: 

Out[64]:

[ 1 -2]

[ 0 1]

Out[65]:

[ 1 -2]

[ 0 1]

Out[69]:

[ 1 0 1 -2]

[-1 0 0 -1]

[ 0 -1 -1 -1]

[ 0 2 0 0]

Out[70]:

[ 1/4 -3/4 1/4 1/8]

[ 0 0 0 1/2]

[ 1/4 1/4 -3/4 -3/8]

[-1/4 -1/4 -1/4 -1/8]

Out[71]:

[1 0 0 0]

[0 1 0 0]

[0 0 1 0]

[0 0 0 1]

pol_ann_en_inv(X^2 - 2*X + 1,MatriceDense(QQ,mamat))

pol_ann_en_inv(X^2 - 2*X + 1, pleine_a_creuse(MatriceDense(QQ,mamat)))

mamat = matrix.random(K,4); mamat

pol_ann_en_inv(mamat.characteristic_polynomial(),mamat)

_*mamat

(15)

Entrée [74]: 

Entrée [75]: 

Entrée [76]: 

Out[73]:

-X^2 + X + 1

Out[75]:

6069298007649371338953278671329/13988103834131136374639461553351*X^4 + 60692 98007649371338953278671329/13988103834131136374639461553351*X^2 - 3034649003 8246856694766393356645/13988103834131136374639461553351*X - 4855438406119497 0711626229370632/13988103834131136374639461553351

Out[76]:

[0 0 0 0]

[0 0 0 0]

[0 0 0 0]

[0 0 0 0]

trouve_pol_ann_suite([0,1,1,2,3,5,8])

def trouve_pol_ann(M):

# M est creuse

# on veut trouver un polynôme annulateur de degré n (la taille de M) # ... donc e = n

e = M.ncols()

x = vector(K.random_element() for i in range(0, M.ncols())) y = vector(K.random_element() for i in range(0, M.ncols())) My = y

U = [0 for i in range(0, 2*e)]

for i in range(0, 2*e):

U[i] = x * My

My = vector(M.mul_vec(My)) return trouve_pol_ann_suite(U)

# on a bien deg R < e (sinon U serait tout le temps nul)

trouve_pol_ann(pleine_a_creuse(mamat))

_(mamat)

(16)

Entrée [78]: 

Entrée [79]: 

Entrée [80]: 

Entrée [81]: 

Out[77]:

[ 0 0 0 0 1/2 0 -9 6/19 0 1]

[ 0 0 1/2 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 0 0 0 4/11 0 0 0 0]

[ 0 0 0 0 0 0 0 0 0 0]

[ 0 0 -2 0 0 0 0 0 0 0]

[ 0 0 0 0 0 13/2 0 0 0 0]

[ 0 0 -1 0 0 3 0 0 -5 0]

[ 0 0 0 0 0 0 0 -8 0 0]

Out[78]:

272868624574203272592341138144129249862203078312056345653001916851585408561/

1221764729207972438622472012367319362578429953779113583024604394069602750000 00*X^5 + 2728686245742032725923411381441292498622030783120563456530019168515 85408561/2443529458415944877244944024734638725156859907558227166049208788139 2055000000*X^4

Out[79]:

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

[0 0 0 0 0 0 0 0 0 0]

M = random_creuse(K,10,.2); creuse_a_pleine(M).mat()

trouve_pol_ann(M)

_(creuse_a_pleine(M).mat())

def inverse(M):

return pol_ann_en_inv(trouve_pol_ann(M), M)

(17)

Entrée [83]: 

Entrée [84]: 

Entrée [ ]: 

Out[82]:

[ -2643795/12437527 1656900/12437527 1715175/12437527 -32106 060/12437527 -1922760/12437527 5351010/12437527 32106060/124375 27 -26182485/12437527 381150/12437527 -20560701/12437527]

[ 2854005/24875054 -77055/24875054 -412299/12437527 7059 900/12437527 1037820/12437527 -1176650/12437527 -7059900/124375 27 -11444529/24875054 -91622/12437527 17261387/37312581]

[ 377685/12437527 -236700/12437527 -245025/12437527 4586 580/12437527 274680/12437527 -764430/12437527 -4586580/124375 27 3740355/12437527 -54450/12437527 15374770/12437527]

[ 3695230/12437527 7953670/12437527 3764412/12437527 -78359 600/12437527 2687440/12437527 39179800/37312581 78359600/124375 27 -151907466/12437527 50586644/12437527 -51973128/12437527]

[-1018292275/298500648 27140435/298500648 11687475/49750108 -69515 525/37312581 -92572025/37312581 69515525/223875486 69515525/373125 81 -145248215/99500216 3895825/74625162 -295612945/49750108]

[ 5212053/24875054 -1633230/12437527 -3381345/24875054 31647 402/12437527 1895292/12437527 7162960/12437527 -31647402/124375 27 51616899/24875054 -375705/12437527 19023224/12437527]

[ -1678985/24875054 -659345/24875054 31149/12437527 74 780/12437527 -610540/12437527 -37390/37312581 -74780/124375 27 -1793865/24875054 6922/12437527 -1184751/12437527]

[ -1678985/24875054 -659345/24875054 31149/12437527 12512 307/12437527 -610540/12437527 -37390/37312581 -74780/124375 27 -1793865/24875054 6922/12437527 -1184751/12437527]

[ -11558701/24875054 198820/12437527 3390957/24875054 -4230 900/12437527 -4203164/12437527 705150/12437527 4230900/124375 27 -5385015/24875054 376773/12437527 -10717884/12437527]

[ -74865017/74625162 -659345/522376134 10383/87062689 747 80/261188067 -87220/37312581 -37390/783564201 -74780/2611880 67 -597955/174125378 6922/261188067 -394917/87062689]

Out[83]:

Une matrice dense de taille 10 sur l'anneau Rational Field

Out[84]:

'[1 0 0 0 0 0 0 0 0 0]\n[0 1 0 0 0 0 0 0 0 0]\n[0 0 1 0 0 0 0 0 0 0]\n[0 0 0 1 0 0 0 0 0 0]\n[0 0 0 0 1 0 0 0 0 0]\n[0 0 0 0 0 1 0 0 0 0]\n[0 0 0 0 0 0 1 0 0 0]\n[0 0 0 0 0 0 0 1 0 0]\n[0 0 0 0 0 0 0 0 1 0]\n[0 0 0 0 0 0 0 0 0 1]' inverse(M)

M*_

_.mat().str()

(18)

Références

Documents relatifs

[r]

Le Jury se réunit pour examiner les notes obtenues par les candidats au premier groupe d’épreuves, et fixe les notes minimales permettant aux candidats d'être admis en premier

m Localisez le fichier que vous souhaitez utiliser (les onglets Navigateur et Rechercher constituent un bon point de départ au besoin), puis faites-le glisser sur une piste audio

Investir tous les espaces possibles pour concevoir des aménagements riches, dans des dispositifs stables, afin de permettre un temps d’appropriation suffisamment long, propice à

La translation horizontale du graphe d’une solution est le graphe d’une

En utilisant la fonction scanf et les propriétés de la division des en- tiers vues plus haut, écrire un programme qui permet à l’utilisateur de saisir un nombre entier et affiche

Ecrire un programme qui demande à l’utilisateur de rentrer succes- sivement un caractère, puis deux entiers, puis affiche les deux mes- sages Vous avez tapé le caractère .... et

Écrire une fonction qui permet de relire les valeurs contenues dans le fichier, de les placer dans trois tableaux l , L et h , en renvoyant le nombre de lignes lues.. Écrire