Calcul Serie alphanumerique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calcul Serie alphanumerique

Re: Calcul Serie alphanumerique

par sirakawa » 23 nov. 2011, 10:47

la fonction que j'ai jointe fonctionne

Re: Calcul Serie alphanumerique

par zzuutt » 22 nov. 2011, 22:29

Bonsoir,

Desole j'etais en deplacement.

Merci je comprends bien mais si je teste
avec ton script
aaab0000 - aaaa0000 = 0 en base 35
aaab0000 - aaaa0000 = 0 en base 10

le resultat devrait etre 10000 en base 35

je ne comprends pas ou ca coince

Re: Calcul Serie alphanumerique

par sirakawa » 18 nov. 2011, 20:59

Désolé, mais hier ce forum était inaccessible de chez moi.
Si tes valeurs sont des séries de huit caractères où chaque caractère peut être une lettre de A à Z ou un chiffre de 0 à 9, on peut parler de nombres en base 35; ça veut dire que :
"00000001" est possible aussi bien que "0000Z25T" ou "A33Z00B2"...
Si, comme je crois comprendre, les valeurs à traiter sont toujours composées de 4 lettres de A à Z suivies de 4 chiffres de 0 à 9; il s'agit d'un sous-ensemble des nombres exprimés en base 35 et la solution que je propose doit continuer à fonctionner.

Re: Calcul Serie alphanumerique

par zzuutt » 17 nov. 2011, 14:40

Merci
si je comprends bien une base commence de 0 a quelquechose
mais le code que l'on me fournit les 4 premiers caracteres sont des lettres de A -> Z et les 4 suivants sont des chiffres de 0 -> 9
en fait si j'ai bien compris on m'envoie un numero de serie realise comme suite:
// il commence de cette valeur 'AAAA0000' et effectue une simple incrementation
// ce qui me donne 
$a = "AAAA0000";
$a++;
print $a; // AAAA0001

$a = "AAAA9999";
$a++;
print $a; // AAAB0000

$a = "AAAZ9999";
$a++;
print $a; // AABA0000
dans ce cas peut ton parler de base
vu que pour la premiere partie ca ne part pas de 0 (zero) vers Z mais de A vers Z

mon probleme c'est que je dois determine combien de produits ont ete traites
en ayant le premier numero de serie et le dernier
:?: :?:

Re: Calcul Serie alphanumerique

par sirakawa » 17 nov. 2011, 12:50

si tu utilises l'alphabet complet tu es en base 35 qui est la plus grande base que PHP sait gérer...
facile à vérifier
base 2 se sert de 0 et 1 où 35 se noterait : 100011
de droite à gauche
1: (2^0)*1
2 : (2^1)*1
0 : (2^2)*0
0: (2^3) *0
0 : (2^4)*0
32 : (2^5)*1
base 10 :35 se note 35
5 : (10^0)*5
3: (10^1)*3
base 16 :
10 se note 0A ou 0a, 15 OF et 16: 10
Il te faut six symboles de plus qu'en base 10, ou, si tu préfères, autant de symboles que le nombre de ta base
L'erreur doit venir de ma programmation. Il se trouve que mon texte trainait encore dans mon éditeur, et que je m'amusais à le modifier pour le généraliser:
/* 
* (c) Michel Barthélémy Billard Sirakawa 11/2011
* GPL
*function operations: do any operation between two numbers in any base from 2 to 35.
* parameters :
* mandatory
* $operateur : string: the operation to be done : *,/,+,*
* $operande_1 : string : first number
* $operande_2 string the secund number
* $base_1 integer: the base in which the first number is wtiten
* $resultat var in which the result is put
* optional
* $base_2 integer : the base in which the secund number is writen
* if no base_2 is given, $base_2 is assumed to be the same as $base_1
* $base_retour : integer : the base in which the result has to be writen; default = $base_1
* returns: THE BASE IN WHICH THE RESULT IS WRITEN

* exécute les quatre opérations entre deux nombres qui peuvent être de bases différentes entre 2 et .35 et retourne le résultat
* dans toute base entre 2 et 35

* parametres :
* obligatoires
* $operateur : string: opération à faire : *,/,+,*
* $operande_1 : string : premier nombre
* $operande_2 string : deuxième nombre
* $base_1 integer: base du premier nombre
* $resultat variable où le résultat est écrit
* optionnels
* $base_2 integer : base du deuxième nombre, non fournie, égale à $base_1

* $base_retour : integer : base du résultat, non fournie, égale à $base_1
* retourne : la  base dans laquelle le résultat est écrit.
*/
function operations ($operateur, $operande_1, $operande_2,  $base_1,  &$resultat, $base_2 = "", $base_retour =  "")
{
	$base_2 = ($base_2 == "")? $base_1: $base_2;
	$base_retour = ($base_retour == "") ? $base_1: $base_retour;
	$a = intval ($operande_1, $base_1);
	$b = intval ($operande_2, $base_2);
	$alerte = $base_retour;
	switch ($operateur)
	{
		case "*":
			$c = $a * $b;
			$resultat = base_convert ($c, 10, $base_retour);
		break;
		case "/":
			$resultat = floatval ($a) / floatval ($b);
			$alerte = 10;
		break;
		case "+":
			$c = $a + $b;
			$resultat = base_convert ($c, 10, $base_retour);
		break;
		case "-":
			$c = $a - $b;
			$resultat = base_convert ($c, 10, $base_retour);
		break;
	}
	return $alerte;
}	
$a = "aaaa0000";
$b = "aaab0000";
$c = ""; // impératif de déclarer la variable qui contiendra le résultat
$base_result = operations ("-",$b, $a, 35, $c);
print "$b - $a =  $c en base $base_result";
$base_result = operations("/", $a, $b, 35, $c, "",10);
print "<br>$b / $a =  $c en base $base_result";

Re: Calcul Serie alphanumerique

par zzuutt » 17 nov. 2011, 11:06

Bonjour,

Merci
cela fonctionne pour l'exemple
mais pas pour

$a = "AAAA0000";
$b = "AAAB0000";

//En fait la valeur ne correspond pas a une base 35 (enfin je pense)
//La partie lettre evolue de A - > Z (les 26 lettres de l'alphabet quel base :?: :roll: :?: base 26 :roll: )
//et la partie chiffre 0 -> 9 (base 10)
//donc pour obtenir $b il faudrait additionner $a + 10000

Dois je decouper en 2, les chiffres et les lettres ?

Merci

Calcul Serie alphanumerique, its here, dear Watson

par sirakawa » 16 nov. 2011, 22:38

here you are, avec les fonctions standard de PHP . J'ai la flegme de commenter, et je suppose que ça fonctionne dans le cas général
<?PHP
$a = "aa00";
$b = "ab01";
$a10= intval ( $a , 35 );
$b10= intval ( $b , 35 );
$c = $b10 -$a10;

$c35 = base_convert($c, 10, 35);
print "$a10 $b10 $c $c35";
?>
Ce que je n'ai pas testé, c'est si c'est sensible à la casse...

Re: Calcul Serie alphanumerique

par xTG » 16 nov. 2011, 10:31

Dans ce cas il te faut te faire ta propre fonction de transfert vers le décimal pour remplacer les fonctions que j'ai utilisé.

Re: Calcul Serie alphanumerique

par zzuutt » 16 nov. 2011, 01:18

bonjour,

non ce ne sont pas des hexa
vu que cela va de A a Z l'hexa cela va jusque F

c'est une simple incrementation de AAAA0000 a ZZZZ9999

Re: Calcul Serie alphanumerique

par xTG » 16 nov. 2011, 01:06

Ce sont des nombres hexadécimaux non ?
echo dechex(hexdec('aa') - hexdec('99'));
11
Et pour les tests de supériorité ou autre, tu passes aussi par le décimal et on en parle plus. ;)

Calcul Serie alphanumerique

par zzuutt » 15 nov. 2011, 23:56

bonjour,

j'ai besoin d'effectuer des opérations arithmétiques sur une série alphanumérique
je m'explique:
on me fournit un code de début et un code de fin
je dois déterminer combien ca fait de code entre codefin - codedebut

ex:
$a = "aa00";
$b = "ab01";
cela devrait donner
$b - $a = 101;

et comment vérifier si $b est supérieur a $a :?: :roll:

les codes que l'on me fournit sont de la forme 4 caracteres 4 chiffres de : aaaa0000 -> zzzz9999

merci