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

Affichage des résultats du sondage: Qu'est-ce que ça affiche ?

Votants
12. Vous ne pouvez pas participer à ce sondage.
  • Affiche "1" puis "4"

    5 41,67%
  • Affiche "3" puis plante

    0 0%
  • Affiche "3" puis "4"

    7 58,33%
  • Plante

    0 0%
  1. #1
    Membre expérimenté
    Inscrit en
    août 2010
    Messages
    700
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 700
    Points : 1 582
    Points
    1 582

    Par défaut Que fait le code suivant ?

    Bonjour,

    D'après vous, sans tester dans WinDev, que devrait faire le code suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tabToto est tableau d'entiers = [1, 2, 3]
    tabToto = [1]
    Trace(tabToto..Occurrence)
    tabToto = [1, 2, 3, 4]
    Trace(tabToto..Occurrence)

  2. #2
    Expert confirmé Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 2 764
    Points : 4 177
    Points
    4 177

    Par défaut

    Dans quelle version de WinDev ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #3
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 557
    Points : 7 769
    Points
    7 769

    Par défaut

    Bonjour,
    Vu de loin dans le brouillard, je dirai qu'il affiche 3 et 4.

    Tatayo.

  4. #4
    Membre expérimenté
    Inscrit en
    août 2010
    Messages
    700
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 700
    Points : 1 582
    Points
    1 582

    Par défaut

    Question supplémentaire, quand vous aurez vérifié ce que fait WD : trouvez-vous cela logique/intuitif ?

  5. #5
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 557
    Points : 7 769
    Points
    7 769

    Par défaut

    Citation Envoyé par Hibernatus34 Voir le message
    Question supplémentaire, quand vous aurez vérifié ce que fait WD : trouvez-vous cela logique/intuitif ?
    En première approche, je dirai non et non. Mais en lisant l'aide en ligne, je dirai oui et non .

    Tatayo.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2009
    Messages : 82
    Points : 119
    Points
    119

    Par défaut

    Bonjour,

    Si je peux me permettre, tout en sachant que je ne suis pas un développeur parfait.

    Un tableau d entiers ou de chaîne n'est qu'une structure avec membre de même type et valeur par défaut.
    C'est d'ailleurs comme cela que je m en sers.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Mastruct est une Structure
    	identifiant1 est un entier
    	identifiant2 est un entier
    	identifiant3 est un entier
    FIN
     
    tabMastruct est un tableau de Mastruct
    tabMastruct=[[0,0,0]]
    tabMastruct=[[1,2,3]]
    tabMastruct=[[2]]
    tabMastruct=[[0,2]]
    D'ailleurs sur leur page est indiqué :
    Un tableau est un type structuré qui permet de regrouper une série d'éléments de même type. Chaque élément du tableau est accessible directement par son numéro d'ordre.
    https://doc.pcsoft.fr/?1514030

  7. #7
    Expert confirmé Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 2 764
    Points : 4 177
    Points
    4 177

    Par défaut

    Citation Envoyé par Hibernatus34 Voir le message
    Question supplémentaire, quand vous aurez vérifié ce que fait WD : trouvez-vous cela logique/intuitif ?
    En fait, j'avais répondu autre chose, mais en y réfléchissant, c'est pas complètement illogique.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : mai 2003
    Messages : 332
    Points : 561
    Points
    561

    Par défaut

    Youhou j'ai gagné.

    Je me suis fait piégé je ne sais combien de fois par les tableaux sous WinDev qui se redimensionnent en agrandissement mais qui garde leur dimension alors qu'on l'a vidé ou réaffecté...
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  9. #9
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 557
    Points : 7 769
    Points
    7 769

    Par défaut

    En fait la réponse est .
    Plus précisément:
    Si les dimensions du tableau à affecter sont insuffisantes pour stocker les éléments du tableau de valeurs, le tableau à affecter est automatiquement agrandi.
    Si les dimensions du tableau à affecter sont plus grandes que celles du tableau de valeurs, les éléments non affectés conservent leurs valeurs précédentes.
    Donc la première ligne prépare un tableau de 3 entier, la deuxième ligne ne fait que "remplacer" le contenu de la première case, et la ligne 4 agrandit le tableau de 1 (agrandissement par défaut).

    Tatayo.

  10. #10
    Membre expérimenté
    Inscrit en
    août 2010
    Messages
    700
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 700
    Points : 1 582
    Points
    1 582

    Par défaut

    Vous vous en doutez, je pose la question parce que je trouve ça illogique.

    Je pense que PC Soft a fait une erreur en adoptant ce comportement, parce que :

    • On peut écrire tabToto = [] qui, du coup, n'a aucun effet !
    • Dans un programme de "la vie réelle", je n'imagine pas un cas où j'aurai besoin d'écraser le début d'un tableau avec des valeurs en dur. En tout cas, pas un cas assez commun pour vouloir le faire avec un simple opérateur.
    • Ça ne respecte pas la sémantique : le sens de l'opérateur "=" est "remplace la valeur de A par B". La valeur d'un tableau est son contenu.
    • Si j'écris tabToto = tabTiti, cette fois il y a bien écrasement de tout le contenu !
    • Si l'initialiseur (liste entre crochets) est passé à une fonction, celle-ci n'aura pas le même comportement selon qu'on lui passe un tableau ou l'initialiseur, ou selon qu'on type le paramètre ou pas*. (voir ci-dessous)
    • Quand je fais rMonRéel = 8, je ne m'attends pas à ce que rMonRéel contienne "8.3".
    • Je doute fortement qu'aucun autre langage ait ce comportement.


    * Fonction dont le comportement dépend du typage du paramètre :
    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
     
    PROCÉDURE Test1(tabTiti est tableau d'entiers)
    tabToto est tableau d'entiers = [1, 2, 3]
    tabToto = tabTiti
    Trace(tabToto..Occurrence)
     
    PROCÉDURE Test2(tabTiti)
    tabToto est tableau d'entiers = [1, 2, 3]
    tabToto = tabTiti
    Trace(tabToto..Occurrence)
     
    PROCEDURE Test()
    Test1([1]) // Affiche 1
    Test2([1]) // Affiche 3
    tabTest est tableau d'entiers = [1]
    Test2(tabTest) // Affiche 1

    Bref pour moi c'est à mettre sur le même compte que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vVar est Variant = Null
    SI vVar = "WinDev" ALORS
        Info("WinDev est nul. C'est pas moi qui le dis !")
    FIN

  11. #11
    Membre expérimenté
    Inscrit en
    août 2010
    Messages
    700
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 700
    Points : 1 582
    Points
    1 582

    Par défaut

    Et si vous vous demandez pourquoi ils ont choisi ce comportement, c'est pour le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabToto est tableau de 3 entiers = [1] // J'ai demandé 3 entiers
    Mais l'initialisation n'est pas l'affectation (en C++ par exemple), et j'aurais trouvé logique que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabToto est tableau de 3 entiers = [1]
    soit différent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabToto est tableau de 3 entiers // Implicitement = [0, 0, 0]
    tabToto = [1]

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    septembre 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : septembre 2004
    Messages : 18
    Points : 31
    Points
    31

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tabToto est tableau d'entiers = [1, 2, 3]
    TableauSupprimeTout(tabToto)
    tabToto = [1]
    Trace(tabToto..Occurrence)
    tabToto = [1, 2, 3, 4]
    Trace(tabToto..Occurrence)
    Dans ce cas, on a 1 et 4

    TableauSupprimeTout, c'est magique

  13. #13
    Membre expérimenté
    Inscrit en
    août 2010
    Messages
    700
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 700
    Points : 1 582
    Points
    1 582

    Par défaut

    Pas si magique ! Il en faudrait un avant chaque affectation, en imaginant qu'on ne connaisse pas la taille précédente du tableau.

    Sinon il y a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabToto est tableau d'entiers = [1, 2, 3]
    tabToto <= []
    Il faut le savoir, mais une fois qu'on le sait, finalement c'est pas si mal.

    C'est juste qu'on a 2 cas plutôt encombrants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabToto est tableau de 2 entiers <= [1, 2, 3] // Finalement ça sera 3
    tabToto = [1] // Finalement, on reste sur 3
    Du coup on peut se donner la règle suivante :
    • En initialisation j'utilise =
    • En affectation j'utilise <=


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tabToto est tableau de 3 entiers = [1] // BIEN
    tabTiti est tableau de 3 entiers <= [1] // PAS BIEN
    tabToto <= [1] // BIEN
    tabToto = [1] // PAS BIEN

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : mai 2003
    Messages : 332
    Points : 561
    Points
    561

    Par défaut

    En initialisation j'utilise =- En affectation j'utilise <=
    J'avais oublié cette syntaxe. Ca a du bon de le rappeler...
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  15. #15
    Membre habitué
    Homme Profil pro
    Ingé Indus
    Inscrit en
    juillet 2014
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2014
    Messages : 79
    Points : 166
    Points
    166

    Par défaut

    Pour utiliser windev depuis pas mal de temps maintenant, le comportement ne me surprend pas.
    En revanche, oui la logique n'est pas top.

    Oui, il est fortement recommandé de bien typer ses paramètres pour éviter les surprises de (re)cast.
    L'agrandissement, le retypage automatique est souvent appréciable mais à aussi ces contrepartie.

    Windev et la manipulation de tableau réserve quasiment toujours des (mauvaise) surprise.
    Dernièrement, dans un projet tout neuf en 23, j'ai une classe contenant un tableau d'objet (autre classe).
    Je veux faire une copie de ma première classe, et évidemment du tableau.
    Mais rien à faire, même avec l'attribut LOCAL (cf aide), windev me gardait toujours la même référence du tableau pour mes deux instances...
    J'ai dus me faire ma propre procédure de copie.

Discussions similaires

  1. Que fait ce code ?
    Par teol91 dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 24/10/2011, 11h38
  2. que fait ce code
    Par improcess dans le forum Images
    Réponses: 4
    Dernier message: 02/10/2011, 15h39
  3. que fait la definition suivante : char **p
    Par mongolic dans le forum Débuter
    Réponses: 4
    Dernier message: 09/11/2009, 13h48
  4. que fait ce code !
    Par guitariste dans le forum C++
    Réponses: 11
    Dernier message: 01/05/2008, 16h29
  5. que fait ce code (et surtout pourquoi??)
    Par elekis dans le forum C++
    Réponses: 3
    Dernier message: 13/09/2005, 11h47

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