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