Algorithme, compositions de longueur

mryapados Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
baladur13 Messages postés 47808 Date d'inscription   Statut Modérateur Dernière intervention   -
bonsoir

Avant toute chose et pour info à M. baladur13 le modérateur, ceci n'est pas un devoir, ça fait bien longtemps que je ne suis plus à l'école !!!

Cet algorithme sera intégré dans un programme bien plus complexe (déjà conçu) cet algorithme apportera une amélioration au programme... ce n'est pas à M. baladur13 de me dire ce qui me sera profitable ou pas, c'est à mon BOSS...

voici un extrait de l'algo actuel qui n'est pas suffisant car les critères de choix ne sont plus les mêmes et celui cu ne compose qu'avec 2 longueur...

            Dim MaxNbA%, NbA%, NbB%  
            Dim tNbA%, tNbB%, tReste%  

            Dim LargeurReelA% = _LargeurA + _MtLargeurMilieu + _NvAddLargeur  
            Dim LargeurReelB% = _LargeurB + _MtLargeurMilieu + _NvAddLargeur  

            'On calcule la longueur reel pour les niveaux  
            Dim LongueurReel% = _Longueur - _MtLargeurDebut - _MtLargeurFin + _MtLargeurMilieu  
            Dim Reste% = LongueurReel  

            'Calculer les longueurs  
            'On calcule le nombre maximum de niveaux A  
            MaxNbA = CInt(Int(LongueurReel / LargeurReelA))  

            'On controle le reste min  
            For i = MaxNbA To 0 Step -1  
                tNbA = i  
                tNbB = CInt(Int((LongueurReel - tNbA * LargeurReelA) / LargeurReelB))  
                tReste = LongueurReel - (tNbA * LargeurReelA) - (tNbB * LargeurReelB)  

                If tNbA < tNbB Then Exit For  

                If tReste < Reste Then  
                    NbA = tNbA  
                    NbB = tNbB  
                    Reste = tReste  
                End If  
            Next  

            'On enregistre la longueur de la travee  
            _Longueur = _Longueur - Reste  

            'On Genere le longueur Text et les éléments de travée  
            _Travees.Clear()  
            If NbA > 1 Then  
                _LongueurText = NbA & " X " & _LargeurA  
            ElseIf NbA = 1 Then  
                _LongueurText = _LargeurA.ToString  
            End If  
            If NbA > 0 Then _Travees.Add(New Element(_LargeurA, _Hauteur, NbA))  

            If NbB > 1 Then  
                _LongueurText &= " + " & NbB & " X " & _LargeurB  
            ElseIf NbB = 1 Then  
                _LongueurText &= " + " & _LargeurB  
            End If  
            If NbB > 0 Then _Travees.Add(New Element(_LargeurB, _Hauteur, NbB))  







Bonjour,




Objectif : Obtenir une longueur proche (Inférieur ou égale) « l » composé de x longueurs « a », y longueur « b » et z longueurs « c » (voir plus ou moins de longueurs possibles).

Critères de choix de la solution :
Critère n°1 : longueur obtenue la plus proche possible de « l » (Inférieur ou égale)
Critère n°2 : minimum de longueurs « a + b + c + ... + n »

Exemple 1 :
l = 5361

a = 1184
b = 904

Résultats :
x = 3
y = 2

Car 3*1184 + 2*904 = 5360 ; reste 1

Exemple 2 :
l = 7265

a = 1500
b = 1250
c = 1000

Résultats :
x = 4
y = 1
z = 0

Car 4*1500 + 1*1250 = 7250 ; reste 15

Exemple 3 :
l = 4880

a = 1180
b = 1000
c = 900

Résultats :
x = 1
y = 1
z = 3

Car 1180 + 1000 + 3*900 ; Reste 0


Soit
paramètres de la fonction :
- Longueur à obtenir
- Liste de longueur pour la composer

Valeur de retour de la fonction :
- Liste de nombre des longueurs (nombre entier).









A voir également:

1 réponse

baladur13 Messages postés 47808 Date d'inscription   Statut Modérateur Dernière intervention   13 691
 
Bonjour
Avec un minimum de travail exposé en plus de l'énoncé brut... on peut partir sur des bases plus saines...
0