Anagramme
Fermé
LeGeekduDimanche
-
Modifié par pijaku le 5/03/2015 à 08:03
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 mars 2015 à 14:03
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 mars 2015 à 14:03
2 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
5 mars 2015 à 08:14
5 mars 2015 à 08:14
Bonjour,
La différence entre une function et une Sub, est la même que dans tout langage de programmation.
Une fonction retourne une valeur.
Une procédure est une fonction qui ne retourne pas de valeur.
Si tu veux transformer ta function en Sub, tu as deux possibilités :
1- passer la "réponse attendue" en paramètre de cette Sub
2- avoir une variable de portée "Module" pour cette "transmission".
Exemple :
Peut s'écrire :
1-
2-
Ces trois méthodes sont strictement identiques. Quoique la première, avec une Function, est plus logique.
Nota : Dans ton exemple, tu t'embrouilles pour rien en passant des String en Booléen et inversement.
Tu y gagnerais en traitant tout en Booléen, y compris ta Function.
Regarde ceci :
La différence entre une function et une Sub, est la même que dans tout langage de programmation.
Une fonction retourne une valeur.
Une procédure est une fonction qui ne retourne pas de valeur.
Si tu veux transformer ta function en Sub, tu as deux possibilités :
1- passer la "réponse attendue" en paramètre de cette Sub
2- avoir une variable de portée "Module" pour cette "transmission".
Exemple :
Sub Main() Dim Nb_1 As Integer, Nb_2 As Integer, Resultat As Integer Nb_1 = 12: Nb_2 = 15 Resultat = Addition(Nb_1, Nb_2) End Sub Function Addition(Nb1 As Integer, Nb2 As Integer) As Integer Addition = Nb1 + Nb2 End Function
Peut s'écrire :
1-
Sub Main() Dim Nb_1 As Integer, Nb_2 As Integer, Resultat As Integer Nb_1 = 12: Nb_2 = 15 Call Addition(Nb_1, Nb_2, Resultat) MsgBox Resultat End Sub Sub Addition(Nb1 As Integer, Nb2 As Integer, Res As Integer) Res = Nb1 + Nb2 End Sub
2-
Dim resultat As Integer Sub Main() Dim Nb_1 As Integer, Nb_2 As Integer Nb_1 = 12: Nb_2 = 15 Call Addition(Nb_1, Nb_2) MsgBox resultat End Sub Sub Addition(Nb1 As Integer, Nb2 As Integer) resultat = Nb1 + Nb2 End Sub
Ces trois méthodes sont strictement identiques. Quoique la première, avec une Function, est plus logique.
Nota : Dans ton exemple, tu t'embrouilles pour rien en passant des String en Booléen et inversement.
Tu y gagnerais en traitant tout en Booléen, y compris ta Function.
Regarde ceci :
Function fNom(nom1 As String, nom2 As String) As Boolean Dim val1 As Integer Dim val2 As Integer Dim tempval As Integer = 0 Dim tempval2 As Integer = 0 For i = 1 To Len(nom1) val1 = Asc(UCase(Mid(nom1, i, 1))) - 64 tempval = val1 + tempval Next For i = 1 To Len(nom2) val2 = Asc(UCase(Mid(nom2, i, 1))) - 64 tempval2 = val2 + tempval2 Next If Len(nom1) = Len(nom2) And nom1 = nom2 Then Return False End If If Len(nom1) <> Len(nom2) Then Return False ElseIf tempval = tempval2 Then Return True Else Return False End If End Function Sub Main() Dim nom1 As String Dim nom2 As String Console.Write("Entrer un mot : ") nom1 = Console.ReadLine Console.Write("Entrer un deuxième mot : ") nom2 = Console.ReadLine If fNom(nom1, nom2) = False Then Console.WriteLine("Ce n'est pas un anagramme ! ") Else Console.WriteLine("C'est un anagramme ! ") End If Console.ReadLine() End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
6 mars 2015 à 14:03
6 mars 2015 à 14:03
Bonjour LeGeekduDimanche, le forum,
Je n'avais pas répondu, par manque de temps, sur le fond de la macro.
Dans ta fonction, tu considères chaque lettre composant tes deux mots comme des nombres. A = 1, B = 2, C = 3 etc, Z = 26.
Ensuite, pour chacun des 2 mots, tu additionnes les nombres correspondants à leurs lettres.
Pour finir, tu dis que si les sommes sont identiques alors les mots sont des anagrammes.
Donc, d'après ton raisonnement, AD (1+4=5) est l'anagramme de BC (2+3=5)...
Je n'avais pas répondu, par manque de temps, sur le fond de la macro.
Dans ta fonction, tu considères chaque lettre composant tes deux mots comme des nombres. A = 1, B = 2, C = 3 etc, Z = 26.
Ensuite, pour chacun des 2 mots, tu additionnes les nombres correspondants à leurs lettres.
Pour finir, tu dis que si les sommes sont identiques alors les mots sont des anagrammes.
Donc, d'après ton raisonnement, AD (1+4=5) est l'anagramme de BC (2+3=5)...