Extraction

- - Dernière réponse : Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
- 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 

Votre réponse

3 réponses

Messages postés
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
0
Merci
salut
essais plutôt
for i := 0 to Length(value) -1 do
Commenter la réponse de papyvore
Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
0
Merci
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
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
0
Merci
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és
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
-
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.