IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

programme qui calcule la racine carré


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut programme qui calcule la racine carré
    bonjour j'ai du souci avec se code apparemment il y a une coquille mais j'arrive pas a la trouver c'est un programme quui doit calculer la racine carrée d'une valeur

    début
    r <- 1
    répéter
    r <- (r + n / r) / 2
    fin

    adresse contenu signification
    2997 : 1 ; ;Placer
    2998 : 1 ; ;le nombre 1
    2999 : 1000 ; ;à l’adresse 1000
    3000 : 0
    3001 : 1 ; ; Placer
    3002 : 2 ; ;le nombre 2
    3003 : 1020 ; ;à l’adresse 1020
    3004 : 0
    3005 : 2 ; ; Diviser
    3006 : 2000 ; ;le contenu de l’adresse 2000
    3007 : 1000 ; ;par le contenu de l’adresse 1000
    3008 : 1010 ; ;et placer le résultat à l’adresse 1010 (n/r)
    3009 : 4 ; ; Ajouter
    3010 : 2000 ; ;le contenu de l’adresse 2000
    3011 : 1010 ; ;au contenu de l’adresse 1010
    3012 : 1010 ; ;et placer le résultat à l’adresse 1010 (r+n/r)
    3013 : 2 ; ;Diviser
    3014 : 1010 ; ;le contenu de l’adresse 1010
    3015 : 1020 ; ;par le nombre 2
    3016 : 1000 ; ;et placer le résultat à l’adresse 1000 r=(r+n/r)/2
    3017 : 3 ; ;continuer avec une autre instruction :
    3018 : 3005 ; ;la prochaine instruction est à l’adresse 3005
    3019 : 0
    3020 : 0


    le code de python est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    def affecte(valeur, adresse) : m[adresse] = valeur
    def divise(x, y, adresse) : m[adresse] = m[x] / m[y]
    def ajoute(x, y, adresse) : m[adresse] = m[x] + m[y]
    def encore(adresse) : m['pc'] = adresse
    op = {1 : affecte, 2 : divise, 3 : encore, 4 : ajoute}
    m = {}
    m['pc'] = 2997
    m[2997]  =  [1,  1, 1000] 
    m[3001]  =  [1,  2, 1020] 
    m[3005]  =  [2,  2000, 1000, 1010] 
    m[3009]  =  [4,  2000, 1010, 1010] 
    m[3013]  =  [2,  1010, 1020, 1000] 
    m[3017]  =  [3,  3005]
    m[2000]  =  2.0
    def run(fois) : 
    	for n in range(4 * fois) : 
    		a = m['pc']  
    		apply(op[m[a][0]], m[a][1:])
    		if m[a][0] != 3 : 
    			m['pc'] += 4 
    	return m[1000]


    j'ai donner a 2000 la valeur de 2.0

    mais sa marche pas merci de m'aider

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 480
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    L'énoncé est incomplet et comporte une erreur.

    Le calcul est basé sur la formule:

    r(i+1) = (r(i) + n/r(i))/2

    avec initialement:
    r(0) = 1
    n = 2 (on cherche ici la racine de 2)

    En utilisant tes mémoires:

    r(i) => m[1000] avec valeur initiale=1
    n => m[2000] avec valeur initiale = 2
    le 2 de la division par 2 => m[1020]
    le résultat est dans m[1000] (dernier calcul de r(i+1))

    Voilà comment on peut faire pour calculer la racine, en collant au plus près de l'énoncé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    m = {}
    m[1000] = 1 # = r
    m[1020] = 2 # = 2
    m[2000] = 2 # = n
     
    for i in range(0, 5):
        m[1010] = m[2000] / m[1000] # n/r
        m[1010] = m[1010] + m[1000] # n/r+r
        m[1000] = m[1010] / m[1020] # (n/r+r)/2
        print(m[1000])
    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1.5
    1.41666666667
    1.41421568627
    1.41421356237
    1.41421356237
    L'erreur de l'énoncé est: ligne 3010:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3010 : 2000 ; ;le contenu de l’adresse 2000
    NON: il ne s'agit pas de l'adresse 2000 mais de l'adresse 1000: on est en train de calculer le "+r" de "n/r+r"

    Attention: si le code ci-dessus s'exécute en Python 2.7, il faut mettre au tout début de code la ligne: "from __future__ import division". Sinon, la division entre 2 nombres entiers sera une division entière, et les résultats ici seront faux (on trouvera "1"). On pourrait aussi initialiser avec uniquement des nombres flottants (1.0, 2.0).

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    en fait on doit impérativement utiliser se code donnée au début, donc on doit pas changer l'enoncer faut juste trouver l'erreur
    mais vous dites que l'erreur c'est en 3010 ? je vois pas pk ? car 3010 ajouter a l'adresse 2000 !!!

    merci

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 480
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par l1informatique Voir le message
    mais vous dites que l'erreur c'est en 3010 ? je vois pas pk ? car 3010 ajouter a l'adresse 2000 !!!
    Mais j'ai expliqué pourquoi:

    NON: il ne s'agit pas de l'adresse 2000 mais de l'adresse 1000: on est en train de calculer le "+r" de "n/r+r"

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    j'ai pas compris si l'erreur est a 1000 c a d ??

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    3006 : 2000 ; ;le contenu de l’adresse 2000             # 2000 == n
    3007 : 1000 ; ;par le contenu de l’adresse 1000         # 1000 == r
    3008 : 1010 ; ;et placer le résultat à l’adresse 1010   # 1010 == (n/r)
    3009 : 4 ; ; Ajouter
    3010 : 2000 ; ;le contenu de l’adresse 2000             # 2000 == n (voir plus haut)
    3011 : 1010 ; ;au contenu de l’adresse 1010             # 1010 == (n/r) (voir plus haut)
    3012 : 1010 ; ;et placer le résultat à l’adresse 1010   # 1010 == n + (n/r) Ce qui est faux, on veut r + (n/r) soit 1000 + 1010

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    donc quand on fait
    >>> run(5)
    5.015247601944898
    >>> run(4)
    5.0

    est ce que c'est correcte car j'ai exécuté le programme ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme de calcul de racine carrée entière par défaut.
    Par Temari8 dans le forum Général Python
    Réponses: 2
    Dernier message: 07/12/2013, 19h14
  2. Réponses: 2
    Dernier message: 17/02/2007, 05h43
  3. comment faire un programme qui calcul la somme ?
    Par jahjouna dans le forum C++
    Réponses: 18
    Dernier message: 13/12/2006, 00h33
  4. Comment calculer une racine carrée ?
    Par Poseidon62 dans le forum Ada
    Réponses: 9
    Dernier message: 28/11/2006, 00h29
  5. programme fortran90 qui calcule les racines d'une equation de deg 3 ?
    Par casier dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/06/2006, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo