Page 1 sur 1

Boucle For/Next comme en C ( supporte les flottants )

Publié : sam. 11/févr./2006 18:26
par Flype

Code : Tout sélectionner

Macro For(initialisation, condition, incrementation, instruction)
  initialisation
  While (condition)
    instruction
    incrementation
  Wend
EndMacro

Procedure MyProc(value)
  Debug "value = " + Str(value)
EndProcedure

For( i=0, i<5, i+1, MyProc(i) )

Debug "----------"

For( i=5, i>0, i-1, MyProc(i) )

Debug "----------"

For( i=0, i<20, i+2, MyProc(i) )

Debug "----------"

For( i=0, i<5, i+1, Debug Str(i) )

Debug "----------"

For( j.f=0.0, j<2.0, j+0.1, Debug StrF(j,1) )

Debug "----------"

For( j.f=0.0, j<0.20, j+0.05, Debug StrF(j,2) )

Publié : sam. 11/févr./2006 18:31
par flaith
Oahhh, puissant !!

Publié : sam. 11/févr./2006 18:46
par KarLKoX
#good

Publié : sam. 11/févr./2006 18:53
par Flype
une autre petite macro :

Code : Tout sélectionner

Macro For2( fVar, fStart, fStop, fStep, fException, fInstruction)
  For fVar = fStart To fStop Step fStep
    If fVar = fException
    Else
      fInstruction
    EndIf
  Next
EndMacro

Dim Departement.s(9)

Departement(1) = "Ain"
Departement(2) = "Aisne"
Departement(3) = "Allier"
Departement(4) = "Alpes-de-Haute-Provence"
Departement(5) = "Hautes-Alpes"
Departement(6) = "Alpes-Maritimes"
Departement(7) = "Ardeche"
Departement(8) = "Ardennes"
Departement(9) = "Ariege"

For2( i, 1, 9, 1, 6, Debug Departement(i) )


Publié : sam. 11/févr./2006 19:15
par nico
ça veut juste dire qu'on pouvait le faire comme on le savait avec la version précédente mais si ça peut permettre à d'autre de s'en rendre compte. :lol:

Publié : sam. 11/févr./2006 19:45
par Backup
nico a écrit :ça veut juste dire qu'on pouvait le faire comme on le savait avec la version précédente mais si ça peut permettre à d'autre de s'en rendre compte. :lol:
c'est pas une raison !!

a ce titre y a beaucoup de fonction de purebasic qui peuvent etre remplacées par un appel au APIs

seulement les fonction Purebasic sont plus parlante , c'est l'interet d'un basic !

de ce fait les boucles For-next integrants les variables ou les literales en Flottant , sont une tradition en Basic , aussi vielles que le language lui meme

demander a avoir des flottants dans une boucle est légitime
bien sur que l'on peut s'en passer , comme on pourrai se passer de toutes les fonctions purebasic , et programmer en assembleur par appel....
des apis

seulement c'est plus du Basic ! :?

l'intervention de Flype est interressante , pour le maniment des Macros
je ne pense pas que son but soit d'empecher une integration en Natif des boucles for-next-step avec Flottants (qui resterai quand meme beaucoup plus court !) :D

ps : ça va plaire a Dri cette forme de boucle :lol:

Publié : sam. 11/févr./2006 19:54
par Flype
Dobro a écrit :l'intervention de Flype est interressante , pour le maniment des Macros
je ne pense pas que son but soit d'empecher une integration en Natif des boucles for-next-step avec Flottants (qui resterai quand meme beaucoup plus court !) :D
C'est clair que je m'oppose pas au flottant ( ou autre ) dans les boucles For/Next en natif...
Mais en attendant cette macro est didactique et peut servir à d'autres.

Publié : sam. 11/févr./2006 19:55
par Dr. Dri
Génial Flype :10:
Voila un exemple dans le même genre :D

Code : Tout sélectionner

Macro For(initialisation, condition)
  initialisation
  While (condition)
EndMacro

Macro Next(incrementation)
    incrementation
  Wend
EndMacro

For i = 16 To 10 Step -1
  Debug i
Next i

Debug "---"

For(i = 16, i>=10)
  Debug i
Next(i-1)
un deuxième pour la forme :D

Code : Tout sélectionner

Procedure.f Factorielle(n.l)
  Protected f.f
  
  For(f = 1, n>0)
    f * n
  Next(n-1)
  
  ProcedureReturn f
EndProcedure

Debug Factorielle(0)
Debug Factorielle(1)
Debug Factorielle(2)
Debug Factorielle(3)
Debug Factorielle(4)
Dri :D

Publié : sam. 11/févr./2006 20:04
par nico
a ce titre y a beaucoup de fonction de purebasic qui peuvent etre remplacées par un appel au APIs
avec les prototypes maintenant, on peut renommer sans problème.

:)

Publié : sam. 11/févr./2006 20:05
par Flype
Dr. Dri a écrit :Génial Flype :10:
Voila un exemple dans le même genre :D

Code : Tout sélectionner

Macro For(initialisation, condition)
  initialisation
  While (condition)
EndMacro

Macro Next(incrementation)
    incrementation
  Wend
EndMacro

For i = 16 To 10 Step -1
  Debug i
Next i

Debug "---"

For(i = 16, i>=10)
  Debug i
Next(i-1)
Je m'étais fait la même aussi :wink:

Publié : sam. 11/févr./2006 20:11
par nico
Il est plus facile aussi maintenant de faire du POO comme le montre ce code de FSW:

Code : Tout sélectionner

;oop example by fsw 
;extends the Fantaisie Software "Labels/address in datasection" 
;example with Properties - now we have Methods and Properties 


;~~~~~~~~~~~~~~~~~~~~ 
;Start MyObject class 
;~~~~~~~~~~~~~~~~~~~~ 

;define Methods 
Interface MyObject 
   StoreThis(par.l) 
   GetThat() 
   ;add more Methods if needed 
EndInterface 

;define Properties 
Structure MyObject_Properties 
   VTable.l ;this is needed to store the address of the Methods vtable 
   ValueOfThat.l ;start with the properties 
   ;add more properties if needed 
EndStructure 

;this method/procedure can have a different name than in the interface 
;the only thing that is important is the position in the vtable 
Procedure This(*Self.MyObject_Properties, par.l) 
   *Self\ValueOfThat = par 
   MessageRequester("MyObject", "This: " + Str(par)) 
EndProcedure 

;this method/procedure can have a different name than in the interface 
;the only thing that is important is the position in the vtable 
Procedure That(*Self.MyObject_Properties) 
   MessageRequester("MyObject", "That: " + Str(*Self\ValueOfThat)) 
EndProcedure 


;Create a class list 
;this way there can be more than one object of a class 
Global NewList MyObject_List.MyObject_Properties() 

Procedure CreateThisClass() 
   AddElement(MyObject_List()) 
   MyObject_List()\VTable = ?Procedures 
   ProcedureReturn MyObject_List() 
EndProcedure 

;- start main: 
m.MyObject = CreateThisClass() 

m\StoreThis(347) 
m\GetThat() 


End 

DataSection 
   Procedures: 
      Data.l @This(), @That() 
EndDataSection 

Mais avec des macros je me demande si on ne pourrait pas simplifier encore la création de class, des idées Flype?

Publié : sam. 11/févr./2006 20:25
par Flype
Ouais carrément nico...
je vais y réfléchir...

Publié : dim. 12/févr./2006 1:18
par LeCyb
J'ai du mal à capter pourquoi dans le code source il est dit que la liste permet d'avoir plusieurs objets de la classe, moi j'y arrive sans utiliser de liste.

D'ailleurs je vais réactualiser mon exemple des interfaces (qui permet de ne plus rien avoir en global :D).

Publié : dim. 12/févr./2006 10:08
par Good07
Génial ces petits exemples. :D
ça aide pour la compréhension des macros qui étaient pour moi un peu obscures.
Maintenant sa roule du moins pour les exemples simples.
Juste une petite rectification du 2eme code de Flype.

Code : Tout sélectionner

Macro For2( fVar, fStart, fStop, fStep, fException, fInstruction)
  For fVar = fStart To fStop Step fStep
    If  fVar<>fException
      fInstruction
    EndIf
  Next
EndMacro

Dim Departement.s(9)

Departement(1) = "Ain"
Departement(2) = "Aisne"
Departement(3) = "Allier"
Departement(4) = "Alpes-de-Haute-Provence"
Departement(5) = "Hautes-Alpes"
Departement(6) = "Alpes-Maritimes"
Departement(7) = "Ardeche"
Departement(8) = "Ardennes"
Departement(9) = "Ariege"

For2( i, 1, 9, 1, 6, Debug Departement(i) )
J'ai mis <> de au lieu de =. ça permet de faire sauter le Else en plein milieu. :D

Merci à tous pour ces exemples.