π
<-
Chat plein-écran
[^]

[Défi] Je vous sers un petit algo ?

Discussions scientifiques et scolaires

[Défi] Je vous sers un petit algo ?

Message non lude Bisam » 29 Juin 2014, 13:49

Bon, l'année scolaire est finie ou presque... mais je sens que vous avez encore envie de vous lancer un petit défi.

Voici ce que je vous propose : répondez à la question 9 de ce sujet :
DS 08 - CB 2.pdf
(232.39 Kio) Téléchargé 79 fois

Je vous laisse une totale liberté sur le langage (ou pseudo-langage) utilisé du moment que l'algorithme écrit répond à la question.
Je laisse le sujet en entier car les autres questions peuvent vous aider à comprendre et vous inspirer.

Répondez directement sur le forum en utilisant la balise [code] et éventuellement la balise [spoiler] si vous ne voulez pas influencer les autres.

J'espère que ça vous plaira... bon courage.

PS : N'hésitez pas à mettre un petit mot juste pour dire si vous souhaitez participer... ou non.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5667
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Message non lude davidElmaleh » 29 Juin 2014, 14:09

Voila, ma réponse :

Show/Hide spoilerAfficher/Masquer le spoiler
Si j'ai bien compris, on doit carrément déterminer l'écriture de x en base 3 :D dans ce cas, voila mon code en TI-BASIC
Code: Tout sélectionner
Define balance2(x)=
Func
Local bin,reste,i
reste:={}
bin:=""
While x≥3
  reste:=augment(reste,{mod(x,3)})
  x:=int(((x)/(3)))
EndWhile
reste:=augment(reste,{mod(x,3)})
For i,0,dim(reste)-1
  bin:=string(reste[i+1])&"*"&string(3^(i))&"+"&bin
EndFor
Return mid(bin,1,dim(bin)-1)
EndFunc
Image
Avatar de l’utilisateur
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 19.6%
 
Messages: 409
Images: 9
Inscription: 14 Oct 2012, 23:30
Localisation: Paris 19
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: PSI*

Re: [Défi] Je vous sers un petit algo ?

Message non lude Bisam » 29 Juin 2014, 14:22

J'ai bien peur, David, que tu n'aies lu un peu trop en diagonale... mais peut-être y a-t-il quelques éléments un peu compliqués dans l'énoncé.

Clarifions :
1) On appelle développement ternaire classique d'un entier
$mathjax$x$mathjax$
une écriture
$mathjax$x=t_0+t_1\times 3+t_2\times 3^2+\cdots+ t_n\times 3^n$mathjax$
pour laquelle tous les
$mathjax$t_k$mathjax$
sont égaux à 0, 1 ou 2.
2) On appelle développement ternaire balancé d'un entier
$mathjax$x$mathjax$
une écriture
$mathjax$x=b_0+b_1\times 3+b_2\times 3^2+\cdots+ b_n\times 3^n$mathjax$
pour laquelle tous les
$mathjax$b_k$mathjax$
sont égaux à -1, 0 ou 1.

La question 9) demande de trouver la liste des coefficients
$mathjax$(b_k)$mathjax$
d'un entier
$mathjax$x$mathjax$
donné, en suivant l'algorithme décrit un peu plus haut dans l'énoncé. La fonction doit simplement renvoyer une liste d'entiers.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5667
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Message non lude davidElmaleh » 29 Juin 2014, 14:23

ah.. je vois
Image
Avatar de l’utilisateur
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 19.6%
 
Messages: 409
Images: 9
Inscription: 14 Oct 2012, 23:30
Localisation: Paris 19
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: PSI*

Re: [Défi] Je vous sers un petit algo ?

Message non lude m@thieu41 » 29 Juin 2014, 14:32

Sympa ça :)

J'arrive à faire les parties I et II (et la IV :p), mais j'ai du mal à comprendre le rapport entre le système ternaire balancé et la partie III...

Je ne suis pas non plus sur de ce que demande la question 9. Tu dis
trouver la liste des coefficients (bk) d'un entier x donné, en suivant l'algorithme décrit un peu plus haut dans l'énoncé.
Mais n'est ce pas ce qui est demandé à la question 5 plutôt?
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Défi] Je vous sers un petit algo ?

Message non lude Bisam » 29 Juin 2014, 14:33

La question 9) propose une autre façon de faire... (et la question 5 n'est pas guidée, de toute façon).
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5667
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Message non lude m@thieu41 » 29 Juin 2014, 15:35

Voici ma proposition (en python):
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
#On retourne la somme de la liste
def somme(l):
    s = 0
    for nb in l:
        s += nb
    return s

#la somme cumulée
def somCum(l):
    s = 0
    i = 1
    cum = [0]
    for nb in l :
        s += nb
        cum.append(s)
    return cum

#rajoute les poids pour que la balance bascule ou s'équilibre
def equilibre(cote, objectif):
    while somme(cote) < objectif:
        poidsCum = somCum(poids)
        i = n
        while poidsCum[i] + somme(cote) >= objectif and i > 0:
            i -= 1
        cote.append(poids[i])
        poids[i] = 0
       

def balance2(x):
    #on récupère les poids possibles
    global n
    n = 5
    i = 0

    global poids
    poids = []
   
    while i <= 5 :
        poids.append(3**i)
        i += 1

    #on équilibre chaque côté l'un après l'autre
    cote1 = [x]
    cote2 = []

    while somme(cote1) != somme(cote2):
        equilibre(cote2, somme(cote1))
        equilibre(cote1, somme(cote2))

    #on récupère la liste des bk
    cote1[0] = 0
    b = []
    i = 0
    while i <= n:
        if 3**i in cote1:
            b.append(-1)
        elif 3**i in cote2:
            b.append(1)
        else:
            b.append(0)
        i+=1

    print(b)
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Défi] Je vous sers un petit algo ?

Message non lude davidElmaleh » 29 Juin 2014, 15:35

Voila donc ma réponse :

Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
Define balance2(x)=
Func
:Local puis,lstbk,lstpuis,i,bk,j
:puis:=round(log(x,3),0)
:lstbk:={}
:lstpuis:={puis}
:bk:={}
:j:=1
:While x≠0
:  If x>0 Then
:    x:=x-3^(puis)
:    lstbk:=augment({1},lstbk)
:  ElseIf x<0 Then
:    x:=x+3^(puis)
:    lstbk:=augment({−1},lstbk)
:  EndIf
:  If x≠0 Then
:    puis:=round(log(abs(x),3),0)
:    lstpuis:=augment({puis},lstpuis)
:  EndIf
:EndWhile
:For i,0,lstpuis[dim(lstpuis)]
:  bk:=augment(bk,{when(i=lstpuis[j],lstbk[j],0)})
:  If bk[dim(bk)]≠0 Then
:    j:=j+1
:  EndIf
:EndFor
:Return bk
:EndFunc
Image
Avatar de l’utilisateur
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 19.6%
 
Messages: 409
Images: 9
Inscription: 14 Oct 2012, 23:30
Localisation: Paris 19
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: PSI*

Re: [Défi] Je vous sers un petit algo ?

Message non lude Bisam » 29 Juin 2014, 16:25

@David : il manque une valeur absolue dans ton premier calcul de logarithme... et il y aura une erreur si x est nul au départ.
Par ailleurs, si x est trop grand au départ, il peut y avoir une erreur dans le calcul du logarithme en base 3... et du coup tout l'algorithme est faussé. Il vaut mieux toujours travailler avec des entiers.
À part ça, ça a l'air de marcher.

@mathieu : En Python, il existe une fonction "sum" qui fait ce que fait ta fonction "somme"... Par ailleurs, tu n'aurais pas dû te limiter à n=5... vois ce que tu peux faire pour modifier cela.
Ceci étant, tu sembles doué pour écrire des algorithmes compréhensibles ! Bravo !
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5667
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Message non lude m@thieu41 » 29 Juin 2014, 16:57

Merci ! :)

Voici mes algos q2/5/9:
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
#la suite u(n)
def u(n):
    return (3**(n+1) - 1) / 2


#q2
def ternaire(x, n = -1):
    #on cherche n si besoin
    if n == -1:
        n = 0
        while 2 * u(n) < x:
            n += 1

    #on écrit x en base 3
    t = []
    i = 0
    while i <= n:
        t.append(x % 3)
        x //= 3
        i+=1
    return t


#q5
def balance(x, n = -1):
    #on cherche n
    if n == -1:
        n = 0
        while -u(n) > x or x > u(n):
            n += 1

    #on écrit en ternaire balancé
    b = []
    for tk in ternaire(x + u(n), n) :
        b.append(int(tk - 1))

    return b


#q9

#la somme cumulée
def somCum(l):
    s = 0
    i = 1
    cum = [0]
    for nb in l :
        s += nb
        cum.append(s)
    return cum

#rajoute les poids pour que la balance bascule ou s'équilibre
def equilibre(cote, objectif):
    while sum(cote) < objectif:
        poidsCum = somCum(poids)
        i = len(poids) - 1
        while poidsCum[i] + sum(cote) >= objectif and i > 0:
            i -= 1
        cote.append(poids[i])
        poids[i] = 0
       

def balance2(x, n = -1):
    #On cherche n au besoin
    if n == -1:
        n = 0
        while -u(n) > x or x > u(n):
            n += 1
   
    #on récupère les poids possibles
    global poids
    poids = []
    i = 0
   
    while i <= n :
        poids.append(3**i)
        i += 1

    #on équilibre chaque côté l'un après l'autre
    cote1 = [x]
    cote2 = []

    while sum(cote1) != sum(cote2):
        equilibre(cote2, sum(cote1))
        equilibre(cote1, sum(cote2))
       
    #on récupère la liste des bk
    cote1[0] = 0
    b = []
    i = 0
    while i <= n:
        if 3**i in cote1:
            b.append(-1)
        elif 3**i in cote2:
            b.append(1)
        else:
            b.append(0)
        i+=1

    return b
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

Suivante

Retourner vers Maths, physique, informatique et autre...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 9 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Offre de test des nouveautés de rentrée 2024 par Casio. Enseignant(e), reçois gratuitement 1 exemplaire, à ton choix, de la Graph Light ou bien de la Graph Math+
14€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 31 Octobre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 90+E d'ici le 31 Décembre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 25 d'ici le 31 Décembre 2024
8€ remboursés par Casio sur l'achat de ta calculatrice Graph Math+ d'ici le 31 Octobre 2024
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2024
5€ de remise immédiate sur l'achat de ta calculatrice TI-83 Premium CE Edition Python chez les revendeurs partenaires
4€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced Edition Python chez les revendeurs partenaires
3€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced chez les revendeurs partenaires
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234567891011121314
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1130 utilisateurs:
>1116 invités
>10 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)