houarihabiba
-
19 févr. 2017 à 22:18
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
20 févr. 2017 à 17:23
Bonjour,
Je veut faire une extraction des vecteurs a partir d’une matrice binaire lorsque je fait la somme de ces vecteurs on trouve un vecteur ones je fais le programme mais est ce qu’ il y a une truque dans matlab fait sa parce que lorsque la matrice est grandis les boucle prendre un temps assez bien lent
Exemple :
M= 1 1 0 0 0
0 0 1 1 0
1 0 0 1 0
0 0 0 1 0
1 01 01
………………..la matrice contient 20 vecteurs. On prendre quatre vecteurs a chaque fois et on fais la somme V=[1 1 1 1 1 ]
je veut converti nombre binaire a>12 c-a-d 1000111010100 a décimal avec la fonction
function BinToInt(Value: string): Integer;
var
i, iValueSize: Integer;
begin
Result := 0;
iValueSize := length(value);
for i := 1 to iValueSize do
if Value[i] = '1' then Result := Result + (1 shl (iValueSize - i));
end;
elle marche mais le nombre binaire lorsque a >12 élément on a une erreur
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 20 févr. 2017 à 15:28
Aïe, ouille,
salut
essais plutôt
for i := 0 to Length(value) -1 do
Value est de type string et donc le premier caractère se trouve bien à l'index "[1]" ;)
Il me semble que la question est déjà traitée dans la question précédente (voir réponse de CIREC)
la question précédente, même si il n'a pas encore répondu, traite, elle de l'opération inverse ;)
pour le soucis ici je te propose d'abandonner le décalage avec "shl" qui est limité à un 32Bits (Integer) par un calcule simple mais qui permet d'aller jusqu'au limite d'un 64Bits (Int64)
soit 2^63-1 = 9223372036854775807
qui donne un binaire de 63 Digits = '111111111111111111111111111111111111111111111111111111111111111'
le code:
function PowerInt(const Base, Exponent: Integer): Int64;
var
I : Integer;
begin
Result := 1;
for I := 1 to Exponent do
Result := Result * Base
end;
function BinToInt(Value: string): Int64;
var
i, iValueSize: Integer;
begin
Result := 0;
iValueSize := length(value);
for i := 1 to iValueSize do
if Value[i] = '1' then
Result := Result + PowerInt(2, iValueSize - i);
end;
et pour tester:
begin
// représente High(Int64) en Binaire
Caption := IntToStr(BinToInt('111111111111111111111111111111111111111111111111111111111111111'));
end;
voilà,
au passage tu peux marquer comme résolu ici et sur la question précédente (si bien sûr c'est le cas)
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 20 févr. 2017 à 17:23