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

 C++ Discussion :

[DEBUTANT] utilisation de NULL


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Par défaut [DEBUTANT] utilisation de NULL
    Salut,

    je voudrais savoir si je peux utiliser le mot clé NULL pour designer un element d une matrice qui ne contient pas encore de valeur.
    Le but serait de remplir une matrice de zero en verifiant un par un si les elements de cette matrice n ont pas deja une valeur

    J utilise pour cela la bibliotheque uBLAS

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    for(int i=0; i<m.size1(); ++ i)
    {for(int j=0; j<m.size2(); ++ j)
    {
    if( m(i,j)==null)
    m(i,j)=0;
    }}
    je vous remercie.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    D'abord, fait bien attention au fait qu'il faille utiliser le mot clé NULL (en majuscules) et non le mot null (en minuscule)...

    Ensuite, il faut savoir que le mot clé NULL n'est en définitive, et sauf erreur de ma part qu'un #define sur... une valeur nulle (mais que *certaines* implémentation ont choisit une autre valeur pour le définir)...

    Enfin, selon le type de valeurs contenus dans ta matrice, j'aurais, par pure et simple habitude, tendance à utiliser une valeur du type de la matrice (qui, pour info, n'est pas forcément composée de types de base )

    Ainsi, si la matrice devait etre remplie de caractères, j'utiliserait plutot le code
    si elle est remplie d'entiers, j'utiliserais tout simplement le code
    et si elle devait etre remplie de pointeurs, à ce moment là, j'utiliserais effectivement le mot clé NULL...

    Quant aux éventuelles matrices remplies de réel (float ou double), il faut etre attentif au fait qu'une "comparaison entre deux réels n'est jamais vraie"

    Ceci dit, à moins d'avoir une autre source "externe" d'informations concernant le fait qu'un élément de la matrice a bel et bien déjà été déterminé, en travaillant proprement, je ne vois pas *vraiment* l'intérêt de faire une telle boucle: les éléments qui n'ont pas été définis... n'ont par défaut pas de valeur (ou une valeur nulle si c'est correctement codé )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    pour résumer: je te conseille fortement de n'utiliser le mot clé NULL que pour des pointeurs. Donc si ta matrice est une matrice de types de base (int, par exemple) il faut que tu trouves autre chose.

    Sinon, je ne suis pas d'accord avec:
    Citation Envoyé par koala01
    Quant aux éventuelles matrices remplies de réel (float ou double), il faut etre attentif au fait qu'une "comparaison entre deux réels n'est jamais vraie"
    Car ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float f1 = 1;
    float f2 = 1;
    if (f1==f2)
    {
    	printf("Une comparaison entre deux réels (float ou double) peut être vraie ;)" );
    }
    M'affiche bien le printf. A moins que j'ai mal compris ce que tu voulais dire.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Par défaut
    bon en fait la solution que j ai trouve consiste d abord à remplir mamatrice de 0, et à écrire ensuite par dessus les 0 les valeurs qui m interesse. Mais du coup c est un peu une perte de temps au niveau du calcul puisque je remplie 2 fois certaines "cases".

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Concernant les imprécisions des flottants : il y a problème à partir du moment où on manipule des flottants issus de calculs. Mais si je mets 0.f dans un float et que je le compare immédiatemment à 0.f, il n'y a aucune chance que le test échoue.

    Voir la FAQ :
    http://c.developpez.com/faq/cpp/?pag...ions_flottants

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Autant pour moi, j'aurais du préciser "calculés" dans mon explication
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    [mode boulet ON]
    Bon, je pinaille, mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    float f1 = 1/2;
    float f2 = 1/2;
    float f3 = 2/4;
    if ( (f1==f2) && (f1==f3) )
    {
    	printf("ya pas rien là?");
    }
    m'affiche également le printf...
    [mode boulet OFF]

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par r0d
    [mode boulet ON]
    Bon, je pinaille, mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    float f1 = 1/2;
    float f2 = 1/2;
    float f3 = 2/4;
    if ( (f1==f2) && (f1==f3) )
    {
    	printf("ya pas rien là?");
    }
    m'affiche également le printf...
    [mode boulet OFF]
    1/2 C'est pas un calcul

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par gege2061
    1/2 C'est pas un calcul
    Si, mais pas en flottant. 1/2 c'est un calcul en entier, qui vaut 0 (entier) et qui est caste pour etre stocke dans un float. Si je me souvien bien, 0 est code de facon exacte en float, donc il n'y a pas de probleme a ce niveau la.

  10. #10
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    float f1 = 3;
    float f2 = 3;
    float f3 = 6;
     
    f1 /= 2;
    f2 /= 2;
    f3 /= 4;
     
    if ( (f1==f2) && (f1==f3) )
    {
         printf("ya pas rien là?");
    }
    pour mettre tout le monde d'accord...

  11. #11
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Héhé, je ne pensais pas qu'on pouvais aller si loin sur un détail comme celui-ci, mais personnellement, ce genre de considérations m'amusent beaucoup

    Bon, l'exemple de Julius_Dev fonctionne (on passe bien par le printf).
    Alors en fait, je vous propose de me trouver un exemple où ça ne marche pas

  12. #12
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    Dans ce cas, on n'a pas l'égalité :

    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
     
    float f1 = 4;
    float f2 = 4;
    float f3 = 8;
     
    f1 /= 2;
    f2 /= 2;
    f3 /= 4;
     
    for(int k = 0 ; k<20 ; k++)
         f1 /= 3;
    for(int k = 0 ; k<20 ; k++)
         f1 *= 3;
     
    if ( (f1==f2) && (f1==f3) )
    {
         printf("ya pas rien là?");
    }

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il y a un exemple très simple dans la FAQ (plus précisément le lien que j'ai donné...)

  14. #14
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Laurent Gomila
    Il y a un exemple très simple dans la FAQ (plus précisément le lien que j'ai donné...)
    Bah oui, j'avais vu, mais chez moi le test renvoie vrai également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    float f1 = 0.1f;
    float f2 = 1.1f;
    float f3 = f2 - f1;
     
    // Version incorrecte ne tenant pas compte des imprécisions
    if (f3 == 1.0f)
    {
    	printf("...");
    }
    Avec Visual2005.

  15. #15
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    [TROLL MODE ON]heuu, on parle d'un BON compilateur [TROLL MODE OFF]

    *Peut etre* ton compilateur implémente-t-il déjà l'utilisation de la limite epsilon, mais, ceci dit, passé une certaine limite, on n'est meme jamais sur que 1 vaille vraiment 1... (c'est peut etre 1.000000000000001, mais, ce n'est plus 1 )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. [debutant]Utiliser des matrices en C
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 20h45
  2. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 23h01
  3. [debutant]Utiliser friend method
    Par Battosaiii dans le forum Débuter
    Réponses: 4
    Dernier message: 06/11/2005, 11h23
  4. [debutant]utilisation de bcp
    Par christophebmx dans le forum Outils
    Réponses: 2
    Dernier message: 19/08/2005, 09h47
  5. [Debutant] Utilisation de la touche "Entrée"
    Par Dextro dans le forum Composants
    Réponses: 2
    Dernier message: 28/04/2005, 09h42

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