Page 1 sur 1
Correspondance entre Pascal et PureBasic ?
Publié : ven. 11/janv./2013 22:22
par wood51
Bonsoir ,
J'ai besoin de traduire un bout de code Pascal (enregistrement avec variantes ??? ) en PureBasic mais j'avoue que là je pèche !
Code : Tout sélectionner
TYPE date RECORD
jours:integer
mois:integer
ans:interger
END;
VAR date1:date
date1.jours = 11
date1.mois = 1
date.ans = 2013
pourrais ce traduire ainsi (enfin je pense)
Code : Tout sélectionner
Structure date
jours.i
mois.i
ans.i
EndStructure
date1.date
date1\jours = 11
date1\mois = 1
date1\ans = 2013
Mon problème est ce genre de code :
Code : Tout sélectionner
TYPE statut=(celibataire,marie,divorce,veuf);
perso=RECORD
nom:string[20];
CASE situation:statut OF
celibataire:();
marie:(enfants:0..10);
divorce,veuf:(enfants:0..10;remarie:boolean)
END;
Ce code à l'air de sélectionner une structure différente suivant "status" qui fais partie de ??? Enfin bref je vois pas , Si vous connaissez peut-être pourriez vous éclairer ma lanterne . Sur Google je trouve que d'autre truc en Pascal et franchement çà m'avance pas des masses .
@+ Wood51
Re: Correspondance entre Pascal et PureBasic ?
Publié : ven. 11/janv./2013 23:34
par stombretrooper
Pour ta première traduction, tout à fait.
Pour la seconde, en PureBasic je ferais comme ça :
Code : Tout sélectionner
Structure Statut
nom.s{20}
situation.a
EndStructure
Structure StatutMarie Extends Statut
array enfants.?[10]
EndStructure
Structure StatutDivorce Extends Statut
Array enfants.?[10]
Remarie.a
EndStructure
En sachant que StatutVeuf, c'est la même structure que StatutDivorce. Et StatutCelibataire est la même structure que Statut. De plus, je ne savais pas le type de "Enfants". Sûrement un pointeur sur le même genre de structure ;
Array *Enfants.Statut[10]
A++
Re: Correspondance entre Pascal et PureBasic ?
Publié : sam. 12/janv./2013 0:43
par wood51
Merci pour la réponse
Le seul hic c'est que je ne vois pas comment "switcher" sur telle ou telle structure .
Dans le code suivant :
Code : Tout sélectionner
TYPE statut=(celibataire,marie,divorce,veuf);
perso=RECORD
nom:string[20];
CASE situation:statut OF
celibataire:();
marie:(enfants:0..10);
divorce,veuf:(enfants:0..10;remarie:boolean)
END;
Si j'ai bien compris , je déclare une variable ("x") de type "perso" . J'ai accès au champ "nom" dans tous les cas .
Si je fait "X.situation = marie" alors je ne peux accéder qu'aux champs "nom" et "enfants"
Si je fait "X.situation = veuf" alors je ne peux accéder qu'aux champs "nom" ,"enfants","remarie"
Si je fait "X.situation = celibataire" alors je ne peux accéder qu'au champ "nom"
C'est bizarre comme truc

.
En tout cas merci de la réponse , je vais creuser

Re: Correspondance entre Pascal et PureBasic ?
Publié : sam. 12/janv./2013 2:27
par stombretrooper
Je te complète un peu ma réponse, avec l'utilisation d'un tel code ;
Avec la variable situation de la structure Statut, tu peux savoir si tu as à faire à un marié, divorcé, ou autre (vie une valeur, suffit de dire 0 = marié, 1 = divorcé...)
Ensuite, il te suffit de faire un code de ce genre là pour manipuler les structures ;
Code : Tout sélectionner
; *exemple.Statut déclaré avant ;
Select *exemple\situation
case #StatutMariage; Mariage
*exemple_mariage.StatutMarie = *exemple
... actions ...
case #StatutDivorce ; Divorcé
*exemple_divorcé.StatutDivorce = *exemple
... actions ...
EndSelect
Note que si tu accèdes à une structure divorce par exemple, alors que tu l'as déclaré comme veuf au préalable, tu vas avoir des invalid memory access... On mélange pas les choux et les carottes.
L'usage est d'utilisé des constantes à la place des nombres, sinon bonjour les erreurs ;
Code : Tout sélectionner
Enumeration
#StatutMariage
#StatutDivorce
#StatutCelibataire
#StatutVeuf
EndEnumeration
Correspondance entre Pascal et PureBasic ?
Publié : sam. 12/janv./2013 9:03
par wood51
Salut ! J'essaie ça dès que possible . Un grand merci
Re: Correspondance entre Pascal et PureBasic ?
Publié : sam. 12/janv./2013 11:14
par Backup
Le plus simple c'est de le refaire en Purebasic
voici un exemple de Structures
avec Creation de Fiches , et Recherche Dans ces Fiches suivant différents Critères
Code : Tout sélectionner
Structure date ; sous_structure de Fiche
jours.c
mois.c
ans.i
EndStructure
date.date
Structure Fiche Extends Date
Nom.s
Statut.s ; "celibataire","marie","divorce","veuf" , on peut remplacer par une variable numérique bien sur
Enfant.c
EndStructure
Dim Fiche.fiche(255) ; 255 fiches possible
; Remplir une fiche
i=0
fiche(i)\jours.c=1
fiche(i)\mois.c=12
fiche(i)\ans.i=2012
fiche(i)\nom.s="Dupont"
fiche(i)\statut.s="celibataire" ; "celibataire","marie","divorce","veuf"
fiche(i)\Enfant.c=1
; Remplir une autre fiche
i=1
fiche(i)\jours.c=2
fiche(i)\mois.c=12
fiche(i)\ans.i=2012
fiche(i)\nom.s="Durand"
fiche(i)\statut.s="marie" ; "celibataire","marie","divorce","veuf"
fiche(i)\Enfant.c=5
; Remplir une autre fiche
i=2
fiche(i)\jours.c=8
fiche(i)\mois.c=01
fiche(i)\ans.i=2013
fiche(i)\nom.s="Duchmol"
fiche(i)\statut.s="veuf" ; "celibataire","marie","divorce","veuf"
fiche(i)\Enfant.c=0
; Remplir une autre fiche
i=3
fiche(i)\jours.c=5
fiche(i)\mois.c=5
fiche(i)\ans.i=2012
fiche(i)\nom.s="trucMuch"
fiche(i)\statut.s="divorce" ; "celibataire","marie","divorce","veuf"
fiche(i)\Enfant.c=0
; *********** recherche sur fiches **************
; qui a des enfants ?
debug "Qui a des Enfants ?"
Debug " *****************************************"
for i= 0 to 254
if fiche(i)\Enfant.c>0 ; regarde si le nombre d'enfant est superieur a zero
debug "Mr "+fiche(i)\nom.s+" a "+str(fiche(i)\Enfant.c)+" Enfant(s)" ; oui, alors on affiche le nom de la Fiche
endif
next i
Debug " *****************************************"
Debug ""
; qui est celibataire ?
Debug "qui est celibataire ?"
Debug " *****************************************"
for i= 0 to 254
if fiche(i)\statut.s ="celibataire"; regarde si le statut correspond a Celibataire
debug "Mr "+fiche(i)\nom.s+" est "+fiche(i)\statut.s ; oui , alors on affiche le nom de la fiche
endif
next i
Debug " *****************************************"
Debug ""
; qui est Veuf ?
Debug "qui est Veuf ?"
Debug " *****************************************"
for i= 0 to 254
if fiche(i)\statut.s ="veuf"; regarde si le Statut correspond a "Veuf"
debug "Mr "+fiche(i)\nom.s+" est "+fiche(i)\statut.s ; oui alors on affiche le nom de la fiche
endif
next i
Debug " *****************************************"
; etc ...
; EPB
Re: Correspondance entre Pascal et PureBasic ?
Publié : sam. 12/janv./2013 17:54
par wood51
Merci de vos réponses

, je penses que je vais pouvoir me débrouiller

...
Merci bcp .
@+ wood51