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

VB 6 et antérieur Discussion :

[débutant] projet Visual Basic 6


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut [débutant] projet Visual Basic 6
    Bonjour à tous, je suis un étudiant en informatique et je débute en programation (algorithme et VBA) , j'ai donc un projet à faire et c'est ce pourquoi je demande votre aide. J'espere que ce sujet et à sa place sinon je m'en escuse d'avance:

    "On vous demande de spécifier une application Visual Basic qui permet de manipuler des listes de données numériques. Votre application doit plus précisément permettre de recherche le deuxième plus grand élément de la liste, d’écrire la liste dans le sens inverse, de savoir si cette liste est une liste palindrome c’est à lisible de la même manière dans les deux sens.

    Votre application doit permettre la gestion de la liste (ajout, suppression et modification de données) ainsi que la mise en œuvre de ces trois traitements."

    Voila je remercie d'avance tous ceux qui voudront bien m'aider.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonsoir jere3110,

    comme tu le dis toi-même, il s'agit là d'un exercice d'étude.

    Il va donc falloir que tu t'y mettes... (c'est évident).

    Un conseil pour t'y mettre :

    Commence par décider de la forme (tableau ou listbox) de ta liste.
    Pèse les avantages et les inconvénients de ces 2 choix possibles et fais ton choix.

    Je note à ce propos que ton choix peut dépendre de ton outil de développement.

    Sous VB, par exemple, une listbox est dotée d'une propriété de tri (sorted) ... et j'ai bien l'impression de ce que tu développes sous VBA (une listbox peut-elle être triée sous VBA ?).

    Voilà ton début.

    si tu rencontres une difficulté d'application précise et bien isolée, viens nous l'exposer, accompagnée de ton essai et nous t'aiderons à y voir plus clair.

    Bonne étude.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut re:
    Bonsoir ucfoutu, merci de ta réponse;

    c'est clair qu'il faut que je m'y mette, je développe sur visual basic 6. Le problème est qu'en fait j'ai bien appri a manipuler des tableaux sur papier avec des algoritmes classiques mais jamais encor sur Visual basic 6, je cherche surtout un point de départ sur lequel je pourrai m'appuyer ensuite.

    Je m'y remet

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    C'est très bien de commencer par un algo (je t'en félicite).

    Quel est donc cet algo (on t'aidera sur cette base) ?

    Si tu es en VB6 (donc pas Excel et VBA) : relis ce que j'ai écrit plus haut en ce qui concerne les listBoxes (aide en ligne) et leur propriété Sorted. Ce sera le début.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    Attention tout de meme une liste n'est pas un tableau ...

    Un exercice sur les listes est un exercice de base en developpement .

    En vb il existe un type très proche des listes appellé "collection" a partir de la tu peux la créer

    un lien msdn utile :

    http://msdn2.microsoft.com/fr-fr/lib...8k(VS.80).aspx

  6. #6
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    Mais je pense que ton professeur attend que tu fasses tout par toi même ...

    Le VB n'étant franchement pas le meuilleur langage pour apprendre les listes (le C permet de comprendre en profondeur le fonctionnement)

    Quelques conseils :

    il tu dois définir une classe Element

    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
    Class Element
     
    Dim next as Element
    Dim previous as Element ' dans le cas d'une liste doublement chaînée
     
    end class
     
     
    Class Liste
     
    dim base as Element ' contenant l'element en cours
     
    public sub Add(ByRef elem as Element)
     
    dim temp as Element
     
    While not  temp .next is nothing
     
    temp = temp.next
     
    wend
     
    temp.next = elem
     
    end sub
     
    end class

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Merci Pynuch: mes professeurs attendent un travail personel certe mais ce n'est pas pour autant que les conseils et l'entraide ne sont pa bienvenus ; A mon avis mon prof me demande un tableau car on a n'a pas fait plus et cela doit être fait en VB.
    Je te remerci pour le lien que tu m'a donné (j'ai jamai utilisé de collection) et pour les lignes que tu as écrits et j'essairai de les joindre aux ébauches que je tente de faire de mon côté.

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé de trouver le moyen de calculer deux des traitements qu'on me demande:
    je sais pas si c'est possible en algo mais intuitivement c'est ce qui me vient!!

    Pour le deuxième plus grand élément de la liste:

    Je prends tab[X] (premier nombre du tableau) est je le compares avec tab[X+1] (second nombre). Si X+1 est plus grands, j'inverses l´ordre entre les deux.
    Ensuite, Je prends tab[X+1] (second nombre) est je le compares avec tab[X+2] (troisième nombre). Si X+1 est plus grands, j'inverses l´ordre entre les deux.

    Je fais ca pour tout les nombre du tableau, et je recommences à faire ça autant de fois que le nombre de chiffre que contient le tableau.

    On aurait alors deux boucle, l'une dans l'autre.
    A la fin du traitement (donc à la sorti dans deux boucles), je lui demande d´afficher tab[X+1], et j'ai donc le deuxième plus grand nombre.


    Pour savoir si cette liste est une liste palindrome:

    Je comptes le nombre d´élément dans la liste et je compares le premier et le dernier, puis le premier + 1 et le dernier -1, etc ...

    Je dis ensuite à ton programme d´arrêter de comparer si un des nombre n´est pas égal (donc pas un palindrome) ou si il est arrivé à total des nombre / 2.

    Voila, donc si quelqu'un me dire ce qu'il en pense et/ou me donner sa version des choses ca serait parfait !!! Merci

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    bonjour jere3110;


    c'est bien... mais tu ne crois pas que tu pourrais n'inverser qu'une seule fois ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    comen ca ??
    alors:
    si je déclare une variable k:
    k = tab [x] (premier nombre du tableau)

    Je prends k est je le compare avec tab[X+1] (second nombre). Si X+1 est plus grands que k alors X+1 devient K sinon k ne bouge pas.

    Donc à la fin du traitement, il me reste le plus grand nombre c'est à dire k mais à ce moment là je vois pas comment afficher le second plus grand nombre.

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    on prend les 2 premiers nombres du tableau
    on les compare et on appelle max1 te plus grand et max2 le plus petit

    on boucle ensuite du 3ème au dernier et

    si >= max1 max1 prend sa valeur et on passe au suivant
    si >= max2 (mais forcément < max1 car sinon on serait dans le cas précédent et donc déjà au suivant) : max2 prend sa valeur et on passe au suivant
    si ni dans un cas ni dans l'autre, on ne fait rien et l'on passe au suivant.

    reste plus qu'à afficher max2 une fois la boucle terminée.

    Un coup de pouce est donné par VB :

    Regarde dans ton aide en ligne à quoi sert Select Case (lorsqu'une clause case est vérifiée, les clauses suivantes ne sont pas testées....)

    Tu as là la clé de ton problème.

    A toi de jouer (travail bien mâché).

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bon...
    C'est ton tout 1er exercice. Alors voilà la traduction de ce que j'ai exposé.

    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
    Private Sub Command1_Click()
      maliste = Array(11, 2, 24, 1, 9, 8, 14, 32, 7)
      Dim max1 As Integer, max2 As Integer, suivant As Integer, i As Integer
      max1 = maliste(0)
      max2 = maliste(1)
      If max2 > max1 Then
        max1 = maliste(1)
        max2 = maliste(0)
      End If
      For i = 2 To UBound(maliste)
        suivant = maliste(i)
        Select Case suivant
          Case Is >= max1
            max2 = max1
            max1 = suivant
          Case Is >= max2
            max2 = suivant
        End Select
      Next i
      MsgBox max2
    End Sub
    Analyse.
    Tu me ferais plaisir si, tout seul et sans même nous en rendre compte, tu cherchais maintenant à extirper le 2ème plus petit.

    Bonne journée.

  13. #13
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    Oublie ce que j'ai dis alors si tu n'as pas vu les listes encore il vaut mieux oublié pour le moment .


    ce que te propose ucfoutu est bien

  14. #14
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Bonjour à vous deux et merci pour l'aide que vous m'apportez; j'ai écri les 3 algoritmes correspondants au traitements en m'inspirant de vos conseils. Pour le momen je ne touche pas au VB.
    Voila:

    Algo deuxième plus grand nombre de la liste (D tab() D n num ; R res num)

    Déclaration :
    Variable max1 num
    Variable max2 num
    Variable k numérique

    Début :
    Si tab (0) >= tab (1) alors
    Max1 ← tab (0) et Max2 ← tab (1)
    Sinon
    Max1 ← tab (1) et Max2 ← tab (0)
    Fin Si
    Pour k de de Tab(2) à Tab(n) faire
    Si tab (k) > max 1 alors
    Max1 ← tab (k)
    Sinonsi
    Tab (k) > Max 2 alors
    Max 2 ← tab(k)
    FinSi
    FinPour
    Res ← Max 2
    FIN

    Algo Liste en Sens Inverse (D : Tab() ; D n num ; R TabRes () num)
    Déclaration :
    Variable i numérique
    Début :
    Pour i de 1 à N faire
    TabRes (n-(i-1)) ← tab (i)
    Fin Pour
    FIN

    Algo Palindrome (D : tab() D n num R res logique)
    Début :
    Si tab (0) = tab(n) alors
    Res ← « Vrai »
    Sinon
    Res ← « faux »
    FinSi
    Fin

    Voila j'espere qu'ils sont le plus juste possible, je vous souhaite une bonne journée.

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour et félicitations

    juste une petite correction/ajout :

    Si tab (k) > max 1 alors
    Max2 ← Max1
    Max1 ← tab (k)

    Amitiés et respect

  16. #16
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    C'est quand même un peu un mélange de la chèvre et du chou comme approche.
    A mon sens, il vaudrait mieux soit utiliser un tri pour faire une fonction plus générique, c'est à dire capable de renvoyer le nième plus grand sans modification du code, soit utiliser une fonction spécifique plus efficace et plus proche du concept de liste qui tient plus de la collection que du tableau.

  17. #17
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    J'avais proposé d'utiliser une liste ou un objet collection mais Jere3110 n'a pas vu cela en cours, donc Jere3110 doit utiliser les tableaux.


    Mais ce n'est que pour faire de l'algoritmique on ne lui demande pas de faire un algo pour trouver la plus grande nieme valeur donc l'exemple doit suffirt apres Jere3110 peut utiliser cet exemple pour le rendre plus général cela peut etre un bon exercice

  18. #18
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    La correction attendue n'étant pas venue, je l'apporte moi-même.

    Il est inutile d'extraire les 2 premiers, de déterminer max1 et max2 et de commencer la boucle au 3ème.

    Il suffit de commencer par max1 = 0 et max2 = 0 puis de lancer la boucle à partir du 1er élément du tableau.

  19. #19
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    non, il est surtout inutile de tester deux fois tous les éléments.
    Dans la réalité, si on devait faire une fonction qui réponde exactement à l'énoncé sur une liste (ou un tableau) de taille inconnue, donc potentiellement très grand, on implémenterait une fonction la plus rapide possible.
    Ton algorithme est techniquement juste, mais il n'est pas adapté puisque fondamentalement c'est l'approche itérative dite naïve, autrement dit :
    Je recherche le maximum (donc n-1 test)
    Je retire celui ci et je recherche le nouveau maximum (donc n-2 test)
    en tout ca fais 2*n-3 test

    Or la recherche du second plus grand, c'est une recherche de type tournoi (arbre binaire) puisque par définition, le second plus grand ne peut être battu que par le plus grand. Donc au pire, il suffirai de n + log2(n) - 2 test.

    Pour un tableau de 100000 éléments, c'est une économie de presque 100000 tests.

    En voila un bon exercice d'algorithmie

  20. #20
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Ah...

    Voilà précisément le type d'approche que j'aime (le chrono en mains)

    100000 éléments me paraissent un bon nombre pour faire nos essais.

    On a déjà un code correspondant à la demande (l'exercice = trouver le 2ème plus grand nombre)

    Je vais essayer de battre mon propre record de vitesse, mais il me sera agréable de voir ton code également, de sorte à lui appliquer le même chrono.

    Nous pourrons alors en discuter valablement.

    A bientôt, donc (je compte sur toi).

    Edit : je crois que tu t'es un peu trompé sur le nombre de mes tests ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 5 12345 DernièreDernière

Discussions similaires

  1. Compilation d'un Projet Visual Basic en ligne de commande
    Par Nico+10) dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 16/03/2007, 09h37
  2. Setup projet visual basic
    Par krugarka dans le forum Installation, Déploiement et Sécurité
    Réponses: 1
    Dernier message: 24/02/2007, 06h12
  3. [VBA-E]Débutant sous Visual Basic
    Par Mpierre dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/06/2006, 14h32
  4. Réponses: 4
    Dernier message: 31/05/2006, 14h44
  5. projet visual basic et publication web
    Par cari dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/12/2005, 07h50

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