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

Windows Forms Discussion :

algorithme boucle à l'infinie


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Points : 75
    Points
    75
    Par défaut algorithme boucle à l'infinie
    Bonjour
    j'ai implémenté un algorithme qui fait une division d'une chaine binaire sur une autre, mais quand j'appelle la fonction (Division) qui doit me retourner le résultat, le programme boucle infiniment avec une utilisation de 50% de mon Core2Duo et ceci jusqu'à ce que je le stoppe

    Voila je poste l'ensemble des fonctions espérant que quelqu'un puisse m'aider :

    La fonction principale :
    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
      Private Function Division(ByVal Message As String, ByVal PolynomeGenerateur As String) As String
     
            Dim arret As Boolean = False
            Dim msg() As Char = Message.ToCharArray
            Dim pg() As Char = PolynomeGenerateur.ToCharArray
            Dim L As Integer = PolynomeGenerateur.Length
            Dim Anc_i As Integer = L
            Dim Token(L) As Char
            Dim Dev(L) As Char
            Token = Extract(L, msg)
     
     
            While (Not (arret))
     
                If (msg.Length < L) Then
                    arret = True
                Else
                    Dev = et_logique(Token, pg)
                    Dev = Ajouter(Dev, msg, Anc_i)
                    If (Dev.Length >= L) Then
                        Token = Extract(L, Dev)
                    End If
                    msg = Dev
                End If
            End While
     
     
            Dim retour As String = Dev
     
            Return retour
     
        End Function
    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 Function Ajouter(ByVal dev() As Char, ByVal msg() As Char, ByVal Anc_i As Integer) As Char()
            Dim retour As String = ""
            Dim i As Integer
            Dim j As Integer
     
            For i = 0 To dev.Length - 1
                retour = retour + dev(i)
            Next
            For j = Anc_i To msg.Length - 1
                retour = retour + msg(j)
            Next
     
            Dim R() As Char = retour.ToCharArray
     
            While R(0) = "0"
                R = decaler(R)
            End While
     
            Return R
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Function decaler(ByVal chaine() As Char) As Char()
     
            Dim tmp(chaine.Length - 1) As Char
     
            For i As Integer = 1 To chaine.Length - 1
                tmp(i - 1) = chaine(i)
            Next
     
            Return tmp
        End Function
    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
        Private Function et_logique(ByVal token() As Char, ByVal pg() As Char) As Char()
     
            Dim result(pg.Length) As Char
     
            For i As Integer = 0 To pg.Length - 1
     
                If (token(i) = "1") Then
                    If (pg(i) = "1") Then
                        result(i) = "0"
                    Else : result(i) = "1"
                    End If
     
                ElseIf (token = "0") Then
                    If (pg(i) = "1") Then
                        result(i) = "1"
                    Else : result(i) = "0"
                    End If
                End If
     
     
            Next
     
     
            Return result
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Private Function Extract(ByVal taille As Integer, ByVal message() As Char) As Char()
     
            Dim tmp(taille) As Char
            Dim i As Integer
     
            For i = 1 To taille - 1
                tmp(i) = message(i)
     
            Next
            Return tmp
        End Function
    voila comment l'appel se deroule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Text = Division(message, poly)
    message et poly sont chaines (String) composés de 1 et de 0

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    en debuggant, tu dois voir dans quelle boucle ca boucle

    tu pourrais décrire le but de toutes ces lignes ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Points : 75
    Points
    75
    Par défaut
    C'est une implémentation d'un algorithme de division binaire, je l'utilise pour le calcul de CRC (algorithme de Dijkstra)..

    Comment je pourrai deboguer alors que le programme ne génère aucune erreur ? il se lance et il se plante... je peux très bien accéder à l'IDE, mais le programme lancé ne répond pas, j'ai conclu que ça pourrait être une boucle infinie...entre autre..

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    débugger ca veut dire mettre des point d'arret, faire du pas à pas, ca permet de voir les valeurs des variables au fur et à mesure de l'execution ligne par ligne, la pile des appels etc...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'ai fait quelques recherches et je vois pas le rapport entre ce Dijkstra et une division binaire qui a l'air de rien faire de plus qu'une division normale

    tu fais ca pour un exercice qui sert à faire des trucs qui servent à rien ou ca a un but réel ?


    à noter au passage (enfin c'est ptete prévu pour)
    Dim Token(L) As Char
    ca créé un tableau de L+1 valeur (de 0 à L) et non le meme nombre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    A priori c'est la condition "msg.Length < L" qui n'est jamais atteinte... reste à savoir pourquoi. Comme dit sperot51, le debogage en pas à pas s'impose...

    Par contre, j'ai de (très) sérieux doutes sur l'efficacité de l'algorithme... faire des opérations mathématiques sur des nombres binaires sous forme de chaine, ça revient à vouloir faire manuellement le travail du processeur ! Pourquoi ne pas simplement les manipuler comme des entiers ? Le "ET logique" se résume à ça :
    au lieu de ta grosse méthode et_logique

    Le seul inconvénient c'est s'il s'agit de très grands nombres... mais dans ce cas il vaut mieux les gérer comme des tableaux d'entiers, sur lesquels tu peux facilement faire des opérations binaires, que sur des chaines de caractère...

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Points : 75
    Points
    75
    Par défaut
    c'est bon, j'ai compris. Merci beaucoup pour votre temps :-)

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

Discussions similaires

  1. procédure stockée qui boucle à l'infini
    Par ludo00002 dans le forum Firebird
    Réponses: 4
    Dernier message: 18/05/2009, 10h07
  2. Boucle Javascript infinie
    Par Warman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/01/2009, 02h21
  3. Boucle while infinie
    Par god_enel dans le forum C
    Réponses: 1
    Dernier message: 16/04/2007, 11h35
  4. Boucle (quasi) infinie
    Par Anduriel dans le forum Langage
    Réponses: 9
    Dernier message: 12/10/2005, 16h36
  5. Complexité d'une boucle potentiellement infinie
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 06/09/2005, 11h55

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