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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

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

Message 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) )
Image
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Oahhh, puissant !!
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

#good
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

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

Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

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

Message 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:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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.
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

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

:)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Ouais carrément nico...
je vais y réfléchir...
Image
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message 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).
Vive le thread-safe !
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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.
Répondre