Conversion octal à décimal, je ne sais pas comment écrire l'algorithme....

Signaler
Messages postés
38
Date d'inscription
vendredi 3 septembre 2004
Statut
Membre
Dernière intervention
21 mars 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Ceci est le code en c# pour convertir la valeur octal en décimal...

int Decimal, Longueur1, carInt;



string Longueur;


Longueur = txtValeur.Text;


Longueur1 = Longueur.Length;



int i = 1;



string car;


Decimal = 0;



for(i=1 ; i <= Longueur1 ; i++)


{


car = Longueur.Substring(Longueur1 - i,1);


carInt = Convert.ToInt16(car);


Decimal= Decimal+ (
int)(carInt*Math.Pow(8,i-1));


}

J'aimerais écrire l'algorithme de ceci... je ne sais pas trop comment...

4 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Salut,

Qu'entend tu par algorithme de ton code ?
Une fonction simplifier peut-être ?
Ceci ? :

private long OctToDec(long nOct)
{
long nDec = 0;
for (int i = 0; i < (nOct.ToString()).Length; i++)
{
int n = Convert.ToInt32((nOct.ToString()).Substring(i, 1));
nDec += (n * (int)System.Math.Pow(8, (nOct.ToString()).Length - i - 1));
}
return nDec;
}

Kenji
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
Messages postés
38
Date d'inscription
vendredi 3 septembre 2004
Statut
Membre
Dernière intervention
21 mars 2006

Exemple :


for(j=0; j<Longueur1; j++)


{



if (Longueur[j] == '8' || Longueur[j] == '9')


{


Valeur =
false;


}


}

cela donnera ceci en algo:

Pour j = 0; j< Longueur1; j++

Si Longueur[j] = '8' Ou Longueur[j] ='9'

Valeur = Faux

Donc je veux savoir comment faire ce que j'ai fais plus haut en algo comme dans mon exemple, sans utilisé de fonction math, etc.
à la main quoi!

Merci à l'avance
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
Salut, même si tu veux réécrire entièrement l'algo, c'est inutile de remplacer la fonction Pow, elle fait partie du langage, d'ailleurs dans certains langages c'est un opérateur.


Mais bon si vraiment tu veux la réécrire :


// Avec des entiers.
long Pow( long val, long pow )
{
long res = val;


while( --pow > 0 )
{
res *= val;
}


return res;
}


Et tu peux remplacer ça :


car = Longueur.Substring(Longueur1 - i,1);
carInt = Convert.ToInt16(car);


par :


int carInt = ( int )Longueur[ Longueur1 - i ] - 48; // Si Longueur contient des chiffres.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Salut,

En reprenant la fonction Pow de Lutinore, ca doit donner quelque chose comme ca



<HR>

Fonction OctalVersDecimal (textValeur : chaine) : reel


Var Decimal, Longueur1, carInt, i : reel
Var Longueur, car : chaine


Debut
Longueur := chaine
Longueur1 := chaine.Length // Pas sur pour la notation algo
Decimal := 0

Pour i = 1 a Longueur1
car := Longueur[i - 1] // Pas sur pour la notation algo
CarInt := RetourneEntier(car) // Faire une fonction RetourneEntier
Decimal := Decimal + carInt * Pow(8, i-1)
Fin Pour
valret := Decimal
Fin



Fonction Pow (val : reel, pow : reel) : reel
var res : reel


Debut
res := val
tant que pow > 0
res := res * val
pow := pow - 1
fin tant que
valret := res
Fin

<HR>

Cependant, tout est relatif. Tu n'utilises peut etre pas la meme syntaxe, et il y a des choses qu'il faudra que tu vérifies. Par exemple :
Longueur1 := chaine.Lenghth
Pas sur qu'en notation algo, on puisse aller chercher les propriétés d'une chaine...

Enfin bon, voila, tu as un début, a toi de terminer ca a ta facon



Mx
MVP C#