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

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

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 :D , je penses que je vais pouvoir me débrouiller :P :P :P ...
Merci bcp .

@+ wood51