Extraction

houarihabiba - 19 févr. 2017 à 22:18
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 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

3 réponses

papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 15
20 févr. 2017 à 10:15
salut
essais plutôt
for i := 0 to Length(value) -1 do
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
20 févr. 2017 à 12:24
Salut
Il me semble que la question est déjà traitée dans la question précédente (voir réponse de CIREC)
Papyvore par contre a tout à fait raison !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
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)
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 févr. 2017 à 17:23
0
Rejoignez-nous