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

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

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

    6 46,15%
  • Affiche "3" puis plante

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

    7 53,85%
  • Plante

    0 0%
WinDev Discussion :

Que fait le code suivant ?


Sujet :

WinDev

  1. #1
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    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
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 4 384
    Points : 9 745
    Points
    9 745
    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 sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    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
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Question supplémentaire, quand vous aurez vérifié ce que fait WD : trouvez-vous cela logique/intuitif ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    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 habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 91
    Points : 133
    Points
    133
    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
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 4 384
    Points : 9 745
    Points
    9 745
    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 chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    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 sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    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
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    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
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    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 : 55
    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
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    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 chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    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 actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    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.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par tatayo Voir le message
    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.
    Eh bien on dirait que PCSoft, ne connait pas bien Windev:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tabTypeUl est tableau de chaînes
     
    tabTypeUl = ["07", "10", "03"]
    POUR i = 1 _À_ tabTypeUl..Occurrence
    	Trace(tabTypeUl[i])
    FIN
    tabTypeUl = ["10", "03"]
    POUR i = 1 _À_ tabTypeUl..Occurrence
    	Trace(tabTypeUl[i] = "" ? "Bordel" SINON tabTypeUl[i])
    FIN
    Vous pouvez essayer d'initialiser le tableau avec les valeurs ou de déclarer un tableau sans donner de taille, ça ne change rien...
    Vous pouvez essayer aussi avec des entiers....

  17. #17
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Ah oui, bien vu !
    J'avais testé qu'avec le ..Occurrence, mais effectivement les valeurs sont perdues.

  18. #18
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Windev est un peu trop "dynamique". Il est loin le temps où l'on devait dimensionner ses tableaux "en dur".

    J'ai repris l'exemple de Hibernatus en WD22, en le modifiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tabTypeUl est tableau de chaînes
     
    tabTypeUl = ["07", "10", "03"]
    POUR i = 1 _A_ tabTypeUl..Occurrence
    	Trace(tabTypeUl[i])
    FIN
    TableauSupprimeTout(tabTypeUl)
    tabTypeUl = ["10", "03"]
    POUR i = 1 _A_ tabTypeUl..Occurrence
    	Trace(tabTypeUl[i] = "" ? "pas glop" SINON tabTypeUl[i])
    FIN
    le TableauSupprimeTout remet les compteurs à 0 si je puis dire.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  19. #19
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Mais il ne faut pas oublier le plus important : cela nous permets de coder 10 fois plus vite.

    Quand on ne compte pas les heures passées à chercher les merdes.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

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, 10h38
  2. que fait ce code
    Par improcess dans le forum Images
    Réponses: 4
    Dernier message: 02/10/2011, 14h39
  3. que fait la definition suivante : char **p
    Par mongolic dans le forum Débuter
    Réponses: 4
    Dernier message: 09/11/2009, 12h48
  4. que fait ce code !
    Par guitariste dans le forum C++
    Réponses: 11
    Dernier message: 01/05/2008, 15h29
  5. que fait ce code (et surtout pourquoi??)
    Par elekis dans le forum C++
    Réponses: 3
    Dernier message: 13/09/2005, 10h47

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