Boucles For et probleme de type [Résolu]

Signaler
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
-
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
-
Bonsoir tout le monde ;


Voilà ; j’ai des variables déclarées en integer puis j’ai des boucles for imbriquées (avec ces variables) mais je suis obligé d’incrémenter le pas de 0.5 uniquement !!! Sachant que les boucles for n’acceptent que les variables de type ordinal ; alors comment faire ; les autres formes d’itération ne me conviennent pas ou du moins je ne sais pas comment les utilisées efficacement dans mon problème (j’espère que ma question ou mon explication du problème n’est pas tirée par les cheveux)  LOL Merci .

7 réponses

Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
Salut,

Tu pourrais utiliser d'autres boucles comme "repeat until" ou "while end".
Mais si tu tiens à garder "for to", moi je ferais comme ça :

var
  i: Integer;
  e: Extended;
begin
  e := 0.0;
  for i := 0 to 39 do // équivaut 0 to 20
  begin
    e := e + 0.5;
    //...
  end;
end;

Bonne prog'
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
"les autres formes d'itération ne me conviennent pas ou du moins je ne
sais pas comment les utilisées efficacement dans mon problème"

Ah oui... je n'avais pas fait attention.
Voici les autres possibilités, je les ai mises en situation pour vérifier.
On part donc toujours de l'hypothèse d'un boucle  qui incrémente Valeur = 0 de 0.5, jusqu'à 20.
Trois Buttons, un Label et hop :

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  e: Extended;
begin
  e := 0.0;
  for i := 0 to 39 do
  begin
    e := e + 0.5;
    Label1.Caption := FloatToStr(e);
    Application.ProcessMessages;
    Sleep(100);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  e: Extended;
begin
  e := 0.0;
  while e < 20 do
  begin
    e := e + 0.5;
    Label1.Caption := FloatToStr(e);
    Application.ProcessMessages;
    Sleep(100);
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  e: Extended;
begin
  e := 0.0;
  repeat
    e := e + 0.5;
    Label1.Caption := FloatToStr(e);
    Application.ProcessMessages;
    Sleep(100);
  until e = 20;
end;

Bonne prog' 
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
1
Bonjour japee ; tout d’abords merci pour ton intervention ; J’aurai du poser le problème autrement :<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





repeat .. until fera  bien l’affaire  elle me permettra de faire des incrémentation de 0.5 au lieu de 1  sauf que je ne sais pas quoi faire de mes Edit pour faire un transtypage string extended   





voilà ma boucle .






 
 







procedure TForm_affiche_scene.AfficherClick(Sender: TObject);





var





sphere : TGLBaseSceneObject;





R,Teta,Phi : integer;





x,y,z : extended;







begin





r:= strtoint(Edit_rayon.Text);






 






for phi := 0 to strtoint(Edit_phi.Text) do





begin






 







   for teta:= -90 to strtoint(Edit_teta.Text) do






   begin






   x:= cos(teta)*cos(phi)*r;






  

y:= cos(teta)*sin(phi)*r;






  

z:= sin(teta);






   sphere := GLDummyCube1.AddNewChild(TGLSphere);






   sphere.Assign(GLsphere1);






   sphere.Position.SetPoint(x,y,z);






 






end;





end;





end;






 






Merciiiiiiiiiiiiiiiiiiii
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2020
6
string -> Extended : StrToFloat(),

Extended -> string : FloatToStr().


Je ne vois pas où tu veux appliquer une incrémentation au pas de 0.5 dans ton code ?
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
1
StrToFloat()
, formidable ! ; super ! et moi qui me cassé la tête toute la nuit.  Comme ça c’est jouable


Merci japee très gentil .
 Pour "l’incrémentation au pas de 0.5" je voulais
l’utiliser pour incrémenter téta je pensais avoir un rendu meilleur !!!!! 
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Salut,

@ khawarizm, en passant...
 
¨Pour donner une bonne habitude à khawarizm pour la 3D, un extrait de l'aide Delphi:
«(uses math;)      
'SinCos' est deux fois plus rapide qu'un appel Sin suivi d'un appel à Cos pour le même angle.»

Tu dois savoir que des appels à sin et cos sont trés lents; et dans une boucle... la lenteur est multipliée par le nombre d'itérations.

En 3D il est fréquent de calculer les tableaux COS et SIN pour toutes les valeurs d'un angle par pas de 1° dans le 'Formcreate' et ainsi éviter les appels à des fonctions système très coûteux en temps.

En général, une incrémentation de 0.5° ne fera que ralentir l'animation  sans donner un meilleur rendu.

J'ai essayé d'être clair, mais j'suis pas sûr...  :)))
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
1
Bonsoir Cari ; primo : je suis   ravi de te lire  secundo :  tu à été très claire je te remercie beaucoup et puis  tu sais, je débute sous GLScene et par conséquent la  3D sous Delphi  et je compte bien perfectionner mes connaissances de cette technique que je trouve très intéressante . Alors mon ami  tes conseils seront toujours les bien venus .
<tt>
A bientôt dans les prochains messages.
</tt>

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>