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

Langage Perl Discussion :

[Nombre Complexe]affichage formatte


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [Nombre Complexe]affichage formatte
    Bonjour,

    J'ai des soucis pour afficher un nombre complexe sous forme polaire.Je m'explique: j'ai réalisé le premier exemple suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use strict;
    use Math::Complex;
     
    my $z1=cplxe(1,pi/4);
     
    print "z1=$z1\n";
     
    $z1->display_format('style'=>'cartesian', 'format'=>'%.3f');
     
    print "z1=$z1\n";
    Les résultats sont corrects
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    z1=[1,pi/4]
    z1=0.707+0.707i
    Le deuxième exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    use strict;
    use Math::Complex;
     
    my $z1=cplx(1,1);
     
    print "z1=$z1\n";
     
    $z1->display_format('style'=>'polar');
    print "z1=$z1\n";
     
    $z1->display_format('style'=>'polar','polar_pretty_print'=>0);
    print "z1=$z1\n";

    Les résultats sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    z1=1+i
    z1=[1.4142135623731,pi/4]
    z1=[1.4142135623731,0.785398163397448]
    Je souhaite maintenant limiter le nombre de décimales à 3, pour cela je rajoute 'format'=>'%.3f'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use strict;
    use Math::Complex;
     
    my $z1=cplx(1,1);
    print "z1=$z1\n";
     
    $z1->display_format('style'=>'polar');
    print "z1=$z1\n";
    $z1->display_format('style'=>'polar','polar_pretty_print'=>0);
     
    print "z1=$z1\n";
    $z1->display_format('style'=>'polar','polar_pretty_print'=>0,'format'=>'%.3f');
     
    print "z1=$z1\n";
    Les résultats sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    z1=1+i
    z1=[1.4142135623731,pi/4]
    z1=[1.4142135623731,0.785398163397448]
    Use of uninitialized value in sprintf at C:/Perl/lib/Math/Complex.pm line 1463.
    Use of uninitialized value in sprintf at C:/Perl/lib/Math/Complex.pm line 1463.
    z1=[1.414,0.000]
    Je n'obtiens pas

    Merci de m'aider

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    C'est juste un bug de Math::Complex (étrange qu'il soit passé inaperçu dans un module du Core ?), il te suffit de modifier la 1463ème ligne de Math/Complex.pm : tu remplaçes ce bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	if (defined $format) {
    	    $r     = sprintf($format, $r);
    	    $theta = sprintf($format, $theta) unless defined $theta;
    	} else {
    	    $theta = $t unless defined $theta;
    	}
    par celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	if (defined $format) {
    	    $r     = sprintf($format, $r);
    	    $theta = sprintf($format, $t) unless defined $theta; #modifiée
    	} else {
    	    $theta = $t unless defined $theta;
    	}
    Et y a plus de problème !!

    (J'ai déjà envoyé un report de bug à l'auteur du module, inutile de lui envoyer un double)

    --
    Jedaï

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [Nombre Complexe]affichage formatte
    Ca marche Nickel-chrome

    Merci beaucoup



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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/10/2013, 20h14
  2. Problème d'affichage d'un nombre complexe dans GUI
    Par clem3900 dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/05/2013, 13h34
  3. Les nombres complexe et delphi
    Par wikers dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 11h47
  4. [LG]Nombres complexes et forme polaire
    Par chavernac dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2005, 18h36
  5. Formatage des nombres à l'affichage
    Par nbutin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 13/07/2004, 10h54

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