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

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.

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 !)
ps : ça va plaire a Dri cette forme de boucle

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

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

Voila un exemple dans le même genre
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
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

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

Voila un exemple dans le même genre
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

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

).
Publié : dim. 12/févr./2006 10:08
par Good07
Génial ces petits exemples.
ç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.
Merci à tous pour ces exemples.