Boucles For et probleme de type

Résolu
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 - 6 oct. 2007 à 01:50
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 - 11 oct. 2007 à 22:12
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

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
6 oct. 2007 à 09:43
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'
3
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
6 oct. 2007 à 09:55
"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' 
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
6 oct. 2007 à 11:38
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
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
6 oct. 2007 à 12:32
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
6 oct. 2007 à 13:15
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 !!!!! 
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
10 oct. 2007 à 01:12
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...  :)))
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
11 oct. 2007 à 22:12
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" /??>
0
Rejoignez-nous