Boucles For et probleme de type [Résolu]

khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 6 oct. 2007 à 01:50 - Dernière réponse : khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention
- 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 .
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 6 oct. 2007 à 09:43
3
Merci
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'

Merci japee 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de japee
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 6 oct. 2007 à 09:55
0
Merci
"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' 
Commenter la réponse de japee
khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 6 oct. 2007 à 11:38
0
Merci
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
Commenter la réponse de khawarizm
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 6 oct. 2007 à 12:32
0
Merci
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 ?
Commenter la réponse de japee
khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 6 oct. 2007 à 13:15
0
Merci
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 !!!!! 
Commenter la réponse de khawarizm
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 10 oct. 2007 à 01:12
0
Merci
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...  :)))
Commenter la réponse de Caribensila
khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 11 oct. 2007 à 22:12
0
Merci
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" /??>
Commenter la réponse de khawarizm

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.