Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2157 connectés 

 


Dernière réponse
Sujet : [Delphi - Newbie] Les appels croisés entre unités
Jubijub ct une faute de ma part : j'avais pas mis de parenthèses à la première condition... c vrai que a = b or c =d, selon l'endroit ou tu met tes parenthèses, ca veut pas dire pareil...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Jubijub ct une faute de ma part : j'avais pas mis de parenthèses à la première condition... c vrai que a = b or c =d, selon l'endroit ou tu met tes parenthèses, ca veut pas dire pareil...
JWhy bah si, y'a pas de raison... un test est un test, que ca soit un simple bContinuer ou un (machin XOR truc) AND NOT (Bidule OR (i=3))
 
en gros , du moment que le resultat est boolean, tu peux mettre ce que tu veux !  
 
(ou alors, j'ai pas bien compris la question)
Jubijub pour un repeat .. until, on peut pas mettre 2 conditions de sorties et que l'une XOR l'autre soit valide ?
Jubijub ok...
 
ca m'étonne moins du coup :p :D
JWhy regarde la: http://forum.hardware.fr/forum2.php3?post=250&cat=10 (3eme reponse)
Jubijub ok, merci...
 
-->sinon question comme ca : tu sais programmer dans combien de langages ?
JWhy la syntaxe du while est comme suit:
 
while test do
  instruction
 
une instruction est :
une instruction simple (appel de fonction, assignement, etc...)
  ou  
une suite d'instructions encadré par begin...end
 
donc dans ton cas quand tu mets:
 

Code :
  1. while Continuer do
  2.    Continuer := InputQuery('Entrez un nombre', 'Essai n° '+ inttostr(Compteur), UserEntry);
  3.    if Continuer = True then
  4.    [...]


 
tu es dans le cas instruction simple: Continuer := InputQuery et donc il boucle sur le inputquery tant que tu n'as pas clické sur annuler.
 
ensuite il fera le test qui bien sur est faux puisque tu auras quitter la boucle.
en gros ton code avec la bonne tabulation donne qqchose comme ca:

Code :
  1. while Continuer do
  2.    Continuer := InputQuery('Entrez un nombre', 'Essai n° '+ inttostr(Compteur), UserEntry);
  3. if Continuer = True then
  4.    [...]


   
et c'est aussi pour ca que tu as l'erreur de compilation avec le end;
 
tu as bien mis le end; mais pas le begin donc le compilateur fait la tronche !
 
il te faut :

Code :
  1. while Continuer do
  2. begin
  3.    Continuer := InputQuery('Entrez un nombre', 'Essai n° '+ inttostr(Compteur), UserEntry);
  4.    if Continuer = True then
  5.    [...]
  6. end;

Jubijub ca marche pas :  
 

Citation :


begin
 // j'assigne vrai a bContinuer  
 bContinuer := true;
 
 // tant que bContinuer est vrai, je fais mon code
 while bContinuer do
 begin
   // bContinuer est true si l'utilisateur a clické sur OK
   bContinuer := InputQuery('Input Box', 'Prompt', sValeur);
   if bContinuer then
   begin
     // l'utilisateur a clické sur OK, donc je gere la valeur sValue saisie.
   end;
   //sinon, si il a clické sur Cancel, bContinuer sera False et donc je sortirai de ma boucle
 end;
end;


 
 
ca me donne ca :  
 

Citation :


Code :
  1. procedure TForm1.Button3Click(Sender: TObject);
  2. begin
  3.     UserEntry :='0';
  4.     Compteur := 0;
  5.     Nb := Generation(LimiteNum);
  6.     Continuer := True;
  7.     while Continuer do
  8.     Continuer := InputQuery('Entrez un nombre', 'Essai n° '+ inttostr(Compteur), UserEntry);
  9.         if Continuer = True then
  10.             begin
  11.             showmessage('test ok');
  12.             UserEntryNum :=strToInt(UserEntry);
  13.             Disp := test(UserEntryNum,Nb);
  14.             Compteur := Compteur +1;
  15.             if (Disp = 'Vous avez entré un nombre trop petit') XOR (Disp = 'Vous avez entré un nombre trop grand') then
  16.             ShowMessage(Disp)
  17.             else
  18.             ShowMessage(Disp + ' en ' + IntToStr(Compteur) + ' coups')
  19.             end;
  20.             showmessage('Vous venez de quitter');
  21.     end;
  22. end;
  23. end.




 
quand j'appuie sur btn3, g la input query, mais quand je tape un nombre, la boite revient avec le même nombre, et le nombre d'essai est pas incrémenté, preuve qu'il y a pas de boucle...pis le compilo me dit que g un end de trop : là tel que c tapé, g une erreur de compilation sur l'avant dernier end, qui me dit qu'il trouve un ";" au lieu de '.' ...si je vire un end;, alors ca compîle, mais ca buggue...
 
-->pourtant g un end pour la procédure btn, un end pour la boucle while, et un end pour le procédure de test if...ben si je les met les 3, ca buggue...

 

[edtdd]--Message édité par Jubijub--[/edtdd]

Jubijub Cad tu met juste un uppercase sur chaque début de Mot dans ta variable...
 
donc si g bien compris, nombre de jour d'une année, entier, sera :

  • Pour Jwhy : iNombreJourAnnee
  • Pour Antp : NombreJourAnnee


...j'avais remarqué l'infobulle, elle sert bien aussi pour les instruction, si tu la laisses dessus, ca te dit ce qu'elle prend comme type de var...ca evite les erreurs connes de coùpil

antp mwouais... mais bon je préfère me conformer au standard de Borland, vu que tout leur source est comme ça, et que la majorité des développeurs suit ça.
JWhy http://www.delphi-jedi.org/Jedi:JCLOPSG:54342
 
ca doit etre le meme contenu...
 
antp> je suis d'accord avec toi mais quand tu fais des relectures croisées de codes c'est bien pratique d'avoir ca !
antp normalement en Pascal il faut pas:
 
http://community.borland.com/artic [...] 80,00.html
 
en plus dans delphi quand tu passes sur les var y a une infobulle qui en donne le type... donc c'est pas trop nécessaire.

 

[edtdd]--Message édité par antp--[/edtdd]

JWhy oui... c'est bien pratique quand t'as du code a lire:
iEntier, sChaine, bBooleen, dtDateTime, dbDouble, etc...
 
je vais essayer de te trouver les regles de nommages de Delphi que j'utilise, je crois qu'elles sont sur le site de Borland...
Jubijub tu met tjs le type de var en minuscule devant tes noms de variable ?
JWhy pour concatener, t'as l'operateur + ou bien format()
 
sChaine1 := 'Le debut'
sChaine2 := sChaine1 + ' de la fin';
 
ou bien
 
sChaine1 := 'Le debut'
sChaine2 := format('%s %s',[sChaine1, 'de la fin']);
 
ou encore
sChaine2 := 'Le debut' +' '+ 'de la fin';
 
t'as le choix !

 

[edtdd]--Message édité par JWhy--[/edtdd]

Jubijub et pour copier dans une char, y'a rien d'autre que la concaténation avec + ? (c bien ca déjà, c juste pour savoir si il existe autre chose)
JWhy il te faut donc utiliser Copy()
 
1) tu verifies que tu as la bonne taille ( taille de la chaine = taille d'un numero de SS) ou alors (version crade) taille de la chaine > 8 (c-a-d taille mini necessaire pour trouver la date + dep.)
 
2) si c'est ok, tu scindes:
var sSexe, sYY, sMM, sDDD :String;
 
sSexe := Copy(sSS, 1, 1);
sYY := Copy(sSS, 2, 2);
sMM := Copy(sSS, 4, 2);
sDDD := Copy(sSS, 6, 3);
 
et apres tu fais tes tests, est-ce numerique, est-ce que le mois est bien entre 1 et 12 , etc... bref tu valides ce que tu as recuperé!

 

[edtdd]--Message édité par JWhy--[/edtdd]

Jubijub Ben euh, imaginons un exemple tordu :  
 
T sur mon site, tu dois entrer ton numéro Insee...qui contient ta date de naissance, donc je sais si tu es majeur. ( :o l'exemple foireux....ch'suis l'pornographe du phonographe :D )
 
Un numéro Insee ca donne ca :  
S - AA - MM - DD - etc...
 
S = sexe a 2 valeurs : 1 et 2 : 1 = gars, 2 = fille autre =  :heink:  
AA = année de naissance a comme valeur [00..99]
MM = mois de naissance a comme valeur [01..12]
DD = departement a comme valeur [01..110]
 
Donc suivant mon exemple, en te connectant, t'a une QueryBox qui vient et te demande ton numéro insee (seuls les 5 premiers chiffres sont significatifs, le reste tu met ce que tu veux, il en faut juste 13 en tt).
 
Tu te retrouve donc avec une string qui contient, genre '1810406....'
Je veux pouvoir scanner la string chiffre par chiffre, et en fonction de leur position, pouvoir tester des trucs, genre :  
si char(1) = '1' then Bonjour Monsieur else Bonjour Madame
si (StrToInt(char(2)+ char(3)) < 83) then ShowMessage(Tu n'es pas majeur/e (le premier char me donne l'orthographe))...et mettons que je sois fada et que j'ai rentré les 110 et quelques departements francais dans un tableau ou autre type plus adapté (j'en sais rien), que si char(4)+char(6) = '06' then Montrer le contenu du tableau ligne 6, dans un tu viens des alpes maritimes...
 
et là ton truc marche pas...parce que la saisie est uniforme, et que je dois la scinder...

 

[edtdd]--Message édité par Jubijub--[/edtdd]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)