Extraction

houarihabiba - 19 févr. 2017 à 22:18 - Dernière réponse : Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 avril 2018 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
papyvore 155 Messages postés samedi 15 novembre 2003Date d'inscription 5 avril 2018 Dernière intervention - 20 févr. 2017 à 10:15
0
Utile
salut
essais plutôt
for i := 0 to Length(value) -1 do
Commenter la réponse de papyvore
dubois77 689 Messages postés jeudi 17 avril 2008Date d'inscription 9 mars 2018 Dernière intervention - 20 févr. 2017 à 12:24
0
Utile
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 !
Commenter la réponse de dubois77
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 avril 2018 Dernière intervention - 20 févr. 2017 à 15:28
0
Utile
1
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 4217 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 avril 2018 Dernière intervention - 20 févr. 2017 à 17:23
Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.