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.NET Discussion :

création d'un thread vb.net [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut création d'un thread vb.net
    salut !!

    je veux trouver le nombre d qui réalise (e*d) mod z =1
    je etulise ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim d,z,e as double
    d=0 
    while (e*d) mod z <> 1
     
    d=d+1
    end while
    je veux créer un thread comment ?
    j'ais un button est trois textbox

  2. #2
    Invité
    Invité(e)
    Par défaut
    tu fais un dépassement de capacité donc tu ne sors pas de ta boucle.

  3. #3
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    Citation Envoyé par yassinema Voir le message

    le code marche très bien
    Pas vraiment convaincu, et met un peu de commentaire sinon on a du mal à comprend tes calculs
    Effectue la division de deux nombres et retourne seulement le reste.

    number1 Mod number2
    pour ton problème de freeze, tu peux essayer de lancer ton calcul dans un thread,
    ça laisse la main au pc sans trop le tuer.

    en 2-3 lignes c'est bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            ' Création du Treah
            Dim MonThread As New Thread(AddressOf MaFonction) ' <- fonction que tu crée au préalable
            ' Lancement du Tread
            MonThread.Start()
            'Laisse le temps de terminer le Thread pour la suite du code
            System.Threading.Thread.Sleep(100) ' permet de ne pas figer l'interface
    pour la fonction sleep il faut la librairie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Threading
    PS: ce ne sont que des idées, rien de plus
    PPS: pour ton vrai problème, "gcorbineau" à la solution

  4. #4
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    merci hunteshiva Expert

    je vais essayer ton idée

    j'espère que gcorbineau(chevronné) me donne la petite solution

  5. #5
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour, il y a plusieurs problèmes avec ce code et l'énoncé donné :
    * Il y a plusieurs valeurs possibles pour d, ou aucune, mais jamais une seule. Je présume qu'on cherche la plus petite valeur quand il en existe une.
    * Il n'existe pas de critère d'arrêt, le code tournera indéfiniment s'il n'existe aucune solution.
    * Il pose des problèmes d'arrondis qui peuvent fausser les résultats, il faut utiliser un type entier : int, voire long si nécessaire.
    * On peut faire beaucoup plus efficace.

    A part cela, c'est Hunteshiva qui a vu juste.

  6. #6
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    bon merci
    je voulais faire la methode de Thread mais c'est pas facile pour moi
    moi j'ai un button et 3 textbox

    merci de m'aider

  7. #7
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    tu créer une fonction *exemple*

    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
    Public Function MaFonction(ByVal Param_e As Double, ByVal Param_z As Double) As Double
     
       ' Déclaration des variables
       Dim Param_d as Double
     
       ' Init des variables
       Param_d = 0
     
       ' Calcul
       While ((Param_e * Param_d) mod Param_z) <> 1
     
          Param_d += 1 ' Incrémentation de 1
     
       End While
     
       MaFonction =  ?? ' Un Double <- valeur de retour
     
    End Function

  8. #8
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    salut

    est ce que la fonction fait le travaille du thread ??

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    demande à google sinon
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    En fait, le vrai problème ici c'est qu'avec de grandes valeurs ton calcul prendra plusieurs millénaires (et peu importe alors l'affichage d'une barre de progression) alors qu'avec le bon algorithme le résultat se trouve en moins de 100ns (nanosecondes). Quand je te disais qu'on pouvait faire beaucoup plus efficace...

    (e*d)%z = 1 est équivalent à e*d - k*z = 1 avec k un entier fonction de d. Et cette dernière équation est ce qu'on appelle une identité de Bézout. Et la première solution (ou l'absence de solutions) est déterminée par l'algorithme d'Euclide étendu, qui s'implémente en dix lignes de code.

    Les problèmes mathématiques se résolvent d'abord par les mathématiques, le calcul brut n'est qu'un dernier recours.

  11. #11
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    DonQuiche

    j'ais déja chercher comment appliquer l'Équation diophantienne en programmation car je connais que le coté math étudié au lycée
    et j'ais fais un prog pour calculer le plus grands diviseur commun avec l'algorithme d'Euclide

  12. #12
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Ok, tu avais donc déjà creusé mais sans succès... Voilà un bout de code qui traînait dans mes archives. C'est du C# mais ça ne devrait pas être difficile à comprendre.

    Code c# : 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
    // Résoud l'équation diophantienne ax + by = pgcd(a,b) (identité de Bézout) via l'algo d'Euclide étendu et retourne pgcd(a,b).
    static long ExtendedEuclide(long a, long b, out long x, out long y)
    {
        if (Math.Abs(a) < Math.Abs(b)) return ExtendedEuclide(b, a, out y, out x);
     
        long u1 = 1, u2 = 0;
        long v1 = 0, v2 = 1;
        long r1 = a, r2 = b;
        while (r2 != 0)
        {
            long q = r1 / r2;
            long u3 = u1 - q * u2;
            long v3 = v1 - q * v2;
            long r3 = r1 - q * r2;
     
            u1 = u2; 
            u2 = u3;
            v1 = v2;
            v2 = v3;
            r1 = r2;
            r2 = r3;
        }
     
        long pgcd = r1;
        x = u1 * Math.Sign(pgcd);
        y = v1 * Math.Sign(pgcd);
        return Math.Abs(pgcd);
    }

    Et j'y ai ajouté ça pour l'adapter à ton problème :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Résoud (d * e) % z = 1
    static bool Solve(long e, long z, out long d)
    {
        long k;
        ExtendedEuclide(e, z, out d, out k);
        if (z == 0) return false;
     
        // Infinité de solutions : depuis celle trouvée, on cherche la plus petite après zéro (dont on sait qu'elle est inférieure à z).
        // Démo : si d est solution, d+z l'est aussi : e*(d+z) + k*z = e*d + (k+e)*z = e*d + k'*z 
        d = (d % z + z) % z;
     
        // Vérification empirique, le plus sûr
        return (d * e) % z == 1;
    }

    PS : Il faudra activer les vérifications arithmétiques et gérer ArithmeticException.

  13. #13
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    ok merci j'ais comprie le code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multiples threads vb.net
    Par tlibert dans le forum VB.NET
    Réponses: 9
    Dernier message: 27/02/2007, 13h14
  2. [WD11] Création d'un thread
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 2
    Dernier message: 17/02/2007, 16h14
  3. [VB.NET]Création d'un thread
    Par Oufti dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/11/2006, 10h01
  4. Location install lors d'une création de MSI sous VS Net 2003
    Par jeff37 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 02/03/2006, 07h43
  5. création de plusieurs threads dans WinMain
    Par ChidoriRasengan dans le forum DirectX
    Réponses: 1
    Dernier message: 15/06/2005, 21h36

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