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

Ada Discussion :

Comment calculer une racine carrée ?


Sujet :

Ada

  1. #1
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut Comment calculer une racine carrée ?
    Bonjour,

    J'essaie de calculer la racine carrée d'un nombre, mais je n'arrive pas à trouver l'équivalent d'un SQRT() - j'ai bien vu une possiblilité au niveau de la création d'une fonction, mais j'avoue ne pas maîtriser du tout !
    J'ai vu aussi que l'on pouvait créer un package, mais là aussi j'ai toujours des messages d'erreur.
    Je joins ci-dessous, deux tentatives infructueuses :

    1ère tentative

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    --------------------------------------------
    -- Fichier AdaS01_04.adb
    -- Exercice 1
    -- ED Sujets 01
     
    -- Ecrit par Pascal RICHARD
    -- le 17 10 2006 - 00:43
    -- modifié le 
    -- version 1.0
     
    -- compilateur GNAT 3.12p
    -- OS - WinXP SP2
    --------------------------------------------
     
    with Ada.Text_Io; use Ada.Text_Io;
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
    with Ada.Float_Text_Io; use Ada.Float_Text_Io;
     
     
     
    with Math_functions; use Math_functions;
     
    procedure essai is
     
    Package Math_functions is
       function Sqrt(X:Float) return Float;
    end Math_functions;
     
    begin
     
    X:=25;
    put(Math_functions.Sqrt(X));
    new_line;
     
    end essai;
    Message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math_functions.adb file "math_functions.ads" not found
    2nde tentative : pensant que ce nouveau code permettrait de créer le fichier .adb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Package Math_functions is
       function Sqrt(X:Float) return Float;
    end Math_functions;
    Message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math_functions.adb file "math_functions.ads" not found
    En fait, je débute en ADA et je "merdoie allègrement !!!"

    Quelqu'un aurait-il la patience de m'aider ?

    Merci

  2. #2
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    J'ai trouvé une réponse mathématique qui, à mon niveau simplifiera l'écriture...

    La racine carrée d'un nombre X correspond, en mathématiques, , soit en ADA => a**(1/b)



    ++

  3. #3
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Un problème ne venant pas seul, un nouveau se pose...
    L'opérateur ** utilisant les Integer, comment puis-je faire pour obtenir un résultat en Float ?

    Merci

  4. #4
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    Et si tu initialise ta valeur en Float, est ce qu'il ne va pas le prendre en compte?
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  5. #5
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Non justement !

    Il n'accepte pas que la valeur soit en Float.
    Donc je m'étais dit, utilisons un exposant Integer, ce qui donnait la formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X**(1/2) avec 1/2 en integer
    Le problème est qu'il considère 1/2 comme valant 0 et le résultat retourné est égal à 1, puisqu'une valeur élevée à la puissance 0 donne 1.

    Là, je tourne un peu en rond...

  6. #6
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    Et si tu met directement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X**(0.5) --Valeur en Float.
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  7. #7
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    j'ai essayé

    mais comme je le disais plus haut, ** n'accepte pas le Float

    ++

  8. #8
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    J'ai fait l'essai suivant (cf code ci-dessous - partie en rouge)

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    -- ********************************************************
    -- Nom Prog : ED14.adb
    -- Type : Application
    -- Sujet : Ecriture dans un fichier
    --
    -- Auteur : P. RICHARD
    -- Version : 1.1
    -- Creation : 21/11/2006 - 00:47
    -- Dern. Modif : 
    --
    -- Compilateur : GNAT 3.12p
    -- Remarques : Environnement Windows XP SP2
    -- ********************************************************
    -- ********************************************************
    -- Exemple d'utilisation des fichiers texte
    -- Ecriture de "notes" dans un fichier
    -- Structure Num_Ordre Num_devoir Note
    -- ********************************************************
    
    with ada.Text_Io;
    use ada.Text_Io;
    
    procedure ED14 is
    
       subtype Mes_Entiers is Integer range 0..100;
       subtype Mes_Reels is Float range 0.0..2000.0;
       
       F_In : File_Type;
       Sum_Notes              : Mes_Reels;
       Somme_Carre_DNotes     : Mes_Reels;
       Carre_Somme_DNotes     : Mes_Reels;
       Variance               : Mes_Reels;
       --Ecart_type             : Mes_Reels;
       Exposant               : Mes_Entiers;
       Num_Ordre              : Mes_Entiers;
       Num_Devoir             : Mes_Entiers;
       Note                   : Mes_Reels;
       Nb_Enregistrements     : Mes_Entiers := 0;
       Nom_Fichier : String := "FICH1.dat";
       Nom : String (1 .. Nom_Fichier'Length);
       
       package Mes_Entiers_Io is new Integer_Io(Mes_Entiers);
       use Mes_Entiers_Io;
       package Mes_Reels_Io is new Float_Io(Mes_Reels);
       use Mes_Reels_Io;
       
    begin
    
       put_line("Debut - ED14");
       new_line;
       put_line("Lecture de donnees dans FICH1.dat");
       put_line("---------------------------------");
       new_line;
       
       Open (F_In, In_File, Nom_Fichier);
       Get (F_In, Nom);
       put("Nom du fichier en lecture : ");
       put(Nom);
       new_line(2);
       
       put_line("Num_Ordre  Num_Devoir  Note");
       new_line;
       
       while not End_Of_File (F_In) loop
       
          Nb_Enregistrements := Nb_Enregistrements + 1;
          
          Get (F_In, Num_Ordre); Get (F_In, Num_Devoir); Get (F_In, Note);
          
          put(Num_Ordre, width => 5); put("     ");
          put(Num_Devoir, width => 5); put("     ");
          put(Note, FORE => 3, AFT => 2, EXP => 0);
          
          Sum_Notes := Sum_Notes + Note;
          Somme_Carre_DNotes := Somme_Carre_DNotes + (Note * Note);
             
          new_line;
          
       end loop;
       
       Carre_Somme_DNotes := (Sum_Notes * Sum_Notes)/float(Nb_Enregistrements);
       Variance := (Somme_Carre_DNotes - Carre_Somme_DNotes)/float(Nb_Enregistrements);
       new_line;
       put(Variance);
       new_line;
       Exposant := 1/2;
       put(float(25**(Exposant)));
       --Ecart_type := Variance**Exposant;
       new_line;
       --put(Ecart_type);
       
       new_line;
       put("Nombres d'enregistrements : ");
       put(Nb_Enregistrements);
       
       new_line;
       put("Somme des notes           : ");
       put(Sum_Notes, FORE => 4, AFT => 2, EXP => 0);
       
       new_line;
       put("Moyenne                   : ");
       put(Sum_Notes/float(Nb_Enregistrements), FORE => 4, AFT => 2, EXP => 0);
       
       new_line;
       put("Ecart-type                : ");
       --put(Ecart_type, FORE => 4, AFT => 2, EXP => 0);
       
       new_line;
       put("Variance                  : ");
       put(Variance, FORE => 4, AFT => 2, EXP => 0);
       
       Close (F_In);
       new_line;
       put_line("Fin - ED14");
       
    end ED14;
    Résultat (en rouge) :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    Debut - ED14
    
    Lecture de donnees dans FICH1.dat
    ---------------------------------
    
    Nom du fichier en lecture : FICH1.dat
    
    Num_Ordre  Num_Devoir  Note
    
       10         1       8.00
        1         1      10.00
        9         1      18.00
        2         1       4.00
        8         1      15.00
        3         1      16.00
        7         1       9.00
        4         1      14.00
        5         1       9.00
        6         1       7.00
       11         1       9.00
    
     1.68760E+01
     1.00000E+00
    Nombres d'enregistrements :   11
    Somme des notes           :  119.00
    Moyenne                   :   10.82
    Ecart-type                :
    Variance                  :   16.88
    Fin - ED14

  9. #9
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 119
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Poseidon62
    Bonjour,

    J'essaie de calculer la racine carrée d'un nombre, mais je n'arrive pas à trouver l'équivalent d'un SQRT()
    Un certain nombre de fonctions mathematiques pour les types flottants sont definies dans le generique du standard qui s'appelle :
    Ada.Numerics.Generic_Elementary_Functions

    Tu y trouveras Sqrt ainsi qu'une fonction puissance (e.g. **)

    A+

    Juan

  10. #10
    Membre du Club Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Bonsoir,

    J'ai réussi en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with Ada.Numerics.Elementary_Functions;
    use Ada.Numerics.Elementary_Functions;
    pour vos réponses

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

Discussions similaires

  1. Comprendre mon exercice : formule récurrente de calcul d'une racine carrée
    Par djmhdi dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 15/01/2015, 18h30
  2. Réponses: 3
    Dernier message: 07/08/2013, 12h44
  3. Calculer la racine carrée d'un nombre d'une façon particulière
    Par Roud9 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 29/09/2010, 03h11
  4. Calculer une racine carrée
    Par eldiablo7 dans le forum C
    Réponses: 1
    Dernier message: 21/04/2009, 21h43
  5. Comment calculer une dérivée
    Par guintolli dans le forum Mathématiques
    Réponses: 6
    Dernier message: 06/02/2006, 20h05

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