m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005
-
20 avril 2005 à 10:49
Niki2001
Messages postés85Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention17 décembre 2005
-
26 avril 2005 à 19:04
Voila mon petit problème, j’ai une Form avec
3 TEdit : le TEdit1 sert entrer des chiffres
le TEdit2 sert de compteur pour savoir le nombre de chiffres rentrés
le TEdit3 sert à visualiser le résultat
3 TButton : le TButton1 sert à mémoriser les chiffres du TEdit1
le TButton2 sert à calculer la somme de tout les chiffres mémorisés
le TButton3 sert à tout effacer
Cela s’apparente à une calculatrice sauf que tant qu’on n’a pas appuyé sur le TButton3 le TEdit3 reste à 0.
Donc si on appuie sur le TButton3, le résultat s’affiche. Et si l’on ajoute d’autre chiffres et qu’on appui de nouveau sur TButton3 il faut que la nouvelle somme calculée vienne s’ajouter à la précédente.
Ca parrait simple mais ça fait deux jours que je me casse les dents dessus
Niki2001
Messages postés85Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention17 décembre 20051 20 avril 2005 à 12:25
Déjà, premier conseil, nomme tes edits et tes boutons! EdSaisie, EdNombre, EdResultat, BtMemoriser, BtCalculer, EdEffacer. Ce sera beaucoup plus clair.
Ensuite, utilise la propriété Tag de tes edits: met le tag de ton Edit2 à la propriété qu'il affiche. Comme ça, tu n'as plus qu'à faire un Edit2.Tag+1 à chaque click sur Button1 et à faire un IntToStr. De même, met le Tag de ton Edit3 sur le résultat pour additionner a chaque clic sur Bouton1. Tu n'auras plus qu'à l'afficher à chaque click sur Button3;
Si vraiment tu n'y arrives pas, j'ai mis dessous un exemple de ce que j'aurais fait. Mais bon, c'est pas intéressant si on ne fait pas ses programmes soi-même.
En résumé, tu pourrais faire un truc comme ça:
BtMemoriserClick:
begin
EdNombre.Tag:= EdNombre.Tag+1;
EdNombre.Text:= IntToStr(EdNombre.Tag);
EdResultat.Tag:= EdResultat.Tag+StrToInt(EdSaisie.Text);
EdSaisie.Clear;
end;
BtCalculerClick:
begin
If EdSaisie.Text<>'' then
BtMemoriserClick(BtMemoriser);
EdResultat.Text:= IntToStr(EdResultat.Tag);
end;
m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005 20 avril 2005 à 13:50
Merci Niki 2001, c'est cool ça "marche"!
Mais je me suis mal exprimé avec mon histoire de mémoriser
En faite il faut que ces chiffres soient mémorisés dans des variables que j'appelerais Ei où i varie de 1 à n (n étant le chiffres final du compteur), parce qu' après j'aurais d'autres opérations plus compliquées à faire avec ces Ei
vincentstryckmans
Messages postés228Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention25 octobre 2006 20 avril 2005 à 13:57
Niki 2001 a raison pour les noms des composants.
C'est également valable pour tes variables. Ei cela ne veut pas dire
grand chose surtout à la personne qui devra plonger (ou toi même) ton
code dans 3 à 4 ans.
Si la réponse de Nikki 2001 t'agrée, accepte là STP.
Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.
m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005 20 avril 2005 à 14:54
Dans le domaine ou je travail les Ei sont des variables courantes, tout la vingtaine autres variables portant un indice i, que je manipule sur papier. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Ca peut même être pire parce que j'ai même des variables a 4 indices comme par exemple Zijkl ou chaque indice i, j, k et l varie de 1 à 3 et ou il faudrait rajouter un cinquième indices pour mon programme!
Je n’en dirais pas plus sur cette histoire de variables indicés, sinon je risque de gaffer, et vu que c’est un projet industriel je peut avoir des ennuis.
C’est vrai ça réponse me va pour une addition, mais j'ai d'autre opérations à faire ces chiffres, et ils ne seront pas tous réutilisés dans certaines opérations qui seront effectués plus tard, c'est pour ça qu’il faut qu’ils soient stockés dans des Ei où i varie de 1 à n (n étant le chiffres final du compteur).
En gros il faut qu’a chaque fois qu’on clique sur Mémoriser cela créé une variable Ei !!!!
Exemple :
10 dans Edsaisie click Mémoriser => créer E1 et mémoriser 10 dans E1 (E1=10)
23 dans Edsaisie click Mémoriser => créer E2 et mémoriser 23 dans E2 (E2=23)
…
76 dans Edsaisie click Mémoriser => créer Ei et mémoriser 76 dans Ei (Ei=76)
…
57
dans Edsaisie click Mémoriser => créer En et mémoriser 57 dans En (En=76)
ou n étant le dernier chiffre apparaissant dans le compteur.
Et donc quand on fait Calculer on a Resultat=E1+E2+…Ei+…+En avec l’exemple ça donne
Resultat=10+23+…+76+…+57
C’est tout !
J'espère que cette dernière explication est un peu plus claire
Merci !!!!
PS: Désolé pour ce ton austère et peu agressif mais j’ai 3 personnes sur le dos a qui je doit rendre des comptes quasiment tout les jours.
m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005 21 avril 2005 à 08:40
Ca que très peut de temps que j'ai commencé à faire de la programmation (environ 3semaines) et je n'avait fait qu'un peut de C avant (juste les bases et encore) alors je suis un peu perdu
Don ça parrait bête comme questions, mais comment il faut faire pour ranger les chiffres et les réutilisés avec la fonction TabValue (un exemple m'aiderais beaucoup)
Et comme je l'ai "dit" dans le message précédant j'aurais au final une vingtaine de variables comme mais Ei , ça ne risque pas de poser un problème
Niki2001
Messages postés85Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention17 décembre 20051 21 avril 2005 à 11:46
C'est très simple (en théorie): tu fais SetLength(TabValue, n) pour lui attribuer une taille (que tu pourras bien sûr modifier à chaque fois que tu ajoute un chiffre). Ensuite, tu fais TabValue[x] pour accéder au xième nombre mémorisé. Donc à chaque fois que tu mémorise un nombre tu fais:
Inc(n);
SetLength(TabValue, n);
Remarque!! L'index commence à zéro! Donc, le dernier nombre du tableau sera n-1!
Donc:
TabValue[n-1]:= x;
Bonne chance!
Niki2001
Messages postés85Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention17 décembre 20051 21 avril 2005 à 11:49
Dernier truc! Pour additionner tous les nombres,il faut créer une boucle:
var
i, x: integer;
for i:=0 to (Length(TabValue)-1) do
x:= x+TabValue[i];
Voila!
Sur ce...
m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005 21 avril 2005 à 14:14
J'ai reppris tes notations (suite au premier message) et j'ai fait ça:
procedure TForm1.BtMemoriserClick(Sender: TObject);
var TabValue: array of integer;
var n:Integer;
begin Inc(n);
SetLength(TabValue, n);
TabValue[n]:= StrToInt(EdSaisie.Text);
EdNombre.Text:=IntToStr(StrToInt(EdNombre.Text)+1);
EdSaisie.Clear;
end;
procedure TForm1.BtCalculerClick(Sender: TObject);
var TabValue: array of integer;
var i, x: integer;
begin for i: =0 to (Length(TabValue) -1) do
x:= x+TabValue[i];
EdResultat.Text:=FloatToStr(x);
end;
procedure TForm1.EdEffacerClick(Sender: TObject);
begin EdSaisie.Clear;
EdResultat.Clear;
EdNombre.Text: ='0';
end;
Ca ne fonctionne pas, et je ne vois pas pourquoi
La je commence vraiment à devinir fou
PS: Et la déclaration du TabValue il faut la faire où (avant toutes les procédures?) et peut ton donner un autre nom que TabValue
Niki2001
Messages postés85Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention17 décembre 20051 21 avril 2005 à 14:36
En fait le problème vient du fait que (et je crois que tu l'avais senti) TabValue et n doivent être déclarés avant toutes les procédures. Ensuite, quelques autres erreurs:
-tu doit faire TabValue[n-1] pour accéder au dernier nombre du tableau, car l'index commence à 0 (par exmple s'il y a 2 nombres, les index seront 0 et 1).
- quand tu fais: EdNombre.Text:=IntToStr(StrToInt(EdNombre.Text)+1); pourquoi ne pas faire directement IntToStr(n)? puisque n représente le nombre en question.
- je viens de penser, si tu veux que l'on puisse rentrer des nombres décimaux (je pense ça en voyant que tu fais FloatToStr), il faut déclarer TabValue: array of extended et faire un StrToFloat au lieu d'un StrToInt dans BtMemoriserClick.
Je pense que ça devrait aller mais s'il y a un problème n'hésite pas!
procedure TForm1.BtCalculerClick(Sender: TObject);
var i, x: integer;
begin for i: =0 to (Length(TabValue) -1) do
x:= x+TabValue[i];
EdResultat.Text:=FloatToStr(x);
end;
procedure TForm1.EdEffacerClick(Sender: TObject);
begin EdSaisie.Clear;
EdResultat.Clear;
EdNombre.Text: ='0';
end;
Quand on clique sur Calculer dans le EdResultat il y a 4358304 qui apparait sa c'est si on n'a pas restré de nombres et s'il y a des nombres mémorisés, par exemple 10,on fait Calculer et on a 4358314. Je ne comprend toujours pas
Et si toi tu devais tapper un code pour ce problème ça donnerait quoi
m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005 21 avril 2005 à 18:08
On y est presque
Avec la première astuce que tu m'as donnée et en remplaçant n par x et en le déclarant avec n on s'en rapproche.
Exemple on mémorise 10 et 20 et clique sur calculer et on a bien 30. Et si on mémorise 70 après calcul on devrait obtenir 100 et bien non on a 130.
Comme je l'ai dit tout à l'heure je deviens fou !!!
J'ai même essayer de mettre des conditions du style si EdResultat=0, mais ça donne le même problème qu'au dessus.
Je sais pas/plus quoi essayer
m_cyril1
Messages postés59Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention 3 juin 2005 22 avril 2005 à 09:15
Non pas d'accord!!!
Revoici le code avec la deuxième solution et il y a toujours le problème du 4358324 (et non 4358304) après avoir cliqué sur Calculer.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
procedure TForm1.BtCalculerClick(Sender: TObject);
var i, x: integer;
begin
for i: =0 to (Length(TabValue)-1) do
x:= x+TabValue[i];
EdResultat.Text:=FloatToStr(x);
end;
procedure TForm1.BtEffacerClick(Sender: TObject);
begin
InitialiseCalculs;
end;
end.
Et je pense que lorsque l'on fait Calculer sans avoir mémoriser de chiffres, on devrait avoir un message d'erreur, vu que par défaut (d'aprés l'aide de Delphi) le TabValue[0] =vide. Donc c'est qu'il y a un problème.
PS: D'après une doc que j'ai trouvé sur Delphi la variable n lorsqu'on utilise la fonction Inc(n) est automatiquement mis à zéro à l'ouverte, parcontre c'est vrai qu'il faut remettre n à 0 qu'on fait effacer. Je pense plutot que ça vient de l'initialisation de x