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 :

comment tester si une case d'un tableau est vide


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut comment tester si une case d'un tableau est vide
    Salut !
    J'ai une matrice avec une structure, que je remplis au fur et a mesure, les case sont vide au début, je dois tester si la case est vide je remplis une case avec un entier précisément un zéro , mon problème je sais pas comment interpréter
    si (tab[i][j]== vide) en code C,

  2. #2
    Membre éclairé Avatar de JulieCarree
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 50
    Par défaut
    bonjour,
    il faut , à mon avis choisir une valeur d'initialisation pour les elements de la matrice que tu considereras comme vide, pas forcement zero .

  3. #3
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    En effet, pour développer l'idée de JulieCarree, j'ajouterais que si tu cherches à stocker des nombres...

    • Si tu stockes des valeurs "positives" uniquement, alors utilise le type int, et initialise à -1 chaque case de ton tableau
    • Si tu stockes des valeurs positives et négatives, il te faudra choisir une limite inatteignable dans ce que tu fais (MAX_INT ?...), et tu l'utilises pour initialiser chaque case
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si ton tableau a des "cases", je suppose que c'est pour un jeu ?

    Dans ce cas là, il est aussi possible de stocker un pointeur vers une structure détaillant le contenu du tableau de la case.

    Une case "vide" sera donc une case pour laquelle le pointeur stocké sera à NULL.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par khadi8 Voir le message
    Salut !
    J'ai une matrice avec une structure, que je remplis au fur et a mesure, les case sont vide au début
    Salut
    C'est là que t'as tout faux. Une zone mémoire n'est jamais jamais jamais vide. Il y a toujours une valeur.
    D'où les réponses de tous les autres. Tu commences par remplir ton tableau avec une valeur très spéciale (ce qu'on nomme en prog une "valeur sentinelle"). Ensuite, tu peux tester si (tab[i][j]== valeur_speciale). Mais ça ne peut fonctionner que si la valeur spéciale ne se retrouve pas accidentellement dans les valeurs réelles.

    C'est d'ailleurs un peu ce que tu fais déjà quand tu dis
    Citation Envoyé par khadi8 Voir le message
    si la case est vide je remplis une case avec un entier précisément un zéro
    Pourquoi mets-tu précisément un "zéro" ? A mon avis c'est pour pouvoir plus tard savoir laquelle était "vide" (dans le sens "pour l'algorithme" et non dans le sens littéral) et laquelle ne l'était pas...

    Par ailleurs il y a un autre détail qu'on peut remarquer dans ton post: si pour toi les cases sont vides au début, nul besoin de tester si une case[i][j] est vide puisque tu sais qu'elle l'est donc te suffit de tout remplir à zéro sans te préoccuper de ce qu'il y avait avant.
    On arrive aussi à cette conclusion en suivant la logique normale de nos posts. Commencer par mettre une valeur spéciale dans toutes les cases puis tester si chaque case contient cette valeur spéciale pour alors y mettre zéro => autant mettre directement zéro tout de suite...
    Pour ça, te suffit d'appeler memset(tab, 0, nb_octets_du_tableau)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    C'est là que t'as tout faux. Une zone mémoire n'est jamais jamais jamais vide. Il y a toujours une valeur.
    C'est précisément la remarque que je voulais faire en lisant le message original.

    Vide n'a pas de sens en C, contrairement à Java par exemple, où les objets valent null à la création.

    Il y a toujours des valeurs dans la mémoire en C et les variables prennent ces valeurs quand on les crée à cet endroit. Endroit qu'on ne choisit pas, valeurs à cet endroit qu'on ne peut pas déterminer à l'avance, donc des valeurs initiales imprévisibles...

    La seule exception est celle des variables statiques et globales que le compilateur initialise explicitement à zéro ou à NULL (qui en général vaut zéro).

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Vide n'a pas de sens en C, contrairement à Java par exemple, où les objets valent null à la création.
    Euh... null c'est quand-même une valeur palpable non ??? Donc c'est pas "vide"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Et tu les palpes les NullPointerExceptions aussi ?



    "Vide" ne veut pas dire grand chose en informatique, null du Java se rapproche sûrement le plus de ce que veut faire le PO.

Discussions similaires

  1. Tester si une case dans un tableau est non vide
    Par mohsenuss91 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 28/12/2013, 16h44
  2. vérifier si une case d'un tableau est vide
    Par chercheur111 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/07/2012, 18h24
  3. Comment tester qu'une ligne d'un Msflexgrid est vide
    Par bahboubacar2 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 27/03/2010, 12h36
  4. comment tester si une case est cochée dans un fenêtre d'impression
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/08/2009, 16h13
  5. Comment tester si une valeur de type entier est nulle ?
    Par kikidrome dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2009, 00h53

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