Réciprocité de “a(x)|b(x) ∀x∈ℤ” (programme de maths expertes) :
Pour deux fonctions a(x) et b(x) et une série de solutions x possibles données, calculer les solutions a(x)=y et b(x)=z pour chaque x et indiquer si y|z.
Renvoie une liste de solutions x vérifiant a|b et, dans le cas échéant, une liste des x indiqués ne vérifiant pas a|b.
Utilisation : exécuter cb()
, définir les fonctions a(x) et b(x) avec la syntaxe python (ex. 2*x+3
), puis entrer chaque valeur possible de x à tester. L’aide est accessible avec la commande ..
une fois le prompt affiché. Les fonctions a(x) et b(x) sont évaluées avec eval(a)
, il faut que leur contenu soit une expression cohérente en python qui retourne un nombre.
IMPORTANT : l’émulateur Numworks en ligne plante lors de eval(a)
et eval(b)
malgré a et b expressions correctes alors qu’il ne devrait pas, ce script est tout à fait correct et marche sans problème sur calculatrice réelle et dans tout autre interpréteur python.
def cb(a=False,b=False,c=False): if a==False or b==False or c==False: a=input("a: ") b=input("b: ") c=[] n=0 print("CBLIN: help = ..") while True: t=input("#"+str(n)+" ") if t=="**": break elif t=="//": return elif t=="..": print("CBLIN cmd help:") print(" .. show this help") print(" ** begin calculation") print(" // exit cblin") print(" -- show list, a, b") print(" ++ detail list, a, b") print(" (( delete x from list") print(" )) delete entire list") print(" a set a expression") print(" b set b expression") elif t=="++": print("a=",a) print("b=",b) for i in range(len(c)): print("c"+str(i),c[i]) elif t=="--": print("a=",a," :: b=",b) print("c=",c) elif t=="))": print("delete entire list?") h=input("0=no, 1=yes> ") if h==1: c=[] elif t=="((": print("index to delete:") h=input("> ") try: print("del #"+str(h),":",c[int(h)]) del c[int(h)] except IndexError: print("err/out of range") except: print("err/not int",h) elif t=="a": print("sat a, cancel = ..") h=input("> ") if h!="..": a=h elif t=="b": print("set b, cancel = ..") h=input("> ") if h!="..": b=h else: try: c.append(int(t)) n+=1 except: print("err/not int") print("====") print("n, a(x)=y, b(x)=z, y|z") o=[] p=[] for x in c: y=eval(a) z=eval(b) if z%y==0: w=str(y)+"|"+str(z) o.append(x) else: w="!"+str(z%y) p.append(x) print("n={}, {}={}, {}={}, {}".format(x,a,y,b,z,w)) print() if len(p)>0: print("bad:",p) print("s=",o)