Page 2 sur 3

Re: If nombre de commande

Publié : sam. 24/oct./2009 0:27
par venom
Et bin dit donc ça en fait des If et Endif tout ça :lol:






@++

Re: If nombre de commande

Publié : sam. 24/oct./2009 2:37
par Huitbit
Hé les p'tits loups !

Il doit bien y avoir un moyen de diminuer tout ça : la logique combinatoire (algèbre de Boole)
(une petite introduction : http://www.commentcamarche.net/contents ... intro.php3 ; http://fr.wikipedia.org/wiki/Table_de_Karnaugh).

Qu'en pensent les électroniciens ?

Hasta la vista !

Re: If nombre de commande

Publié : sam. 24/oct./2009 3:37
par Ollivier
@Huitbit

Je pense que les tableaux de Karnaugh sont une bonne illustration logique. Seul souci, c'est que ça se travaille en code gray. Résultat, c'est une norme de plus à apprendre pour Beauregard (A moins qu'il la connaisse et là, paf dans le mil).

@Dobro

Je me demande si c'est ce que tu lis qui te désole ou bien, si ce n'est pas plutôt l'abruti qui a écrit ça, t'ayant écrit en privé un message d'au revoir sur un coup de tête il y a quelques semaines alors que t'y était personnellement pour rien! Tu m'en vois désolé... ça fait partie des couilles absurdes dans le pâté...

Pour le côté technique de la chose, je n'ai fait que mettre en pratique quelque chose à partir des données que j'ai lu ici-même. Et d'ailleurs Papipp a, me semble-t-il admirablement confirmé le calcul (à ce propos, ce n'est pas la première fois qu'il est en train d'assurer). Par l'absurde, je réponds par l'absurde tout simplement.

Maintenant, si tu as moultes "If" qui s'enchaînent à n'en plus finir, voici une solution:

Code : Tout sélectionner

VariableTemp = #False
If Condition
    If Condition
        If Condition
            Etc...
            VariableTemp = #True
            
            Etc...
        EndIf
    EndIf
EndIf
If VariableTemp
    VariableTemp = #False
    If Condition
        If Condition
            Etc...
            VariableTemp = #True

            Etc...
        EndIf
    EndIf
EndIf

If VariableTemp
    ; Ensemble des conditions vraies
EndIf
Bref, ça ne mange pas de pain...

Re: If nombre de commande

Publié : sam. 24/oct./2009 9:16
par Backup
ho oui des soluces, ils y en a :) heureusement

mais la simple idée de savoir qu'on est limité par le nombre de IF, moi ça me stress :lol:

avant que Fred ne le dise, je dormais mieux :lol:

Re: If nombre de commande

Publié : sam. 24/oct./2009 9:46
par Ollivier
Aussi stressant qu'un jour la Terre sera entièrement vaporisé par notre Soleil devenu une Bossa Nova: terrible, mais purement théorique...

Au passage, pour les gros chiffres, une technique simple et approximative. ( /!\ Peut-être que je me répète...)

Partant du principe que 2^10 = 1024 ~= 1000 ~= 10^3, on peut en déduire que
2^n ~= 10^Int(3n / 10)

Ex : 2^50 ~= 10^Int(3*50 / 10) ~= 10^15
Donc, littéralement, 2 puissance 50 est environ égal à 1 millions de milliards.

Re: If nombre de commande

Publié : sam. 24/oct./2009 9:51
par Octavius
Le nombre d'imbrication limite n'est pas de 128, j'ai fait le test avec le code suivant :

Code : Tout sélectionner

max=100
CreateFile(0,"imb.pb")
WriteStringN(0,"max="+Str(max))
For i=0 To max
  WriteStringN(0,"If 1")
Next i
WriteStringN(0,"Debug max")
For i=0 To max
  WriteStringN(0,"EndIf")
Next i
De 1 à 100 imbrications j'obtiens le message normal attendu du débogueur (0 <= max <= 99).
A partir de 101 imbrications (max=100) je n'obtiens plus le message du débogueur, le programme est donc bogué.
A partir de 109 imbrications (max=108) j'obtiens une erreur du compilateur qui ne répond plus du tout.

La limite est donc de 100.

Re: If nombre de commande

Publié : sam. 24/oct./2009 10:16
par Ollivier
mille millions de milliards de milliards de mille...

Re: If nombre de commande

Publié : sam. 24/oct./2009 13:00
par Huitbit
(Wikipédia)
Utilisation des tables de Karnaugh
Les tables/tableaux de Karnaugh sont surtout utilisé(e)s en électronique. En effet, la simplification de l'expression algébrique booléenne permet d'économiser des opérateurs logiques (portes logiques) et donc des circuits. Elle engendre aussi une économie de temps de conception et de fonds, tout en augmentant la fiabilité de l'ensemble.

En programmation, l'utilisation des tables de Karnaugh permet de réduire les séquences de conditions de test complexes en les regroupant en des conditions non intuitives au premier abord, mais qui réduisent la complexité effective du code (volume du source), ainsi que son temps d'exécution en réduisant le nombre des évaluations nécessaires.
Ca vaut quand même le coup non ? Surtout qu'il existe des logiciels qui font la simplification automatiquement, ce n'est peut être pas la peine de mettre les mains dans le cambouis :roll: , il suffit de faire des tableaux de vérité qui répondent aux attentes du programme.

Je n'ai jamais utilisé Karnaugh (si un jour j'en ai besoin, je pense que je m'en servirai) mais juste avec l'algèbre de Boole (qui ne demande pas de gros efforts :mrgreen: ), on peut réduire nettement le nombre de tests !

Hasta la vista !

Re: If nombre de commande

Publié : sam. 24/oct./2009 19:06
par djes
<MODE sarcasme ON>
Vous êtes tous des idiots :lol:. Ca fait des heures que ce pauvre Beauregard essaye de vous dire que son problème n'est pas l'imbrication de tests de conditions, mais le nombre de ceux-ci dans un code. Autrement dit, pas des

Code : Tout sélectionner

IF test1 THEN
  IF test2 THEN
    (...)
  ENDIF
ENDIF
mais de simples

Code : Tout sélectionner

IF test1 THEN
ENDIF
IF test2 THEN
ENDIF
<MODE sarcasme OFF>

Re: If nombre de commande

Publié : sam. 24/oct./2009 19:59
par Backup
djes a écrit :<MODE sarcasme ON>
Vous êtes tous des idiots :lol:. Ca fait des heures que ce pauvre Beauregard essaye de vous dire que son problème n'est pas l'imbrication de tests de conditions, mais le nombre de ceux-ci dans un code. Autrement dit, pas des

Code : Tout sélectionner

IF test1 THEN
  IF test2 THEN
    (...)
  ENDIF
ENDIF
mais de simples

Code : Tout sélectionner

IF test1 THEN
ENDIF
IF test2 THEN
ENDIF
<MODE sarcasme OFF>
ha ?

et pourquoi crois tu qu'on ne le sait pas ? 8O
on a lu ce qu'il a ecrit , mais rien n'empeche de rebondir sur autre chose , d'autan
que Fred lui a répondu !
que seul la limite est pour les if imbriqués , nous on le sait parceque nous on a tout lu

alors que toi tu tire des conclusion a la hate, sans avoir compris qu'on ne c'est pas arreté pour autant, dans la discussion soulevé, on l'a meme fait évoluer :)

je poserai alors une question

c'est qui l'idiot ?

:lol:

Re: If nombre de commande

Publié : sam. 24/oct./2009 20:13
par djes
Dobro a écrit :
djes a écrit :<MODE sarcasme ON>
Vous êtes tous des idiots :lol:. Ca fait des heures que ce pauvre Beauregard essaye de vous dire que son problème n'est pas l'imbrication de tests de conditions, mais le nombre de ceux-ci dans un code. Autrement dit, pas des

Code : Tout sélectionner

IF test1 THEN
  IF test2 THEN
    (...)
  ENDIF
ENDIF
mais de simples

Code : Tout sélectionner

IF test1 THEN
ENDIF
IF test2 THEN
ENDIF
<MODE sarcasme OFF>
ha ?

et pourquoi crois tu qu'on ne le sait pas ? 8O
on a lu ce qu'il a ecrit , mais rien n'empeche de rebondir sur autre chose , d'autan
que Fred lui a répondu !
que seul la limite est pour les if imbriqués , nous on le sait parceque nous on a tout lu

alors que toi tu tire des conclusion a la hate, sans avoir compris qu'on ne c'est pas arreté pour autant, dans la discussion soulevé, on l'a meme fait évoluer :)

je poserai alors une question

c'est qui l'idiot ?

:lol:
C'est moi...........

Re: If nombre de commande

Publié : sam. 24/oct./2009 22:39
par beauregard
n'est stupide que la stupidité, hum.

Mais comme dis plus haut, le problème que j'ai découvert avec pb concerne le nombre de conditions, et non l'imbrication... Fred va assurément se pencher la dessus. Mais je comprend l'intérêt suscité par l'imbrication, un sujet intéressant, donc cela ne me dérange pas qu'il soit évoqué ici.
Dobro a écrit :mais la simple idée de savoir qu'on est limité par le nombre de IF, moi ça me stress :lol:
je partage ce stress. J'ai mis quand même du temps à cerner le problème. Je pensais dans un premier temps que le problème venait du côté du nombre de commandes en général, puis du nombre de caractère, je me suis même méfié de clipsprite...
Je n'ai jamais utilisé Karnaugh (si un jour j'en ai besoin, je pense que je m'en servirai) mais juste avec l'algèbre de Boole (qui ne demande pas de gros efforts :mrgreen: ), on peut réduire nettement le nombre de tests !
Salut Huitbit, n'hésite pas à laissé sur ce forum une photo du paradis, ici le ciel est de nouveau gris. Toute la difficulté avec une théorie, c'est la mise en pratique.
Un exemple, avec l'animation du vaisseau de l'intro du jeu Vers l'infini(16 images sur 4 rangées) :

Code : Tout sélectionner

If ishipintro<5:ClipSprite(#shipb, ishipintro*64, 64, 64, 48):EndIf
If ishipintro>4 And ishipintro<10:ClipSprite(#shipb, (ishipintro-5)*64, 112, 64, 48):EndIf
If ishipintro>9 And ishipintro<15:ClipSprite(#shipb, (ishipintro-10)*64, 160, 64, 48):EndIf
If ishipintro=15:ClipSprite(#shipb, 0, 208, 64, 48):EndIf
DisplayTransparentSprite( #shipb , 400-32, 410) 
4 conditions toute simple donc...
En sachant que pour un jeu les images n'ont pas toutes la même taille, ni le même nombre d'étape d'animation, je ne vois pas comment ce brave Karnaugh pourra m'aider, hum :?:

Re: If nombre de commande

Publié : sam. 24/oct./2009 23:58
par Backup
en fait ce qui est interressant , serai de savoir pourquoi tu te pose la question du nombre de if !

je dis ça parce que par exemple, avec Japbe j'avais de gros probleme de listing et de rafraichissement,
alors que j'atteignais les 6000 lignes de code....

je veux dire que tu as peut etre un symptome qui t'amene a penser que le nombre de IF importes
alors qu'il s'agit d'un bête problème de buffer dans l'editeur...... :)

Re: If nombre de commande

Publié : dim. 25/oct./2009 0:25
par comtois
beauregard a écrit :Un exemple, avec l'animation du vaisseau de l'intro du jeu Vers l'infini(16 images sur 4 rangées) :

Code : Tout sélectionner

If ishipintro<5:ClipSprite(#shipb, ishipintro*64, 64, 64, 48):EndIf
If ishipintro>4 And ishipintro<10:ClipSprite(#shipb, (ishipintro-5)*64, 112, 64, 48):EndIf
If ishipintro>9 And ishipintro<15:ClipSprite(#shipb, (ishipintro-10)*64, 160, 64, 48):EndIf
If ishipintro=15:ClipSprite(#shipb, 0, 208, 64, 48):EndIf
DisplayTransparentSprite( #shipb , 400-32, 410) 
4 conditions toute simple donc...
En sachant que pour un jeu les images n'ont pas toutes la même taille, ni le même nombre d'étape d'animation, je ne vois pas comment ce brave Karnaugh pourra m'aider, hum :?:
ben tu peux l'écrire de deux façons différentes :

Code : Tout sélectionner

If ishipintro<5
  ClipSprite(#shipb, ishipintro*64, 64, 64, 48)
ElseIf ishipintro>4 And ishipintro<10
  ClipSprite(#shipb, (ishipintro-5)*64, 112, 64, 48)
ElseIf ishipintro>9 And ishipintro<15
  ClipSprite(#shipb, (ishipintro-10)*64, 160, 64, 48)
ElseIf ishipintro=15
  ClipSprite(#shipb, 0, 208, 64, 48)
EndIf

Select ishipintro
  Case 0 To 4
    ClipSprite(#shipb, ishipintro*64, 64, 64, 48)
  Case 5 To 9
    ClipSprite(#shipb, (ishipintro-5)*64, 112, 64, 48)
  Case 10 To 14
    ClipSprite(#shipb, (ishipintro-10)*64, 160, 64, 48)
  Case 15
    ClipSprite(#shipb, 0, 208, 64, 48)
EndSelect

Re: If nombre de commande

Publié : dim. 25/oct./2009 10:47
par djes
D'accord avec Comtois, ton code serait beaucoup plus clean avec des "select case" ; et puis cette histoire de clipsprite peut se data-ifier ; là c'est un boulot de fou! Tu n'as pas fait un petit éditeur pour sélectionner les images? Tu pourrais ainsi créer un fichier de données de découpes...

Pour le fun, je me suis amusé à faire un source bourré de "IF"; j'ai atteint ma limite mémoire de compilation à environ 400000 lignes. Donc pas de limitation à cause des IF, mais à cause de l'assembleur.