Calcul clé de contrôle

cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010 - 5 oct. 2004 à 16:35
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 7 oct. 2004 à 14:19
Salut à Tous.
Voila je me retrouve dans une situation critique. Après avoir dévellopé une application avec Delphi7, c'elle ci consiste à gérer un certains nombre d'abonnés au réseau Téléphonique, dont le numéro abonné a été réduit à un nombre de 7 chiffre, ce que je voudrait faire c'est de Multiplier chaque chiffre de ce nombre en commençant par par le 4,5,6,7,8 et 9 et allant de Droite vers la gauche et en Totalisant le résultat, la Clé de controle sera déterminé.

Exemple:
N° Abonné : 74 20 06

( 6 *4 =20 , 0*5= 0 , 0*6= 0 , 2*7=14 , 4*8=32 , 7*9=63)
20+0+0+14+32+63 =129.
La Clé de Controle c'est les deux premier chiffres en allant de droite vers la gauche (29), le 1 sera ignorer.

Très Urgent
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. 2004 à 02:05
Salut, slim59.

6*4 = 24, pour info ;)
Donc, pour le 74 20 06, le résultat sera 133, et la clé de contrôle 33.

Sinon, je ne vois pas trop où est la difficulté, à moins que tu ne débutes en programmation ?

Voici un exemple fonctionnel, quoique vite fait :

function RetourneCode(NumTel: String): String;
var
  i: Integer;
  Code: Integer;
  Coeff: Integer;
begin
  Result := '';
  if NumTel = EmptyStr then Exit;
  Delete(NumTel, 6, 1);
  Delete(NumTel, 3, 1);
  Code := 0;
  Coeff := 4;
  for i := 6 downto 1 do
  begin
    Code := Code + StrToInt(NumTel[i]) * Coeff;
    Inc(Coeff);
  end;
  Result := Copy(IntToStr(Code), 2, 2);
end;


A optimiser éventuellement...

Bonne prog' :-p
0
cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010
6 oct. 2004 à 12:46
Slt. Japee.
Je m'excuse d'avoir mal interprété. Je suis vraiment undébutant dans le domaine, voila ce que j'ai fait,
J'ai apposé DBEdit1, DBEdit2 et un Boutton sur Form1.

Quand le Numéro sera saisi dans DBEdit1 la Clé sera donné dans DBEdit2, Bien sur après action du Boutton.

:shy)
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. 2004 à 14:58
Même dans ce contexte, ma fonction devrait donner le résultat que tu recherches.

Tu récupères le numéro de téléphone dans le DBEdit1, tu le passes à la "moulinette" de ma fonction dont tu affectes le résultat dans le DBEdit2 :
DBEdit2.Text := RetourneCode(DBEdit1.Text);


Bonne prog' :-p
0
cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010
7 oct. 2004 à 11:13
Resalut japee,

Voila j'ai fait comme d'après ce que j'ai compris mais au compile il me revoi ceci:
[Erreur] Unit1cle1.pas(54): BEGIN attendu(e) mais END trouvé(e).

Voila comment j'ai écris la procedure:

procedure TForm1.Button1Click(Sender: TObject);
function RetourneCode(DBEdit1: String): String;
var
i: Integer;
Code: Integer;
Coeff: Integer;
DBEdit2: string;
begin
DBEdit2:= '';
if DBEdit1 = EmptyStr then Exit;
Delete(DBEdit1, 6, 1);
Delete(DBEdit1, 3, 1);
Code := 0;
Coeff := 4;
for i := 6 downto 1 do

begin
Code := Code + StrToInt(DBEdit1[i]) * Coeff;
Inc(Coeff);
end;
DBEdit2 := Copy(IntToStr(Code), 2, 2);
DBEdit2:= RetourneCode(DBEdit1);
end;

end;

end.

Il me parait que c'est juste. Je vous pris de me réecrire cette procedure, parceque je me retrouve pas et j'en ai vraiment besoin.

Coordialement

Je vous pris de
0

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

Posez votre question
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
7 oct. 2004 à 13:56
salut slim59,

A première vue ton code est correct mais vue le message d'erreur que tu obtiens : Erreur] Unit1cle1.pas(54): BEGIN attendu(e) mais END trouvé(e). on se rend compte que si tu regarde de plus prêt tu as un end; de trop, ce qui t'empeche de compiler ton code.

procedure TForm1.Button1Click(Sender: TObject);
function RetourneCode(DBEdit1: String): String;
var
  i: Integer;
  Code: Integer; 
  Coeff: Integer;
  DBEdit2: string;
begin
  DBEdit2:= '';

  if DBEdit1 = EmptyStr then 
    Exit;

  Delete(DBEdit1, 6, 1);
  Delete(DBEdit1, 3, 1);

  Code := 0;
  Coeff := 4;

  for i := 6 downto 1 do
  begin
    Code := Code + StrToInt(DBEdit1[i]) * Coeff;
    Inc(Coeff);
  end;

  DBEdit2 := Copy(IntToStr(Code), 2, 2);
  DBEdit2:= RetourneCode(DBEdit1);
end;

end; // En trop.

end.


Bonne Prog, ;)

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la validée.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
7 oct. 2004 à 14:13
Aïe, aïe, aïe...

Tu dois faire appel à la fonction telle que je l'ai écrite.
Une fonction doit toujours retourner un résultat...
Bref, si un String est bien affiché dans ton DBEdit1, à ce moment, cette fonction sera appelée avec l'évènement OnClick du Button.

Ce qui donne...

La fonction (placée plus haut que la procedure TForm1.Button1Click) :

function RetourneCode(NumTel: String): String;
var
  i: Integer;
  Code: Integer;
  Coeff: Integer;
begin
  Result := '';
  if NumTel = EmptyStr then Exit;
  Delete(NumTel, 6, 1);
  Delete(NumTel, 3, 1);
  Code := 0;
  Coeff := 4;
  for i := 6 downto 1 do
  begin
    Code := Code + StrToInt(NumTel[i]) * Coeff;
    Inc(Coeff);
  end;
  Result := Copy(IntToStr(Code), 2, 2);
end;


...et en dessous, la procedure TForm1.Button1Click :

procedure TForm1.Button1Click(Sender: TObject);
begin  
  DBEdit2.Text := RetourneCode(DBEdit1.Text);
end;

Si le String qui correspond au numéro de téléphone est réellement affiché dans DBEdit1, ça fonctionne.

Si ton problème correspond à un difficulté à manier les TDBEdit, je te conseille de reformuler ta question différemment, dans une nouvelle question, car je ne suis absolument pas compétent dans les problèmes de base de données et des composants y accédant.

Bon courage, en espérant t'avoir éclairé, à plus...

Japee
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
7 oct. 2004 à 14:19
Problème dans ma mise en page, je n'aime vraiment pas, je recommence (si un admin peu effacer mon message précédent, merci à lui...)

Aïe, aïe, aïe...

Tu dois faire appel à la fonction telle que je l'ai écrite.
Une fonction doit toujours retourner un résultat...
Bref, si un String est bien affiché dans ton DBEdit1, à ce moment, cette fonction sera appelée avec l'évènement OnClick du Button.

Ce qui donne...

La fonction (placée plus haut que la procedure TForm1.Button1Click) :

function RetourneCode(NumTel: String): String;
var
  i: Integer;
  Code: Integer;
  Coeff: Integer;
begin
  Result := '';
  if NumTel = EmptyStr then Exit;
  Delete(NumTel, 6, 1);
  Delete(NumTel, 3, 1);
  Code := 0;
  Coeff := 4;
  for i := 6 downto 1 do
  begin
    Code := Code + StrToInt(NumTel[i]) * Coeff;
    Inc(Coeff);
  end;
  Result := Copy(IntToStr(Code), 2, 2);
end;


...et en dessous, la procedure TForm1.Button1Click :

procedure TForm1.Button1Click(Sender: TObject);
begin  
  DBEdit2.Text := RetourneCode(DBEdit1.Text);
end;


Si le String qui correspond au numéro de téléphone est réellement affiché dans DBEdit1, ça fonctionne.

Si ton problème correspond à un difficulté à manier les TDBEdit, je te conseille de reformuler ta question différemment, dans une nouvelle question, car je ne suis absolument pas compétent dans les problèmes de base de données et des composants y accédant.

Bon courage, en espérant t'avoir éclairé, à plus...

Japee
0
Rejoignez-nous