Page 1 sur 3

If nombre de commande

Publié : jeu. 22/oct./2009 12:29
par beauregard
pb semble limité en nombre de commande if. Existe un code pour connaître le nombre de commande, comme If, dans son programme ?

Re: If nombre de commande

Publié : jeu. 22/oct./2009 13:53
par Fred
Théoriquement pas de limite (sauf au nombre d'imbrication qui ne doit pas depasser 128).

Re: If nombre de commande

Publié : jeu. 22/oct./2009 15:17
par Octavius
Tu dis ça parce que tu as un problème avec un code beauregard ? Tu nous fais voir ?

Re: If nombre de commande

Publié : ven. 23/oct./2009 16:15
par beauregard
Fred a écrit :Théoriquement pas de limite
j'ai atteint cette limite. Faut dire que ce gourmand de pâtissier a besoin de beaucoup de conditions. ;)
Octavius a écrit :Tu dis ça parce que tu as un problème avec un code beauregard ? Tu nous fais voir ?
donnée sensible. mais merci quand même :)

Re: If nombre de commande

Publié : ven. 23/oct./2009 16:36
par Fred
Limite en imbrication ?

Re: If nombre de commande

Publié : ven. 23/oct./2009 17:57
par Ollivier
Un petit bonjour et un grand merci à Fred pour sa présence ici. Au passage, merci aussi pour ce travail de mise à jour du compilateur de ta part et celle de ton équipe. Je suis vraiment satisfait par cette future version.

@Beauregard

Voici un code qui met en pratique la limite dont Fred parle. Je vais être direct : elle est inatteignable car si

Code : Tout sélectionner

If ... CodeA... Else ...CodeB ... Endif
correspond à un univers de 2 codes conditionnels (CodeA et CodeB) imbriqués sur un étage (car un seul If nécessaire pour que le CPU choisisse et exécute le code concerné), une condition d'une profondeur de 128 étages (ou 128 imbrications) correspond à un univers d'environ 260 milliards de milliards de milliards de milliards de codes conditionnels. C'est donc instockable ou inexécutable si tu possédais un PC dont la taille physique ferait trois fois le volume du Soleil.

Pour être concret, voici un code qui illustre le problème:
(10 étages, c'est déjà 4093 lignes de code minimum,
11 étages, c'est 8189 lignes de codes, etc...)

On voit bien que la valeur de 128 étages d'imbrications est très loin d'être atteignable dans ce programme...

Voilà! Bonne bourre!

Code : Tout sélectionner

OpenConsole()
Global.I Marge, Tab = 4, LineQty

Procedure Pr(Text.S)
    LineQty + 1
    PrintN(Space(Marge) + Text)
EndProcedure

Procedure IfTest(Prof.I)
    If Prof > 0
        Pr("If ???")
        Marge + Tab
        IfTest(Prof - 1)
        Marge - Tab
        Pr("Else")
        Marge + Tab
        IfTest(Prof - 1)
        Marge - Tab
        Pr("EndIf")
    Else
        Pr("Sous-routine")
    EndIf
EndProcedure
    Repeat
        Print("Saisissez la profondeur d'imbrication (commencez par 1 puis 2, etc...) : ")
        Prof = Val(Input() )
        PrintN("")
        PrintN("")
        PrintN("")
        LineQty = 0
        IfTest(Prof)
        PrintN("")
        PrintN("")
        PrintN("")
        PrintN("Pour " + Str(Prof) + " etage(s) d'imbrication, on a obtenu " + Str(LineQty) + " lignes de code.")
        PrintN("")
        PrintN("")
        PrintN("")
    Until Prof = 0
    CloseConsole()

Re: If nombre de commande

Publié : ven. 23/oct./2009 18:12
par Octavius
Fred a écrit :sauf au nombre d'imbrication qui ne doit pas depasser 128
Pourquoi cette limite ? C'est directement lié à PureBasic ou bien aux processeurs ? Et y a-t-il une limite avec le nombre de ElseIf ?

Re: If nombre de commande

Publié : ven. 23/oct./2009 18:21
par Ollivier
@Octavius

Salut, exécute mon petit code juste au-dessus et tu comprendras qu'à notre échelle d'humain comme à celle du plus puissant système de calcul réseau du Monde actuel et à venir pour au moins deux siècles, cette limite de 128 étages d'imbrications est tellement gigantesque qu'elle n'existe pas à nos petits yeux de misérables humains que nous sommes.

C'est juste que Beauregard se bat avec certain de ses défauts de méthode de programmation, et qu'en même temps (et ça peut se comprendre bien entendu) il doit éviter de publier son bébé pour être aidé. Comme je te le disais "Attention à l'imposture". On se fait vite glisser un code par des gens peu scrupuleux.

Ollivier

Re: If nombre de commande

Publié : ven. 23/oct./2009 18:52
par Anonyme
Octavius a écrit :
Fred a écrit :sauf au nombre d'imbrication qui ne doit pas depasser 128
Pourquoi cette limite ? C'est directement lié à PureBasic ou bien aux processeurs ? Et y a-t-il une limite avec le nombre de ElseIf ?

Je vais tenté de repondre à la place de Fred , je pense que c'est plus une Limite du à la conception et à l'architecture du parser PB / ASM ( Transformation du code purebasic en bytecode ) , et puis 128 imbrications , faut y aller... :D
Comme le dit Olivier , faut revoir le code , c'est certain ^^

D'ailleurs , auras t'on le droit de testé le pâtissier ? :wink:

Re: If nombre de commande

Publié : ven. 23/oct./2009 19:14
par Backup
lorsque je lis certains trucs ici, ça me désole :)
une condition d'une profondeur de 128 étages (ou 128 imbrications) correspond à un univers d'environ 260 milliards de milliards de milliards de milliards de codes conditionnels
en fait ce qui me désole c'est les certitudes utilisées !!

affirmer qu'on ne peut avoir besoin de plus de 128 if imbriqués est deja une erreur

un 'if' imbriqué est en fait un 'And'

en effet suivant cette exemple

Code : Tout sélectionner

a=2
b=3
CallDebugger

If a=2
  If b=3
    Debug "ok"
  EndIf
EndIf


If a=2 And b=3
  Debug "ok"
EndIf
on se rends bien compte que les 2 méthodes sont identiques !

alors que je ne compare que 2 variables !!

comparer 129 variables est loin de l'impossible

inutile de parler de milliard de possibilités !! :roll:

bien sur qu'on peut éviter , mais je trouve plutot embetant de savoir qu'il existe une limite

meme mon pureGolo (interpreteur a 2 balles) , n'a pas de limites de profondeur de if imbriqué
sauf la Ram ! ;)

Re: If nombre de commande

Publié : ven. 23/oct./2009 19:34
par Anonyme

Code : Tout sélectionner

a=2
b=3
CallDebugger

If a=2
	If b=3
		Debug "ok"
	EndIf
EndIf


If a=2 And b=3
	Debug "ok"
EndIf
Olivier à raison ,
dans ton code , tu as déjà 4 possibilités pour 2 variables , rajoute en une troisième...

a=2 b=3
a!=2 b=3
a=2 b=!3
a!=2 b=!3

chaque variable à deux états , vrai ou faux. je te laisse faire le calcul :D

Re: If nombre de commande

Publié : ven. 23/oct./2009 19:39
par beauregard
Fred a écrit :Limite en imbrication ?
non, juste de simple if comme

Code : Tout sélectionner

If variable=1:machin+1:Endif
Tu as remarqué au festival le nombre d'animation et le niveau d'interaction du jeu, et pour faire tourner tout çà il y a des conditions toutes simples, mais en très grand nombre.
Si tu regarde le code du jeu Vers l'infini dans le forum jeu, tu verra que j'utilise déjà énormément de condition.

Ollivier a écrit :@Octavius

Salut, exécute mon petit code juste au-dessus et tu comprendras qu'à notre échelle d'humain comme à celle du plus puissant système de calcul réseau du Monde actuel et à venir pour au moins deux siècles, cette limite de 128 étages d'imbrications est tellement gigantesque qu'elle n'existe pas à nos petits yeux de misérables humains que nous sommes.

C'est juste que Beauregard se bat avec certain de ses défauts de méthode de programmation, et qu'en même temps (et ça peut se comprendre bien entendu) il doit éviter de publier son bébé pour être aidé. Comme je te le disais "Attention à l'imposture". On se fait vite glisser un code par des gens peu scrupuleux.

Ollivier
j'utilise très peu d'imbrication, car pour moi cela complique le code. Comment dire, j'ai mémorisé tout mon code car il reste fondamentalement simple. Avec imbrication, je n'arrive plus à visualiser dans mon esprit l'ensemble du code, et donc à le mémoriser. Merci pour ton conseil.
Cpl.Bator a écrit :D'ailleurs , auras t'on le droit de testé le pâtissier ? :wink:
En fait j'attend que la marque du jeu soit protégé à l'international, ce qui prend vachement de temps.

Re: If nombre de commande

Publié : ven. 23/oct./2009 19:52
par Backup
@Cpl

je ne parle pas ici du nombre de possibilitées , ça sert a rien
puisqu'un 'if' n'est la que pour en retenir une seule !

et il ne me semble pas déraisonnable d'avoir 129 variables a comparer ensemble !
fut-ce dans un test bourré de 'And' ou bien pour etre plus clair dans une serie de 129 'if' imbriqués !

et la je ne parle que de variables , ou l'on sent bien intuitivement que nous pourions eviter
ces 'if' en mettant un flag dans une seule variable....

mais imaginez devoir vérifier 129 conditions logiques complexe
pour pouvoir faire effectuer un mouvement a un robot par exemple ;)
et que bien sur , chaque conditions doit etre valable pour passer a la condition suivante ;)


il ne s'agit pas dans ce cas de milliards de combinaison , mais juste 129 ! (128+1 exprès ;) )

bien sur on pourra toujours trouver une astuce, mais je trouve justement que l'imbrication des if (utilisés comme condition AND) est plus claire , qu'une seule ligne de 1200 caractere (chiffre au hasard) , comptant autant de 'And' :)

Re: If nombre de commande

Publié : ven. 23/oct./2009 22:47
par PAPIPP
Bonjour à tous
Voici pour le plaisir le nombre de lignes en fonction de la profondeur d'imbrication à raison d'une instruction par ligne

Code : Tout sélectionner

; Si l'on place une instruction par ligne  voici le Nombre obtenu 

; pour prof 1 ; if else endif 3 lignes + 2 lignes subroutines 
; ******************************************************************************** 
;pour prof 2 : 3 lignes niv1 + 6 lignes niv 2 + pow(2,2) subroutines
; ou           (pow(2,0)+pow(2,1))*3+pow(2,2)
;if 
;     If Else EndIf 
;      Else 
;      If Else EndIf
;  endif   ici 3ligne
;pour prof 2 : 3 lignes niv1 + 6 lignes niv 2 + pow(2,2) subroutines
; ou    somme des lignes de chaque niv *3 =      (pow(2,0)+pow(2,1))*3  forme générale pour profondeur prof  SOMME(pow(2,prof-1) de 0 à prof de if else ou endif
;         Plus                                                     +Pow(2,2) ------------->   forme générale pour profondeur prof  pow(2,prof ) de subroutines                                    
; Prg suivant 


prof$=InputRequester("Nombre de lignes de prg en if(s) imbriqués","donnez la profondeur <129","128")
prof=Val(prof$)
sp.d=0
  For i=0 To prof-1
   sp.d+Pow(2,i)
  Next
   sp=sp*3+Pow(2,prof)
  Debug "pour une profondeur de " + prof$+" ="+StrD(sp,0)

Re: If nombre de commande

Publié : sam. 24/oct./2009 0:05
par Backup
:lol: :lol: n'importe quoi !

pour 128 imbrication de if , ça donne environs 256 lignes !
, simplement parcequ'il y aura 128 if , et 128 endif
puis en plus la ou les lignes concernant le test du IF central....
rien de plus...

bon tu peux aussi ajouter des lignes dans les if a differents etage, mais c'est pas obligé hein...
;)

Code : Tout sélectionner

Dim a(128) 
If a(1)=1
  If a(2)=1
    If a(3)=1
      If a(4)=1
        If a(5)=1
          If a(6)=1
            If a(7)=1
              If a(8)=1
                If a(9)=1
                  If a(10)=1
                    If a(11)=1
                      If a(12)=1
                        If a(13)=1
                          If a(14)=1
                            If a(15)=1
                              If a(16)=1
                                If a(17)=1
                                  If a(18)=1
                                    If a(x)=1
                                      If a(x)=1
                                        If a(x)=1
                                          If a(x)=1
                                            If a(x)=1
                                              If a(x)=1
                                                If a(x)=1
                                                  If a(x)=1
                                                    If a(x)=1
                                                      If a(x)=1
                                                        If a(x)=1
                                                          If a(x)=1
                                                            If a(x)=1
                                                              If a(x)=1
                                                                If a(x)=1
                                                                  If a(x)=1
                                                                    If a(x)=1
                                                                      If a(x)=1
                                                                        If a(x)=1
                                                                          If a(x)=1
                                                                            If a(x)=1
                                                                              If a(x)=1
                                                                                If a(x)=1
                                                                                  If a(x)=1
                                                                                    If a(x)=1
                                                                                      If a(x)=1
                                                                                        If a(x)=1
                                                                                          If a(x)=1
                                                                                             If a(x)=1
                                                                                              If a(x)=1
                                                                                                If a(x)=1
                                                                                                  If a(x)=1
                                                                                                    If a(x)=1
                                                                                                      If a(x)=1
                                                                                                        If a(x)=1
                                                                                                          If a(x)=1
                                                                                                            If a(x)=1
                                                                                                              If a(x)=1
                                                                                                                If a(x)=1
                                                                                                                  If a(x)=1
                                                                                                                    If a(x)=1
                                                                                                                      If a(x)=1
                                                                                                                        If a(x)=1
                                                                                                                          If a(x)=1
                                                                                                                            If a(x)=1
                                                                                                                              If a(x)=1
                                                                                                                                If a(x)=1
                                                                                                                                  If a(x)=1
                                                                                                                                    If a(x)=1
                                                                                                                                      If a(x)=1
                                                                                                                                        If a(x)=1
                                                                                                                                          If a(x)=1
                                                                                                                                            If a(x)=1
                                                                                                                                              If a(x)=1
                                                                                                                                                If a(x)=1
                                                                                                                                                  If a(x)=1
                                                                                                                                                    If a(x)=1
                                                                                                                                                      If a(x)=1
                                                                                                                                                        If a(x)=1
                                                                                                                                                          If a(x)=1
                                                                                                                                                            If a(x)=1
                                                                                                                                                              If a(x)=1
                                                                                                                                                                If a(x)=1
                                                                                                                                                                  If a(x)=1
                                                                                                                                                                    If a(x)=1
                                                                                                                                                                      If a(x)=1
                                                                                                                                                                        If a(x)=1
                                                                                                                                                                          If a(x)=1
                                                                                                                                                                            If a(x)=1
                                                                                                                                                                              If a(x)=1
                                                                                                                                                                                If a(x)=1
                                                                                                                                                                                  If a(x)=1
                                                                                                                                                                                    If a(x)=1
                                                                                                                                                                                      If a(x)=1
                                                                                                                                                                                        If a(x)=1
                                                                                                                                                                                          If a(x)=1
                                                                                                                                                                                            If a(x)=1
                                                                                                                                                                                              If a(x)=1
                                                                                                                                                                                                If a(x)=1
                                                                                                                                                                                                  If a(x)=1
                                                                                                                                                                                                    If a(x)=1
                                                                                                                                                                                                      If a(x)=1
                                                                                                                                                                                                        If a(x)=1
                                                                                                                                                                                                          If a(x)=1
                                                                                                                                                                                                            If a(x)=1
                                                                                                                                                                                                              If a(x)=1
                                                                                                                                                                                                                If a(x)=1
                                                                                                                                                                                                                  If a(x)=1
                                                                                                                                                                                                                    If a(x)=1
                                                                                                                                                                                                                      If a(x)=1
                                                                                                                                                                                                                        If a(x)=1
                                                                                                                                                                                                                          If a(x)=1
                                                                                                                                                                                                                            If a(x)=1
                                                                                                                                                                                                                              If a(x)=1
                                                                                                                                                                                                                                If a(x)=1
                                                                                                                                                                                                                                  If a(x)=1
                                                                                                                                                                                                                                    If a(x)=1
                                                                                                                                                                                                                                      If a(x)=1
                                                                                                                                                                                                                                        If a(x)=1
                                                                                                                                                                                                                                          If a(x)=1
                                                                                                                                                                                                                                            If a(x)=1
                                                                                                                                                                                                                                              If a(x)=1
                                                                                                                                                                                                                                                If a(x)=1
                                                                                                                                                                                                                                                  If a(x)=1
                                                                                                                                                                                                                                                    If a(x)=1
                                                                                                                                                                                                                                                      If a(x)=1
                                                                                                                                                                                                                                                        If a(x)=1
                                                                                                                                                                                                                                                          Debug "ok"
                                                                                                                                                                                                                                                        EndIf
                                                                                                                                                                                                                                                      EndIf
                                                                                                                                                                                                                                                    EndIf
                                                                                                                                                                                                                                                  EndIf
                                                                                                                                                                                                                                                EndIf
                                                                                                                                                                                                                                              EndIf
                                                                                                                                                                                                                                            EndIf
                                                                                                                                                                                                                                          EndIf
                                                                                                                                                                                                                                        EndIf
                                                                                                                                                                                                                                      EndIf
                                                                                                                                                                                                                                    EndIf
                                                                                                                                                                                                                                  EndIf
                                                                                                                                                                                                                                EndIf
                                                                                                                                                                                                                              EndIf
                                                                                                                                                                                                                            EndIf
                                                                                                                                                                                                                          EndIf
                                                                                                                                                                                                                        EndIf
                                                                                                                                                                                                                      EndIf
                                                                                                                                                                                                                    EndIf
                                                                                                                                                                                                                  EndIf
                                                                                                                                                                                                                EndIf
                                                                                                                                                                                                              EndIf
                                                                                                                                                                                                            EndIf
                                                                                                                                                                                                          EndIf
                                                                                                                                                                                                      EndIf                              EndIf
                                                                                                                                                                                                    EndIf
                                                                                                                                                                                                  EndIf
                                                                                                                                                                                                EndIf
                                                                                                                                                                                              EndIf
                                                                                                                                                                                            EndIf
                                                                                                                                                                                          EndIf
                                                                                                                                                                                        EndIf
                                                                                                                                                                                      EndIf
                                                                                                                                                                                    EndIf
                                                                                                                                                                                  EndIf
                                                                                                                                                                                EndIf
                                                                                                                                                                              EndIf
                                                                                                                                                                            EndIf
                                                                                                                                                                          EndIf
                                                                                                                                                                        EndIf
                                                                                                                                                                      EndIf
                                                                                                                                                                    EndIf
                                                                                                                                                                  EndIf
                                                                                                                                                                EndIf
                                                                                                                                                              EndIf
                                                                                                                                                            EndIf
                                                                                                                                                          EndIf
                                                                                                                                                        EndIf
                                                                                                                                                      EndIf
                                                                                                                                                    EndIf
                                                                                                                                                  EndIf
                                                                                                                                                EndIf
                                                                                                                                              EndIf
                                                                                                                                            EndIf
                                                                                                                                          EndIf
                                                                                                                                        EndIf
                                                                                                                                      EndIf
                                                                                                                                    EndIf
                                                                                                                                  EndIf
                                                                                                                                EndIf
                                                                                                                              EndIf
                                                                                                                            EndIf
                                                                                                                          EndIf
                                                                                                                        EndIf
                                                                                                                      EndIf
                                                                                                                    EndIf
                                                                                                                  EndIf
                                                                                                                EndIf
                                                                                                              EndIf
                                                                                                            EndIf
                                                                                                          EndIf
                                                                                                        EndIf
                                                                                                      EndIf
                                                                                                    EndIf
                                                                                                  EndIf
                                                                                                EndIf
                                                                                              EndIf
                                                                                            EndIf
                                                                                          EndIf
                                                                                        EndIf
                                                                                      EndIf
                                                                                    EndIf
                                                                                  EndIf
                                                                                EndIf
                                                                              EndIf
                                                                            EndIf
                                                                          EndIf
                                                                        EndIf
                                                                      EndIf
                                                                    EndIf
                                                                  EndIf
                                                                EndIf
                                                              EndIf
                                                            EndIf
                                                          EndIf
                                                        EndIf
                                                      EndIf
                                                    EndIf
                                                  EndIf
                                                EndIf
                                              EndIf
                                            EndIf
                                          EndIf
                                        EndIf
                                      EndIf
                                    EndIf
                                  EndIf
                                EndIf
                              EndIf
                            EndIf
                          EndIf
                        EndIf
                      EndIf
                    EndIf
                  EndIf
                EndIf
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndIf