Page 1 of 2

Opération sur des ensembles finis

Unread postPosted: 10 Feb 2016, 22:22
by alphaméthyste
Bonsoir

Sur ce thread je vous propose une fonction sur la TI-nspire CX CAS qui peut être (qui sait?) servira à quelqu'un

-on pose que toute liste d'entiers relatifs quelconques mais tels que toutes ses composantes diffèrent les unes des autres

constitue un ensemble non vide de ces entiers relatifs

-on pose que la liste définie par {0,0} désigne l'ensemble vide

-on pose que la liste définie par {-1,-1} désigne l'ensemble qui n'existe pas

un exemple d'ensemble qui n'existe pas : {1,-3,7,2}\{3,2,-5,4} = {-1,-1} car

{1,-3,7,2}\{3,2,-5,4} désigne le complément de {3,2,-5,4} dans {1,-3,7,2} et n'a pas de solution car

{3,2,-5,4} n'est pas inclus dans {1,-3,7,2}

par contre effectivement {2,-3,7,6}\{-3,7}={2,6} puisque {-3,7} est bien inclus dans {2,-3,7,6}

__________________________________________

DESCRIPTION DE LA FONCTION


cette fonction est définie par trois parametres et est notée : opera(x,y,n)

x et y représentent des ensembles finis quelconques et n est un entier naturel dans l'intervalle [1,7]

par conséquent si x={0,0} il s'agit donc d'un ensemble vide sinon x est une liste constituée d'entiers relatifs quelconques

dont toutes ses composantes diffèrent les unes des autres

(idem pour y )

ainsi donc x={-1,8,-6} ou x={0,0} represente un ensemble fini quelconque mais par contre x={3,-1,3} n'est pas un ensemble

__________________________________________

DEUX REMARQUES IMPORTANTES


-lorsque les paramètres x,y,z de la fonction opera(x,y,n) ne sont pas conformes

les listes x et y ne sont pas conformes ou lorsque l'entier naturel n n'est pas conforme

alors on obtiens opera(x,y,n)=-1

les paramètres n'étant pas conformes, la fonction donne -1 pour solution signifiant par là que le calcul n'a pas pu être effectué

-lorsque dans une operation sur les ensembles x et y on obtiens opera(x,y,n)= {-1,-1}

cela signifie que la solution n'existe pas (la solution donnée par {-1,-1} est un ensemble qui n'existe pas)

par exemple c'est le cas lorsque l'on tente d'effectuer {1,-3,7,2}\{3,2,-5,4}

voir ci-dessous le fonctionnement

__________________________________________

FONCTIONNEMENT


En ce qui concerne l'entier naturel n dans l'intervalle [1,7]

-pour n=1 alors opera(x,y,n)=1 si on verifie x=y sinon on obtiens opera(x,y,n)=0

-pour n=2 alors opera(x,y,n)=1 si on verifie x est inclus dans y sinon on obtiens opera(x,y,n)=0

-pour n=3 alors opera(x,y,n)=z où z= x INTER y

-pour n=4 alors opera(x,y,n)=z où z= x UNION y

-pour n=5 alors opera(x,y,n)=z où z= y \ x

attention dans le cas où x n'estp as inclus dans y alors on obtiendra opera(x,y,n)={-1,-1} l'ensemble qui n'existe pas

puisque dans ce cas là, la solution est impossible

-pour n=6 alors opera(x,y,n)=z où z= x - y qui désigne x DIFFERENCE y

on rappelle que x-y = x \ (x INTER y)

-pour n=7 alors opera(x,y,n)=z où z= x Delta y qui désigne x différence symétrique y

on rappelle que x Delta y = (x - y ) UNION ( y - x )

________________________________________________

LISTINGS


pour faire fonctionner cette fonction opera(x,y,n)

on a besoin d'utiliser 16 fonctions

ci-dessous tous les listings de ces fonctions

remarque : pour une matrice m alors la notation m^T désigne la matrice transconjuguée

Code: Select all
Define opera(x,y,n)=
Func
Local lignef,ligne1,ligne2,xx,yy,k,t,p,q,z
lignef:=0
ligne1:=1
ligne2:=2
xx:=card(x)
yy:=card(y)
If xx=0 Then
Goto ligne1
EndIf
k:=valid(x)
If k=1 Then
Goto ligne1
EndIf
t:=-1
Goto lignef
Lbl ligne1
If yy=0 Then
Goto ligne2
EndIf
k:=valid(y)
If k=1 Then
Goto ligne2
EndIf
t:=-1
Goto lignef
Lbl ligne2
If xx=0 or yy=0 Then
p:=x
q:=y
z:=1
Else
p:=fond(x,y)
q:=0
z:=0
EndIf
If n=1 Then
t:=egal(p,q,z)
Goto lignef
EndIf
If n=2 Then
t:=inclus(p,q,z)
t:=t[1]
Goto lignef
EndIf
If n=3 Then
t:=inter(p,q,z)
Goto lignef
EndIf
If n=4 Then
t:=union(p,q,z)
Goto lignef
EndIf
If n=5 Then
t:=compp(p,q,z)
Goto lignef
EndIf
If n=6 Then
t:=dif(p,q,z)
Goto lignef
EndIf
If n=7 Then
t:=delta(p,q,z)
Goto lignef
EndIf
t:=-1
Goto lignef
Lbl lignef
Return t
EndFunc


Code: Select all
Define card(a)=
Func
Local lignef,n,x
lignef:=0
n:=dim(a)
If n≠2 Then
x:=n
Goto lignef
EndIf
If a[1]=0 and a[2]=0 Then
x:=0
Goto lignef
EndIf
If a[1]=-1 and a[2]=-1 Then
x:=-1
Goto lignef
EndIf
x:=n
Goto lignef
Lbl lignef
Return x
EndFunc


Code: Select all
Define valid(x)=
Func
Local lignef,h,i,j,k,l,m,n,y
lignef:=0
n:=dim(x)
y:=1
If n=1 Then
Goto lignef
EndIf
m:=n-1
For i,1,m
h:=i+1
For j,h,n
k:=x[i]
l:=x[j]
If k=l Then
y:=0
Goto lignef
EndIf
EndFor
EndFor
Goto lignef
Lbl lignef
Return y
EndFunc


Code: Select all
Define fond(a,b)=
Func
Local lignef,ligne,list,list1,list2,mat,mats,d,i,j,k,m,n,aa,bb,cc,d0,d1,d2,d3,k0,m0,n0
lignef:=0
ligne:=1
m:=dim(a)
n:=dim(b)
list:=newlist(1)
aa:=a
bb:=b
cc:=list
k:=1
k0:=0
m0:=m
n0:=n
For i,1,m
For j,1,n
If a[i]=b[j] Then
If k=1 Then
cc[1]:=a[i]
list1[1]:=i
list2[1]:=j
Else
list[1]:=a[i]
cc:=augment(cc,list)
list[1]:=i
list1:=augment(list1,list)
list[1]:=j
list2:=augment(list2,list)
EndIf
k:=k+1
k0:=k0+1
m0:=m0-1
n0:=n0-1
EndIf
EndFor
EndFor
If k0=0 Then
Goto ligne
EndIf
list1:=crois(list1)
list2:=crois(list2)
If m0>0 Then
For i,1,k0
j:=list1[i]
aa:=list►mat(aa)
aa:=supp(0,j,aa)
aa:=mat►list(aa)
list:={0}
aa:=augment(list,aa)
EndFor
Else
aa:=newlist(1)
EndIf
If n0>0 Then
For i,1,k0
j:=list2[i]
bb:=list►mat(bb)
bb:=supp(0,j,bb)
bb:=mat►list(bb)
list:={0}
bb:=augment(list,bb)
EndFor
Else
bb:=newlist(1)
EndIf
aa:=invsuit(aa)
bb:=invsuit(bb)
Goto ligne
Lbl ligne
list:={0}
aa:=augment(aa,list)
bb:=augment(bb,list)
cc:=augment(cc,list)
d1:=dim(aa)
d2:=dim(bb)
d3:=dim(cc)
list:=newlist(3)
list[1]:=d1
list[2]:=d2
list[3]:=d3
d:=max(list)
If d>d1 Then
d0:=d-d1
list:=newlist(d0)
aa:=augment(aa,list)
EndIf
If d>d2 Then
d0:=d-d2
list:=newlist(d0)
bb:=augment(bb,list)
EndIf
If d>d3 Then
d0:=d-d3
list:=newlist(d0)
cc:=augment(cc,list)
EndIf
d:=dim(aa)
aa[d]:=m0
bb[d]:=n0
cc[d]:=k0
mat:=(conj(list►mat(cc)))^T
mats:=(conj(list►mat(aa)))^T
mat:=augment(mat,mats)
mats:=(conj(list►mat(bb)))^T
mat:=augment(mat,mats)
Goto lignef
Lbl lignef
Return mat
EndFunc


Code: Select all
Define egal(x,y,z)=
Func
Local lignef,ligne,xx,yy,x2,x3,n,t
lignef:=0
ligne:=1
If z=0 Then
Goto ligne
EndIf
xx:=card(x)
yy:=card(y)
If xx=0 and yy=0 Then
t:=1
Else
t:=0
EndIf
Goto lignef
Lbl ligne
n:=rowDim(x)
x2:=x[n,2]
x3:=x[n,3]
If x2=0 and x3=0 Then
t:=1
Else
t:=0
EndIF
Goto lignef
Lbl lignef
Return t
EndFunc


Code: Select all
Define inclus(x,y,z)=
Func
Local lignef,ligne,list,xx,yy,x2,x3,n
lignef:=0
ligne:=1
list:=newlist(2)
If z=0 Then
Goto ligne
EndIf
xx:=card(x)
yy:=card(y)
If xx=0 and yy=0 Then
list[1]:=1
list[2]:=1
Goto lignef
EndIf
If xx=0 and yy≠0 Then
list[1]:=1
list[2]:=0
Else
list[1]:=0
list[2]:=1
EndIf
Goto lignef
Lbl ligne
n:=rowDim(x)
x2:=x[n,2]
x3:=x[n,3]
If x2=0 and x3=0 Then
list[1]:=1
list[2]:=1
Goto lignef
EndIf
If x2≠0 and x3≠0 Then
list[1]:=0
list[2]:=0
Goto lignef
EndIf
If x2=0 and x3≠0 Then
list[1]:=1
list[2]:=0
Else
list[1]:=0
list[2]:=1
EndIf
Goto lignef
Lbl lignef
Return list
EndFunc


Code: Select all
Define inter(x,y,z)=
Func
Local lignef,ligne,xx,yy,w,n,m,k
lignef:=0
ligne:=1
w:=newlist(2)
If z=0 Then
Goto ligne
EndIf
xx:=card(x)
yy:=card(y)
If xx=-1 or yy=-1 Then
w[1]:=-1
w[2]:=-1
Goto lignef
EndIf
If xx=0 or yy=0 Then
w[1]:=0
w[2]:=0
Else
w[1]:=-1
w[2]:=-1
EndIf
Goto lignef
Lbl ligne
n:=rowDim(x)
m:=x[n,1]
If m=0 Then
w[1]:=0
w[2]:=0
Goto lignef
EndIf
k:=m+1
w:=(x^T[1])^T
w:=mat►list(w)
w:=seclist(w,k,1)
Goto lignef
Lbl lignef
Return w
EndFunc


Code: Select all
Define union(x,y,z)=
Func
Local lignef,ligne,xx,yy,k1,k2,k3,m1,m2,m3,n,v,w
lignef:=0
ligne:=1
If z=0 Then
Goto ligne
EndIf
xx:=card(x)
yy:=card(y)
w:=newlist(2)
If xx=-1 or yy=-1 Then
w[1]:=-1
w[2]:=-1
Goto lignef
EndIf
If xx=0 or yy=0 Then
If xx≠0 Then
w:=x
Else
w:=y
EndIf
Else
w[1]:=-1
w[2]:=-1
EndIf
Goto lignef
Lbl ligne
n:=rowDim(x)
m1:=x[n,1]
m2:=x[n,2]
m3:=x[n,3]
k1:=m1+1
k2:=m2+1
k3:=m3+1
If m2=0 and m3=0 Then
w:=(x^T[1])^T
w:=mat►list(w)
w:=seclist(w,k1,1)
Goto lignef
EndIf
If m3=0 Then
w:=(x^T[2])^T
w:=mat►list(w)
w:=seclist(w,k2,1)
v:=(x^T[1])^T
v:=mat►list(v)
v:=seclist(v,k1,1)
w:=augment(w,v)
Goto lignef
EndIf
If m2=0 Then
w:=(x^T[3])^T
w:=mat►list(w)
w:=seclist(w,k3,1)
v:=(x^T[1])^T
v:=mat►list(v)
v:=seclist(v,k1,1)
w:=augment(w,v)
Goto lignef
EndIf
If m1=0 Then
w:=(x^T[2])^T
w:=mat►list(w)
w:=seclist(w,k2,1)
v:=(x^T[3])^T
v:=mat►list(v)
v:=seclist(v,k3,1)
w:=augment(w,v)
Goto lignef
EndIf
w:=(x^T[1])^T
w:=mat►list(w)
w:=seclist(w,k1,1)
v:=(x^T[2])^T
v:=mat►list(v)
v:=seclist(v,k2,1)
w:=augment(w,v)
v:=(x^T[3])^T
v:=mat►list(v)
v:=seclist(v,k3,1)
w:=augment(w,v)
Goto lignef
Lbl lignef
Return w
EndFunc


Code: Select all
Define compp(x,y,z)=
Func
Local lignef,m,n,t,w
lignef:=0
t:=inclus(x,y,z)
w:=newlist(2)
If t[1]=0 Then
w[1]:=-1
w[2]:=-1
Goto lignef
EndIf
If z=1 Then
w:=y
Goto lignef
EndIf
t:=egal(x,y,z)
If t=1 Then
w[1]:=0
w[2]:=0
Goto lignef
EndIf
n:=rowDim(x)
m:=x[n,3]+1
w:=(x^T[3])^T
w:=mat►list(w)
w:=seclist(w,m,1)
Goto lignef
Lbl lignef
Return w
EndFunc


Code: Select all
Define dif(x,y,z)=
Func
Local lignef,ligne,xx,yy,k,m,n,t,w
lignef:=0
ligne:=1
w:=newlist(2)
t:=egal(x,y,z)
If t=1 Then
w[1]:=0
w[2]:=0
Goto lignef
EndIf
If z=0 Then
Goto ligne
EndIf
xx:=card(x)
yy:=card(y)
If xx=-1 or yy=-1 Then
w[1]:=-1
w[2]:=-1
Goto lignef
EndIf
w:=x
Goto lignef
Lbl ligne
n:=rowDim(x)
m:=x[n,2]
k:=m+1
If m=0 Then
w[1]:=0
w[2]:=0
Goto lignef
EndIf
w:=(x^T[2])^T
w:=mat►list(w)
w:=seclist(w,k,1)
Goto lignef
Lbl lignef
Return w
EndFunc


Code: Select all
Define delta(x,y,z)=
Func
Local lignef,ligne,xx,yy,m2,m3,k2,k3,n,t,v,w
lignef:=0
ligne:=1
w:=newlist(2)
t:=egal(x,y,z)
If t=1 Then
w[1]:=0
w[2]:=0
Goto lignef
EndIf
If z=0 Then
Goto ligne
EndIf
xx:=card(x)
yy:=card(y)
If xx=-1 or yy=-1 Then
w[1]:=-1
w[2]:=-1
Goto lignef
EndIf
If xx=0 Then
w:=y
Else
w:=x
EndIf
Goto lignef
Lbl ligne
n:=rowDim(x)
m2:=x[n,2]
m3:=x[n,3]
k2:=m2+1
k3:=m3+1
If m2=0 and m3=0 Then
w[1]:=0
w[2]:=0
Goto lignef
EndIf
If m2≠0 and m3≠0 Then
w:=(x^T[2])^T
w:=mat►list(w)
w:=seclist(w,k2,1)
v:=(x^T[3])^T
v:=mat►list(v)
v:=seclist(v,k3,1)
w:=augment(w,v)
Goto lignef
EndIf
If m2≠0 Then
w:=(x^T[2])^T
w:=mat►list(w)
w:=seclist(w,k2,1)
Else
w:=(x^T[3])^T
w:=mat►list(w)
w:=seclist(w,k3,1)
EndIf
Goto lignef
Lbl lignef
Return w
EndFunc


Code: Select all
Define crois(z)=
Func
Local lignef,ligne,list,a,b,c,i,j,k,m,x,z0,zz
lignef:=0
ligne:=1
x:=suit(z)
If x≥0 and x≠4 Then
zz:=z
Goto lignef
EndIf
If x<0 Then
zz:=invsuit(z)
Goto lignef
EndIf
m:=dim(z)-1
a:=1
list:=newlist(1)
zz:=list
zz[1]:=z[1]
z0:=seclist(z,2,2)
For k,1,m
b:=z0[1]
If k<m Then
z0:=seclist(z0,2,2)
EndIf
For j,1,a
c:=zz[j]
If b≤c Then
i:=j
Goto ligne
EndIf
If j=a Then
i:=j+1
Goto ligne
EndIf
EndFor
Lbl ligne
zz:=insert(zz,i,b)
a:=a+1
EndFor
Goto lignef
Lbl lignef
Return zz
EndFunc


Code: Select all
Define supp(i,j,x)=
Func
Local z,n,p,k,l,ligne
n:=rowDim(x)
p:=colDim(x)
z:={ }
For k,1,n
If k=i
Cycle
ligne:={ }
For l,1,p
If l≠j
ligne:=augment(ligne,{x[k,l]})
EndFor
z:=when (z={ },{ligne},colAugment(z,{ligne}))
EndFor
Return z
EndFunc


Code: Select all
Define invsuit(a)=
Func
Local lignef,i,j,n,b
lignef:=0
n:=dim(a)
If n=1 Then
b:=a
Goto lignef
EndIf
b:=newlist(n)
For i,1,n
j:=1+n-i
b[i]:=a[j]
EndFor
Goto lignef
Lbl lignef
Return b
EndFunc


Code: Select all
Define seclist(a,b,c)=
Func
Local d,e,i,j,k,n
n:=dim(a)
If c=1 Then
i:=1
j:=b-1
Else
i:=b
j:=n
EndIf
e:=newlist(1)
For k,i,j
If k=i Then
d:=e
d[1]:=a[k]
Else
e[1]:=a[k]
d:=augment(d,e)
EndIf
EndFor
Return d
EndFunc


Code: Select all
Define suit(a)=
Func
Local lignef,i,j,k,n,p,q,x
lignef:=0   
x:=4
n:=dim(a)     
If n=1 Then
x:=3
Goto lignef
EndIf
If n=2 and a[1]=a[2] Then
x:=0
Goto lignef
EndIf
If n=2 and a[1]<a[2] Then
x:=2
Goto lignef
EndIf
If n=2 and a[1]>a[2] Then
x:=-2
Goto lignef
EndIf
i:=1
j:=2
p:=1
While j≤n
If a[i]≤a[j] Then
i:=j
j:=j+1
Else
p:=0
j:=n+1
EndIf
EndWhile
i:=1
j:=2
q:=1
While j≤n
If a[i]≥a[j] Then
i:=j
j:=j+1
Else
q:=0
j:=n+1
EndIf
EndWhile
If p=1 and q=1 Then
x:=0
Goto lignef
EndIf
i:=1
j:=2
k:=1
While j≤n
If a[i]<a[j] Then
i:=j
j:=j+1
Else
k:=0
j:=n+1
EndIf
EndWhile
If p=1 and k=1 Then
x:=2
Goto lignef
EndIf
If p=1 and k=0 Then
x:=1
Goto lignef
EndIf
i:=1
j:=2
k:=1
While j≤n
If a[i]>a[j] Then
i:=j
j:=j+1
Else
k:=0
j:=n+1
EndIf
EndWhile
If q=1 and k=1 Then
x:=-2
Goto lignef
EndIf
If q=1 and k=0 Then
x:=-1
Goto lignef
EndIf
Goto lignef
Lbl lignef
Return x
EndFunc


Code: Select all
Define insert(a,i,u)=
Func
Local lignef,b,c,m
lignef:=0
c:=newlist(1)
c[1]:=u
m:=dim(a)+1
If i=1 Then
b:=augment(c,a)
Goto lignef
EndIf
If i=m Then
b:=augment(a,c)
Goto lignef
EndIf
b:=seclist(a,i,1)
b:=augment(b,c)
c:=seclist(a,i,2)
b:=augment(b,c)
Goto lignef
Lbl lignef
Return b
EndFunc

Re: Opération sur des ensembles finis

Unread postPosted: 10 Feb 2016, 22:35
by Wistaro
Merci beaucoup d'avoir pris le temps de partager ces programmes sur le forum.
Je pense que ça va bien servir :bj:

Re: Opération sur des ensembles finis

Unread postPosted: 10 Feb 2016, 23:26
by alphaméthyste
De rien Wistaro

Bon à priori j'ai pas vu de fautes en recopiant ces 17 fonctions (sur ma machine tout fonctionne bien)

ceci dit si jamais vous en voyez une dites-le moi (j'ai tout sur papier et c'est des copies papiers que j'ai écris ces fonctions sur ma machine, du coup l'erreur sera facile à réparer)

À plus les camarades

Re: Opération sur des ensembles finis

Unread postPosted: 10 Feb 2016, 23:30
by Hamza.S
tu pourrais optimiser certains programmes/fonctions je pense

Re: Opération sur des ensembles finis

Unread postPosted: 10 Feb 2016, 23:57
by alphaméthyste
oui lolll Hamza.S :D

j'ai une manière très particulière d'écrire mes bidules (c'est shadockien )

par exemple y a des tonnes de variables inutiles

je remarque qu'entre écrire un truc qui fonctionne et un truc optimal y a une marge chez moi ...

bon ceci dit là je reviens pour plus tard pour algebre de boole sur un ensemble fini

bon à plus tard les camarades

Re: Opération sur des ensembles finis

Unread postPosted: 17 Feb 2016, 15:47
by Bisam
Personnellement, j'ai une remarque un peu plus désagréable !
Mathématiquement parlant, il n'y a pas d' "ensemble qui n'existe pas" ! D'ailleurs, dans l'exemple que tu cites :
alphamétyste wrote:un exemple d'ensemble qui n'existe pas : {1,-3,7,2}\{3,2,-5,4} = {-1,-1} car

{1,-3,7,2}\{3,2,-5,4} désigne le complément de {3,2,-5,4} dans {1,-3,7,2} et n'a pas de solution car

{3,2,-5,4} n'est pas inclus dans {1,-3,7,2}
la réponse devrait être {1,-3,7}, c'est-à-dire l'ensemble des éléments du premier ensemble qui ne sont pas dans le 2ème ... et non "l'ensemble qui n'existe pas" selon toi.

Par ailleurs, algorithmiquement parlant, je ne comprends pas grand chose à tes fonctions... essentiellement parce que tu passes beaucoup de temps à expliquer ce que tu souhaites faire, mais pas tu n'expliques jamais COMMENT tu le fais, ni comment utiliser tes fonctions.

Pour info, j'ai moi-même écrit des fonctions
Code: Select all
in(x, E) @teste si l'élément x fait partie de l'ensemble E et renvoie True ou False
subset(E1, E2) @teste si l'ensemble E1 est inclus dans E2 et renvoie True ou False
equal(E1, E2) @teste si l'ensemble E1 est égal à l'ensemble E2 et renvoie True ou False
inter(E1, E2) @renvoie l'intersection des ensembles E1 et E2
union(E1, E2) @renvoie la réunion des ensembles E1 et E2
minus(E1, E2) @renvoie la différence des ensembles E1 et E2
delta(E1, E2) @renvoie la différence symétrique des ensembles E1 et E2
singles(E) @renvoie l'ensemble E duquel on a retiré tous les (éventuels) doublons

Il n'y a pas de codage particulier pour l'ensemble vide puisque la calculette sait déjà manipuler les listes vides !
Le tout prend un peu plus de 1000 octets, soit 10 fois moins que ce que tu proposes...

PS : Mon dieu, des "Goto" à la pelle... mais dans quel siècle vis-tu ?

Re: Opération sur des ensembles finis

Unread postPosted: 22 Feb 2016, 16:13
by alphaméthyste
Bonjour Bisam

Pour que la machine puisse donner une réponse même justement lorsqu'il n'y a pas de solution à rien

Je lui dit que lorsque la solution n'existe pas elle m'envoie comme solution l'équivalent d'un ensemble qui n'existe pas

En effet si cet ensemble n'existe pas il n'est pas la solution de rien mais comme je désire qu'elle me donne une solution malgré tout et non pas qu'elle m'envoie un message d'erreur donc je trouve pratique qu'un tel ensemble qui n'existe pas, existe pour la machine même si pour l'utilisateur il n'existe pas ;)

Sinon pour le reste essaye ces fonctions tu verra elles sont pratiques

Enfin je suis nul en programmation mais si tu préfère changer le code pour que ce soit plus pratique ...pourquoi pas ?

Ce qui compte est que de toute façon cela fonctionne non ?

Bonne soirée camarade Bisam

Re: Opération sur des ensembles finis

Unread postPosted: 22 Feb 2016, 22:08
by alphaméthyste
...ah j'oubliais Bisam

sans ête désagréable à mon tour essaye de revoir un peu ton algèbre

A\B signifie le complémentaire de B dans A

par conséquent si A\B est un ensemble il faut que B soi inclus dans A sinon il n'y a pas de solution et de fait

{1,-3,7,2}\{3,2,-5,4} n'a pas de solution

Re: Opération sur des ensembles finis

Unread postPosted: 23 Feb 2016, 10:35
by Bisam
Tout d'abord, excuse mon ton un peu acerbe dans mon message précédent.
Sache que je te réponds afin que tu améliores tes idées et tes programmes : j'ai supposé que c'était pour cette raison que tu postais tes programmes sur le forum et non dans la section dédiée, directement dans les archives... mais je me suis peut-être trompé à ce sujet.

Ensuite, je t'assure que je n'ai aucun problème avec l'algèbre : cela fait 15 ans que j'enseigne les maths en Math Sup. Je t'annonce avec certitude que tu te trompes, et je le prouve avec plusieurs références si tu le souhaites : ICI ou .

Par ailleurs, tu as raison de penser à renvoyer une réponse même quand en pratique il n'y a pas de solution... mais d'une part, ici, il y a toujours une solution et d'autre part, en général, dans les cas où il n'y a pas de solution, on préfère renvoyer un message d'erreur explicite pour éviter de manipuler des objets qui ne représentent rien.

Enfin, je ne te demande pas de modifier tes programmes à cause de leur longueur, de leur lenteur, ou de n'importe quelle autre raison : je te dis juste qu'il est possible de faire bien plus efficace (et dans le cas présent plus juste, également)... mais je ne peux même pas te l'expliquer tant qu'on ne sera pas d'accord sur les opérations que tu veux mettre en place, surtout si tu n'expliques pas comment tu t'y prends pour faire tes opérations !
Je vais tenter de comprendre tes fonctions, mais je t'assure qu'essayer de comprendre un algorithme en lisant uniquement du code non commenté et qui utilise des variables non explicites est vraiment très difficile.

Edit : Je viens de lire et de comprendre l'une de tes fonctions : la fonction "valid". La voici réécrite plus simplement :
Code: Select all
Define valid(x)=
Func
Local i,j,n
n:=dim(x)
For i,1,n
  For j,i+1,n
    If x[i]=x[j]
       Return False
  EndFor
EndFor
Return True
EndFunc

La fonction "seclist(a,b,c)" semble renvoyer une partie de la liste a : la partie gauche de 1 à b-1 si c=1 et la partie droite de b à n si c vaut autre chose. Il y a déjà dans la calculette des fonctions qui font cela : les fonctions "left", "right" et "mid".
Du coup, la fonction "insert(a,i,u)" peut se réécrire :
Code: Select all
Define insert(a,i,u)=
Func
Return augment(augment(left(a,i-1), {u}), mid(a,i))
EndFunc

Re: Opération sur des ensembles finis

Unread postPosted: 23 Feb 2016, 10:40
by GalacticPirate
alphaméthyste wrote:{1,-3,7,2}\{3,2,-5,4} n'a pas de solution

Euh, même en 1re S, je sais que la réponse est
$mathjax$\{1;-3;7\}$mathjax$
...