Mathématiques en seconde générale et technologique – Algorithmes

Première puissance supérieure/inférieure à une valeur donnée

Déterminer la première puissance d'un nombre positif donné supérieure ou inférieure [au sens large] à une valeur donnée.

Pour les seuls cas favorables

def plafond(q, v) :
    n, p = 0, 1
    while p < v :
        n += 1
        p *= q
    return n, p
    
def seuil(q, v) :
    n, p = 0, 1
    while p > v :
        n += 1
        p *= q
    return n, p

def run_plafond(q, v) :
    n, p = plafond(q, v)
    print("La première puissance de {} supérieure à {} est {}**{} ≈ {}."
              .format(q, v, q, n, p))

def run_seuil(q, v) :
    n, p = seuil(q, v)
    print("La première puissance de {} inférieure à {} est {}**{} ≈ {}."
              .format(q, v, q, n, p))

run_plafond(1.1, 2)
run_plafond(1.1, 1.1)
run_seuil(0.8, 0.5)
run_seuil(0.8, 0.8)

La première puissance de 1.1 supérieure à 2 est 1.1**8 ≈ 2.1435888100000016.
La première puissance de 1.1 supérieure à 1.1 est 1.1**1 ≈ 1.1.
La première puissance de 0.8 inférieure à 0.5 est 0.8**4 ≈ 0.40960000000000013.
La première puissance de 0.8 inférieure à 0.8 est 0.8**1 ≈ 0.8.

Pour le cas général

def plafond(q, v) :
    if v <= 1 :
        return 0, 1
    if q <= 1 :
        return None
    n, p = 0, 1
    while p < v :
        n += 1
        p *= q
    return n, p
    
def seuil(q, v) :
    if v >= 1 :
        return 0, 1
    if q >= 1 :
        return None
    n, p = 0, 1
    while p > v :
        n += 1
        p *= q
    return n, p

def run_plafond(q, v) :
    res = plafond(q, v)
    if res :
        n, p = res
        print("La première puissance de {} supérieure à {} est {}**{} ≈ {}."
                  .format(q, v, q, n, p))
    else :
        print("Il n'y a pas de puissance de {} supérieure à {}."
                  .format(q, v))
 
def run_seuil(q, v) :
    res = seuil(q, v)
    if res :
        n, p = res
        print("La première puissance de {} inférieure à {} est {}**{} ≈ {}."
                  .format(q, v, q, n, p))
    else :
        print("Il n'y a pas de puissance de {} inférieure à {}."
                  .format(q, v))

def run(q, v) :
    run_plafond(q, v)
    run_seuil(q, v)

run(1.1, 0.5)
run(1.1, 1)
run(1.1, 2)
run(0.8, 0.5)
run(0.8, 1)
run(0.8, 2)
run(1, 0.5)
run(1, 1)
run(1, 2)

La première puissance de 1.1 supérieure à 0.5 est 1.1**0 ≈ 1.
Il n'y a pas de puissance de 1.1 inférieure à 0.5.
La première puissance de 1.1 supérieure à 1 est 1.1**0 ≈ 1.
La première puissance de 1.1 inférieure à 1 est 1.1**0 ≈ 1.
La première puissance de 1.1 supérieure à 2 est 1.1**8 ≈ 2.1435888100000016.
La première puissance de 1.1 inférieure à 2 est 1.1**0 ≈ 1.
La première puissance de 0.8 supérieure à 0.5 est 0.8**0 ≈ 1.
La première puissance de 0.8 inférieure à 0.5 est 0.8**4 ≈ 0.40960000000000013.
La première puissance de 0.8 supérieure à 1 est 0.8**0 ≈ 1.
La première puissance de 0.8 inférieure à 1 est 0.8**0 ≈ 1.
Il n'y a pas de puissance de 0.8 supérieure à 2.
La première puissance de 0.8 inférieure à 2 est 0.8**0 ≈ 1.
La première puissance de 1 supérieure à 0.5 est 1**0 ≈ 1.
Il n'y a pas de puissance de 1 inférieure à 0.5.
La première puissance de 1 supérieure à 1 est 1**0 ≈ 1.
La première puissance de 1 inférieure à 1 est 1**0 ≈ 1.
Il n'y a pas de puissance de 1 supérieure à 2.
La première puissance de 1 inférieure à 2 est 1**0 ≈ 1.
Lionel Avon