If nombre de commande
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
If nombre de commande
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
Théoriquement pas de limite (sauf au nombre d'imbrication qui ne doit pas depasser 128).
Re: If nombre de commande
Tu dis ça parce que tu as un problème avec un code beauregard ? Tu nous fais voir ?
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: If nombre de commande
j'ai atteint cette limite. Faut dire que ce gourmand de pâtissier a besoin de beaucoup de conditions.Fred a écrit :Théoriquement pas de limite

donnée sensible. mais merci quand mêmeOctavius a écrit :Tu dis ça parce que tu as un problème avec un code beauregard ? Tu nous fais voir ?

Re: If nombre de commande
Limite en imbrication ?
Re: If nombre de commande
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 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!
@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
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
Pourquoi cette limite ? C'est directement lié à PureBasic ou bien aux processeurs ? Et y a-t-il une limite avec le nombre de ElseIf ?Fred a écrit :sauf au nombre d'imbrication qui ne doit pas depasser 128
Re: If nombre de commande
@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
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
Octavius a écrit :Pourquoi cette limite ? C'est directement lié à PureBasic ou bien aux processeurs ? Et y a-t-il une limite avec le nombre de ElseIf ?Fred a écrit :sauf au nombre d'imbrication qui ne doit pas depasser 128
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...

Comme le dit Olivier , faut revoir le code , c'est certain ^^
D'ailleurs , auras t'on le droit de testé le pâtissier ?

Re: If nombre de commande
lorsque je lis certains trucs ici, ça me désole
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
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 !!
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 !

en fait ce qui me désole c'est les certitudes utilisées !!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
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
alors que je ne compare que 2 variables !!
comparer 129 variables est loin de l'impossible
inutile de parler de milliard de possibilités !!

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

-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: If nombre de commande
non, juste de simple if commeFred a écrit :Limite en imbrication ?
Code : Tout sélectionner
If variable=1:machin+1:Endif
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.
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.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
En fait j'attend que la marque du jeu soit protégé à l'international, ce qui prend vachement de temps.Cpl.Bator a écrit :D'ailleurs , auras t'on le droit de testé le pâtissier ?
Re: If nombre de commande
@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'
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
Bonjour à tous
Voici pour le plaisir le nombre de lignes en fonction de la profondeur d'imbrication à raison d'une instruction par ligne
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.
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Re: If nombre de commande


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