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

MATLAB Discussion :

Problèmes avec inputdlg à l'intérieur d'une boucle


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Problèmes avec inputdlg à l'intérieur d'une boucle
    Bonjour à tous,

    Je suis actuellement en train de créer un petit programme pour faire des éléments finis relativement simple (une dimensions seulement pour démarrer) et pour ça je dois créer un vecteur de forces qui donne la force appliquée à chaque noeud des éléments. Mais plutot que de devoir changer ça dans le programme, je voudrais créer une boucle avec un nombre d'itération qui égale le nombre de noeuds et que pour chaque noeud, l'utilisateur puisse rentrer la valeur de force qu'il souhaite en utilisant inputdlg.

    voici le programme tel qu'il est actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %vecteur force
    N=3; %nombre d'éléments
    F=zeros(N+1,1);
    for i=1:N+1
        F(i)=inputdlg('force axiale au noeud i')
    end
    sauf que matlab me propose de rentrer une valeur et une fois cliquer sur OK, il me donne cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    The following error occurred converting from cell to double:
    Error using double
    Conversion to double from cell is not possible.
     
    Error in EF_barre_traction (line 32)
        F(i)=inputdlg('force axiale au noeud i')
    J'en ai parlé à un autre ami et sur son ordinateur avec ce code, ça marche...donc vraiment incompréhensible, du moins pour moi.

    Si quelqu'un a une solution, merci d'avance!!

    PS : je n'arrive pas à faire en sorte que inputdlg affiche "force axiale au noeud 1" puis "...noeud 2", etc... jusqu'au nombre de noeuds souhaité. j'ai essayé avec la fonction num2strg mais ça n'a pas marché..

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voir Conversion to double from cell is not possible.

    La fonction inputdlg retourne un tableau de cellules contenant les chaînes de caractères rentrées, or F=zeros(N+1,1); initialise F de type double.
    Initialise F avec cell :
    et utilise str2double après la boucle pour obtenir les valeurs numériques.

    C'est bien num2str (ou sprintf) qu'il te faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inputdlg( num2str(i, 'force axiale au noeud %d') )

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Salut winjerome,

    Merci de ta réponse!
    alors le truc marrant, c'est que j'ai essayé avec la fonction cell et str2double mais ça n'a pas marché, par contre en laissant la fonction zeros et avec str2double, je n'ai plus de problème.

    néanmoins problème résolu, merci encore!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laulau301090 Voir le message
    j'ai essayé avec la fonction cell et str2double
    Parce que tu l'as sans doute inséré dans la boucle, j'ai bien précisé après.

    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    F = cell(N+1,1);
    for i=1:N+1
        F(i) = inputdlg( num2str(i, 'force axiale au noeud %d') );
    end
    valeurs = str2double(F)
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    valeurs = zeros(N+1,1);
    for i=1:N+1
        valeurs(i) = str2double( inputdlg(num2str(i, 'force axiale au noeud %d')) );
    end
    Le tout est de ne pas mélanger valeurs numériques et cellules.

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

Discussions similaires

  1. [MySQL] Lire plusieurs tables avec des join ou requête à chaque fois à l'intérieur d'une boucle
    Par padre.cedano dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/01/2015, 09h44
  2. Réponses: 12
    Dernier message: 11/04/2006, 11h41
  3. [VB6] Problème avec la touche 0 dans une MaskEdBox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/03/2006, 09h47
  4. Réponses: 8
    Dernier message: 07/02/2006, 18h31
  5. Problèmes avec des cases à cocher et une liste déroulante
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 10h52

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