Algorithme, compositions de longueur

Fermé
mryapados Messages postés 2 Date d'inscription vendredi 11 janvier 2013 Statut Membre Dernière intervention 11 janvier 2013 - Modifié par mryapados le 11/01/2013 à 17:56
baladur13 Messages postés 47180 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 11 janvier 2025 - 11 janv. 2013 à 18:44
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 47180 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 11 janvier 2025 13 535
11 janv. 2013 à 18:44
Bonjour
Avec un minimum de travail exposé en plus de l'énoncé brut... on peut partir sur des bases plus saines...
0