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

WinDev Discussion :

rechercher une série d'élément dans un tableau


Sujet :

WinDev

  1. #1
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut rechercher une série d'élément dans un tableau
    Bonjour
    à chaque ajout d'élément un tableau (chaine, ou entier , ou même objet ou autre) il faut déclencher une erreur si cet ajout provoque la duplication d'une série à condition que la série contient plus d'un élément
    exemple:
    un tableau de chaine :
    MyCyclicTab is array of string
    1*add(MyCyclicTab,"A01") // pas d'erreur
    2*add(MyCyclicTab,"A02") // pas d'erreur
    3*add(MyCyclicTab,"A03") // pas d'erreur
    4*add(MyCyclicTab,"A03") // pas d'erreur
    5*add(MyCyclicTab,"A02") // pas d'erreur
    6*add(MyCyclicTab,"A01") // pas d'erreur
    7*add(MyCyclicTab,"A02") // pas d'erreur
    8*add(MyCyclicTab,"A03") // erreur !!
    -----------------------------
    un tableau d'entier :
    MyCyclicTab is array of int
    1*add(MyCyclicTab,1) // pas d'erreur
    2*add(MyCyclicTab,2) // pas d'erreur
    3*add(MyCyclicTab,3) // pas d'erreur
    4*add(MyCyclicTab,3) // pas d'erreur
    5*add(MyCyclicTab,2) // pas d'erreur
    6*add(MyCyclicTab,1) // pas d'erreur
    7*add(MyCyclicTab,2) // pas d'erreur
    8*add(MyCyclicTab,3) // erreur !! => car c'est l'élément qui déclenche la duplication de la série 1*,2* et 3*
    --------------------------------------------
    1*,2* et 3* sont une série
    6*,7* et 8* sont une série
    3* et 4* ne sont pas une série

    Merci bien pour vos réponse !!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    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 239
    Points : 12 870
    Points
    12 870
    Par défaut
    Bonjour,
    La demande n'est pas très claire, ou l'exemple ne correspond pas à la demande.
    S'il faut déclencher une erreur lorsqu'une série possède plus de 2 éléments, pourquoi la série 1*,2*,3* ne déclenche pas une erreur ?
    Qu'est-ce qui caractérise précisément une série ?

    Tatayo.

  3. #3
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    La demande n'est pas très claire, ou l'exemple ne correspond pas à la demande.
    S'il faut déclencher une erreur lorsqu'une série possède plus de 2 éléments, pourquoi la série 1*,2*,3* ne déclenche pas une erreur ?
    Qu'est-ce qui caractérise précisément une série ?

    Tatayo.
    Bonjour,
    Merci pour la remarque ! j'ai modifié la question initiale

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    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 239
    Points : 12 870
    Points
    12 870
    Par défaut
    OK, mais qu'est-ce qui caractérise une série ? Comment identifier le début et la fin d'une série ?
    Plus précisément, comment savoir que 3 éléments du tableau forment une série, surtout quand il ne s'agit pas de nombres ?
    Est-ce que AX,AY,AZ est une série ?

    1*add(MyCyclicTab,1)
    2*add(MyCyclicTab,2)
    3*add(MyCyclicTab,3)
    4*add(MyCyclicTab,4) // Est-ce le début d'une série, ou la suite de la série précédente ?
    5*add(MyCyclicTab,5)
    6*add(MyCyclicTab,1)
    7*add(MyCyclicTab,2)
    8*add(MyCyclicTab,3) // erreur ou pas ?

    Tatayo.

  5. #5
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par tatayo Voir le message
    OK, mais qu'est-ce qui caractérise une série ? Comment identifier le début et la fin d'une série ?
    Plus précisément, comment savoir que 3 éléments du tableau forment une série, surtout quand il ne s'agit pas de nombres ?
    Est-ce que AX,AY,AZ est une série ?

    1*add(MyCyclicTab,1)
    2*add(MyCyclicTab,2)
    3*add(MyCyclicTab,3)
    4*add(MyCyclicTab,4) // Est-ce le début d'une série, ou la suite de la série précédente ?
    5*add(MyCyclicTab,5)
    6*add(MyCyclicTab,1)
    7*add(MyCyclicTab,2)
    8*add(MyCyclicTab,3) // erreur ou pas ?

    Tatayo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    tabSerie est un tableau de chaîne
    nSerie est un réel  = 22/7
    
    sPartieDecimal est une chaîne = Milieu(NumériqueVersChaîne(nSerie),3)
    subString est une chaîne 
    //sPartieDecimal = "142857142857"
    
    POUR i = 1 _A_ Taille(sPartieDecimal)
    	subString = Milieu(sPartieDecimal,i,1)	
            TableauAjoute(tabSerie,subString)
    // l'ajout dans le tableau du deuxième chiffre 4 provoque la duplication du
    //valeur 14 ce qui crée une série
    FIN

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    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 239
    Points : 12 870
    Points
    12 870
    Par défaut
    4 provoque la duplication de 14, mais dans l'énoncé on parle d'une série de plus de 2 éléments. Dans 14, je n'en vois que 2.

    Bref c'est pas clair...

    Tatayo.

  7. #7
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par tatayo Voir le message
    4 provoque la duplication de 14, mais dans l'énoncé on parle d'une série de plus de 2 éléments. Dans 14, je n'en vois que 2.

    Bref c'est pas clair...

    Tatayo.
    excuse moi chef ! je suis un peu confus avec cette histoire !!
    j'ai modifié l’énoncé
    je compte sur ta réponse

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    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 239
    Points : 12 870
    Points
    12 870
    Par défaut
    Donc si je comprends bien, à chaque ajout il faut vérifier si le couple (avant dernier élément) + (dernier élément) existe déjà ?
    Dans ce cas avec une chaine c'est plus simple: il suffit à chaque ajout, et si la chaine fait plus de 3 caractères, si ChaîneOccurrence(sMachaine,Droite(sMachaine,2)) = 2.

    Tatayo.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    555
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 555
    Points : 1 197
    Points
    1 197
    Par défaut
    Bonjour,

    Sur votre premier post :
    Citation Envoyé par tunizar Voir le message
    ...
    un tableau d'entier :
    MyCyclicTab is array of int
    1*add(MyCyclicTab,1) // pas d'erreur
    2*add(MyCyclicTab,2) // pas d'erreur
    3*add(MyCyclicTab,3) // pas d'erreur
    4*add(MyCyclicTab,3) // pas d'erreur
    5*add(MyCyclicTab,2) // pas d'erreur
    6*add(MyCyclicTab,1) // pas d'erreur
    7*add(MyCyclicTab,2) // pas d'erreur
    8*add(MyCyclicTab,3) // erreur !! => car c'est l'élément qui déclenche la duplication de la série 1*,2* et 3*
    --------------------------------------------
    1*,2* et 3* sont une série
    6*,7* et 8* sont une série
    3* et 4* ne sont pas une série

    Merci bien pour vos réponse !!
    L'erreur doit se déclencher sur la ligne 7, non ? car "1,2" se répète ?

    Une méthode "brute" :
    Si pour vous une série est une répétition d'un nombre composé de 2 chiffres minimum, il suffit simplement de parcourir toutes les combinaisons de nombre et de faire un ChaineOccurrence() et si le résultat est supérieur à 1, c'est qu'il y a répétition.

  10. #10
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par Ry_Yo Voir le message
    Bonjour,

    Sur votre premier post :


    L'erreur doit se déclencher sur la ligne 7, non ? car "1,2" se répète ?

    Une méthode "brute" :
    Si pour vous une série est une répétition d'un nombre composé de 2 chiffres minimum, il suffit simplement de parcourir toutes les combinaisons de nombre et de faire un ChaineOccurrence() et si le résultat est supérieur à 1, c'est qu'il y a répétition.
    Merci pour vous deux !!
    voici la version final
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    sStringInitial is string
    tabSerie is array of string
    nSerie is réel  = 22/7
    sPartieDecimal is string = Middle(NumToString(nSerie),3) // =>142857142857
    nMinTailleSerie est un entier = 2 // peut changer
    nSylabTaille is int =2
    i is int
    j is int
    subString  is string 
    POUR i = 1 _A_ Length(sPartieDecimal)
    	// alimenter le nouveau tableau
    	subString = Middle(sPartieDecimal,i,1)
    	ArrayAdd(tabSerie,subString)	
    	sStringInitial = ArrayToString(tabSerie,"")	
    	WHILE nSylabTaille<Taille(sStringInitial)
    		FOR i=1 _TO_ Length(sStringInitial)	
    			//decoupage de la phrase en sylabe de taille =nSylTaille
    			mysylab is string =Middle(sStringInitial,i,nSylabTaille)
    			nboccurence is int =StringCount(sStringInitial,mysylab)
    //			myrep est une chaîne=Répète(mysylab,nboccurence)
    			IF nboccurence > 1 AND Length(mysylab) >= nMinTailleSerie THEN
    				// est ce que le syllabe généré contient un élément du tableau
    				STOP
    				ExceptionDéclenche(1,"Dans la liste :"+RC+sStringInitial+RC+"L'ajout de l'élément : "+subString+" a engendré la série : "+ mysylab)
    			END
    		END
    		nSylabTaille++
    	END
    END
    CASE EXCEPTION:
    	EndProgram(ExceptionInfo(errCode)+RC+ExceptionInfo(errMessage))
    END:

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2012, 12h16
  2. Recherche d'élément dans un tableau
    Par cartmanpro dans le forum Pascal
    Réponses: 10
    Dernier message: 29/04/2008, 15h57
  3. Réponses: 13
    Dernier message: 07/01/2007, 19h43
  4. Réponses: 3
    Dernier message: 26/08/2006, 14h03
  5. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 12h51

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