Conversion d une chaine en somme

Résolu
cs_valkyrie Messages postés 60 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 13 décembre 2004 - 5 oct. 2004 à 10:22
cs_valkyrie Messages postés 60 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 13 décembre 2004 - 12 oct. 2004 à 03:50
bonjour

je rentre un nom propre (par exemple)
et apres click ca doit me sortir la somme des valeurs des lettres dans l alphabet

exemple je rentre nico
n=14
i=9
c=3
o=15
donc ca me sort 14+9+3+15=41
je pense que ca doit etre bete mais la question c est faut il entrer une par une toutes les valeurs des lettres'et si on change d alphabet?y a t il un moyen d agir avec des tableaux?

merci messieurs merci mesdames
aimez vous les uns les autres

9 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
7 oct. 2004 à 14:44
Salut, valkyrie,

On est vachement content que les réponses te conviennent, bien qu'elles soient chacune un peu différente dans son approche, as-tu remarqué ?
Ne pourrais-tu, dans ces conditions, valider l'option "réponse acceptée" ?
Au fait, lequel de ces codes répond le mieux à ce que tu veux réaliser ?
Connais-tu ces prénoms : Frédéric, Hélène, Héloïse, Amédée...
Les noms de famille comprennent, à l'identique (et éventuellement) des caractères accentués.
Mais s'ils sont saisis en majuscules non accentuée, ça change complètement la donne, pour sûr...
Bonne prog' à toi et à ton maître Jedi, et bonne chevauchée ;)

japee

(ni dieu, ni maître, ni jedi, mais respect pour tous)
3
Tardiff_jf Messages postés 1 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 5 octobre 2004
5 oct. 2004 à 11:22
Bonjour,

Il y a plus simple qu'un tableau.

La fonction ord renvoi le code ascii d'une lettre.

exemple:

Function MyTextValue(Text: string): integer;
var
AIndex: Integer;
begin
result := 0;
for AIndex := 1 to Length(Text) do begin
Result := result + Ord(Text[AIndex];
end;
end;
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
5 oct. 2004 à 11:27
salut valkyrie,

voici un exemple te permettant de récupérer la somme des caractères de ton mot.

 
var 
  iTotal  : integer;
  iNoChar : integer;
  sValue  : string;
begin
  iTotal := 0;
  sValue := 'nico';
  sValue := UpperCase(sValue);

  for iNoChar := 1 to Length(sValue) do
    iTotal := iTotal + word(sValue[iNoChar]) - (word(Char('A')) - 1);

  ShowMessage(IntToStr(iTotal));


Bonne Prog,

Olivier
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 oct. 2004 à 12:23
Un peu plus "lourd" que les codes précédents, à optimiser éventuellement, mais tient compte des caractères accentués, des espace, des tirets :

function CompteValeurMot(Mot: String): Integer;
var
  i: Integer;
  Val: Integer;
begin
  Result := 0;
  Mot := AnsiLowerCase(Mot);
  for i := 1 to Length(Mot) do
  begin
    if (Mot[i] in ['0'..'9', ' ', '-']) {1}
      then Val := 0
    else if Mot[i] in ['a', 'à', 'â', 'ä']
      then Val := 1
    else if Mot[i] in ['e', 'é', 'è', 'ê', 'ë']
      then Val := 5
    else if Mot[i] in ['i', 'î', 'ï']
      then Val := 9
    else if Mot[i] in ['o', 'ô', 'ö']
      then Val := 15
    else if Mot[i] in ['u', 'ù', 'û', 'ü']
      then Val := 21
    else
      Val := Ord(Mot[i]) - 96;
    Result := Result + Val;
  end;
  { 1 On peut énumérer d'autres caractères comme ';', ':' etc... }
end;


Bonne prog' :-p
0

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

Posez votre question
cs_valkyrie Messages postés 60 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 13 décembre 2004
6 oct. 2004 à 02:37
MERCI les gars!!
merci a olivier mon maitre Jedi!! :p
aimez vous les uns les autres
0
cs_valkyrie Messages postés 60 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 13 décembre 2004
8 oct. 2004 à 03:15
Salut japee
merci pour ta reponse
D accord pardon je ne pense jamais a cliquer sur reponse acceptee :-p
je ne comprends pas ce que tu veux dire avec les prenoms??je ne peux pas ecrire avec des accents car je suis au japon et les caracteres a accents sur le clavier n existent pas.....
sinon a part olivier loubilier je ne connais personne d autre....

longue vie a codes-sources!!

aimez vous les uns les autres
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
8 oct. 2004 à 11:06
Bonsoir, valkyrie (je compte le décalage horaire) ;)

Je pensais que tu pouvais trouver des caractères spéciaux dans le nom propre dont tu voulais trouver la somme des valeurs.
Mais si tu utilises un clavier "qwerty" anglophone, je comprends que tu n'as pas de caractères accentués.
En français, les accents sont placés sur certaines voyelles pour modifier la manière de les prononcer ou pour répondre à certaines règles d'orthographe, par exemple "é", "è", qui ne se prononcent pas exactement pareil, ou par exemple aussi "ou" et "où" qui n'ont pas le même sens (l'équivalent anglais étant "or" et "where")
On trouve aussi certains caractères spéciaux comme "ç", que j'ai oublié de traiter dans mon code, qui ne se prononce pas comme "c" dans certains cas.
Désolé de t'avoir embrouillé avec tout ça !

Bonne prog' :-p

(j'ai mis en gras les caractères spéciaux dans le texte)
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
9 oct. 2004 à 12:55
Si le sujet intéresse encore quelqu'un, bien que les réponses aient été acceptées par l'auteur de la question, voici mon code légèrement optimisé. Le précédent, entre autres, ne prenait pas 'ç' en compte.

On attribue une valeur à chaque lettre, la même, qu'elle soit en majuscule ou en minuscule : 'a'(='A')=1, 'b'=2, 'c'=3,... 'z'=26.
Les espaces, tirets, signes de ponctuation, chiffres et caractères ne rentrant pas dans l'alphabet sont négligés ('1'=0, '-'=0, etc...).
Les caractères spéciaux et accentués du clavier "azerty" français sont pris en compte et prennent la valeur du caractère de référence : 'ç' prend la même valeur que 'c', les caractères 'é', 'è', 'ê', 'ë' prennent la même valeur que 'e', etc...
Le résultat retourné par la fonction est la somme de ces valeurs.

function CompteValeurMot(Mot: String): Integer;
var
  i: Integer;
  Val: Integer;
begin
  Result := 0;
  Mot := AnsiLowerCase(Mot);
  for i := 1 to Length(Mot) do
  begin
    if Mot[i] in ['a', 'à', 'â', 'ä']
      then Val := 1
    else if Mot[i] in ['e', 'é', 'è', 'ê', 'ë']
      then Val := 5
    else if Mot[i] in ['i', 'î', 'ï']
      then Val := 9
    else if Mot[i] in ['o', 'ô', 'ö']
      then Val := 15
    else if Mot[i] in ['u', 'ù', 'û', 'ü']
      then Val := 21
    else if Mot[i] in ['c', 'ç']
      then Val := 3
    else if Mot[i] in ['a'..'z']
      then Val := Ord(Mot[i]) - 96
    else Val := 0;
    Result := Result + Val;
  end;
end;


Si ça peut être utile à quelqu'un... :approve)

Bonne prog' :-p
0
cs_valkyrie Messages postés 60 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 13 décembre 2004
12 oct. 2004 à 03:50
OK impec japee!!

Merci encore une fois!

aimez vous les uns les autres
0
Rejoignez-nous