If nombre de commande

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

If nombre de commande

Message 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 ?
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: If nombre de commande

Message par Fred »

Théoriquement pas de limite (sauf au nombre d'imbrication qui ne doit pas depasser 128).
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Re: If nombre de commande

Message par Octavius »

Tu dis ça parce que tu as un problème avec un code beauregard ? Tu nous fais voir ?
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: If nombre de commande

Message 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 :)
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: If nombre de commande

Message par Fred »

Limite en imbrication ?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: If nombre de commande

Message 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()
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Re: If nombre de commande

Message 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 ?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: If nombre de commande

Message 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
Anonyme

Re: If nombre de commande

Message 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:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: If nombre de commande

Message 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 ! ;)
Anonyme

Re: If nombre de commande

Message 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
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: If nombre de commande

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: If nombre de commande

Message 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' :)
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: If nombre de commande

Message 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)
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: If nombre de commande

Message 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

Répondre