Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1144 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] manipulation de matrices binaires

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C] manipulation de matrices binaires

n°247027
Zaib3k
Posté le 17-11-2002 à 14:48:59  profilanswer
 

salut,  
 
je suis a faire un programme utilisant le code de Hamming et pour ce faire, il me faut des matrices binaires. Pour l'instant j'utilise des matrices de char.
 
y a t'il une meilleur solution ?  ( probablement :D)
 
merci


Message édité par Zaib3k le 17-11-2002 à 22:39:39

---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
mood
Publicité
Posté le 17-11-2002 à 14:48:59  profilanswer
 

n°247084
verdoux
And I'm still waiting
Posté le 17-11-2002 à 17:27:56  profilanswer
 

Si tu mets 8 bits dans un char, non on peut pas faire mieux :D

n°247086
Zaib3k
Posté le 17-11-2002 à 17:32:35  profilanswer
 

le probleme c que je ne veux qu'un bit par case
 
 :cry:


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247174
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:24:04  profilanswer
 

Zaib3k a écrit a écrit :

le probleme c que je ne veux qu'un bit par case
 
 :cry:  




 
et alors faut le gérer et faire des fonctions set/get


---------------
du bon usage de rand [C] / [C++]
n°247175
Zaib3k
Posté le 17-11-2002 à 20:28:06  profilanswer
 

a, je connais pas ces fonctions :/
 
je debute en C .


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247177
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:30:28  profilanswer
 

ben il faut faire de la programmation orientée objet si tu veux t'en sortir


Message édité par Taz@PPC le 17-11-2002 à 20:30:38

---------------
du bon usage de rand [C] / [C++]
n°247180
Zaib3k
Posté le 17-11-2002 à 20:33:25  profilanswer
 

arf


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247181
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:35:43  profilanswer
 

de tout evidence tu n'est pas encore pret pour tout ca et en fonction de cet argument, je pense pas que tu manipules plusieurs Mégaoctets de données et qu'un stockage efficace t'es vitale.
 
on en reparlera plus tard. assure toi d'abord de bien manipuler les matrices bidimensionnelles (voire plus) et leurs allocations dynamiques


---------------
du bon usage de rand [C] / [C++]
n°247182
Zaib3k
Posté le 17-11-2002 à 20:41:12  profilanswer
 

en fait, tout fonctionne ca stock, ca affiche, c la fete
 
mais mon produit de matrice deconne  :/


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247183
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:43:51  profilanswer
 

donne un bout de code...
 
 
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c72.htm


---------------
du bon usage de rand [C] / [C++]
mood
Publicité
Posté le 17-11-2002 à 20:43:51  profilanswer
 

n°247184
Zaib3k
Posté le 17-11-2002 à 20:44:57  profilanswer
 

lorsque j'affiche ma matrice, no probleme
 
mais :
 

Code :
  1. matrice mat_produit(matrice A, matrice B)
  2. {
  3.   int i, j, k;
  4.   matrice matp; /* resultat du produit */
  5.   if (A.n != B.p)
  6.     {
  7.       printf("\nErreur : produit de matrices de tailles incompatibles\n" );
  8.       matp.ad = NULL;
  9.       return(matp);
  10.     }
  11.     matp = mat_alloc(A.p,B.n);
  12.     for (i = 0; i < matp.p; i++)
  13.       {
  14.      for (j = 0; j < matp.n; j++)
  15.      {
  16.          for (k = 0; k < A.n; k++)
  17.          matp.ad[i*matp.n+j] ^= A.ad[i*matp.n+k] & B.ad[k*matp.n+j];
  18.      }
  19.       }
  20.     return(matp);
  21. }


 
deconne


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247186
Zaib3k
Posté le 17-11-2002 à 20:47:14  profilanswer
 

merci pour le lien, mais mon ami google me l'avais deja donné  :D


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247187
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:47:21  profilanswer
 

pourquoi un ou exclusif?


---------------
du bon usage de rand [C] / [C++]
n°247188
Zaib3k
Posté le 17-11-2002 à 20:52:35  profilanswer
 

parce que c comme ca  [:zaib3k]  
 
plus serieusement, le produit de matrice binaire se calcul comme ca, d'apres mon cours
 
mon cours est peut etre faux :/


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247190
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:54:53  profilanswer
 

ben en math, c'est Rij= Rij + Aik x Bkj
 
c'est donc bien un ou et pas un ou exclusif.
 
mefie toi des opérateurs binaires dans la mesure ou tu ne travaille pas avec des bits


---------------
du bon usage de rand [C] / [C++]
n°247191
Zaib3k
Posté le 17-11-2002 à 20:56:12  profilanswer
 

effectivement, je vais refaire ca


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247193
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 20:58:18  profilanswer
 

Zaib3k a écrit a écrit :

effectivement, je vais refaire ca  




 
et magique ca marche. tout ca pour un simple problème de mise en pratique d'algo... :sarcastic:


---------------
du bon usage de rand [C] / [C++]
n°247194
Zaib3k
Posté le 17-11-2002 à 21:12:10  profilanswer
 

soit pas aigri, tlm commence un jour
 
 
 
et non, ca ne marche tjr pas


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247195
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:12:43  profilanswer
 

Zaib3k a écrit a écrit :

soit pas aigri, tlm commence un jour
 
 
 
et non, ca ne marche tjr pas




 
chui po aigir mais  :sarcastic:  
 
ca veut dire quoi "marche po" ?
 
et donnes ton nouveu code?
 
 
mon module de multiplication en C++
 

Code :
  1. Matrix_ad operator*(const Matrix_ad &m, const Matrix_ad &n) throw(invalid_argument)
  2. {
  3.   const unsigned m_cols(m.cols()), n_rows(n.rows());
  4.   if(m_cols!=n_rows) // check dims
  5.     {
  6.       throw(invalid_argument("Matrix_ad:: multiplication, matrices are not compatible" ));
  7.     }
  8.   const unsigned rows(m.rows()), cols(n.cols());
  9.   Matrix_ad res(rows, cols); // result matrix
  10.   bool value;
  11.   for(unsigned i=0, j, k; i<rows; ++i)
  12.     {
  13.       for(j=0; j<cols; ++j)
  14. {  
  15.   value=false;
  16.   for(k=0; k<m_cols; ++k)
  17.     {
  18.       value= value || (m(i, k) && n(k, j));
  19.     }
  20.   res.set(i, j, value);
  21. }
  22.     }
  23.   return res;      
  24. }


 
comme tu vois, ca ressemble enormement.... et ca marche


Message édité par Taz@PPC le 17-11-2002 à 21:15:10

---------------
du bon usage de rand [C] / [C++]
n°247196
Zaib3k
Posté le 17-11-2002 à 21:13:56  profilanswer
 

et bien, mon produit de matrice est tjr faux :/


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247197
lorill
Posté le 17-11-2002 à 21:17:35  profilanswer
 

moi ce qui me choque c'est que tu retournes un truc qui semble interne a ta fonction, a moins que le type matrice soit un pointeur, mais vu que tu accedes aux membres par ".", c'est etrange.

n°247198
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:18:55  profilanswer
 

lorill a écrit a écrit :

moi ce qui me choque c'est que tu retournes un truc qui semble interne a ta fonction, a moins que le type matrice soit un pointeur, mais vu que tu accedes aux membres par ".", c'est etrange.  




 
euh pourquoi? matrice est une structure, no pb


---------------
du bon usage de rand [C] / [C++]
n°247200
Zaib3k
Posté le 17-11-2002 à 21:20:04  profilanswer
 

oui, matrice est une structure


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247201
lorill
Posté le 17-11-2002 à 21:22:14  profilanswer
 

et retourner une structure qu'on a pas alloué soi-même, ca marche ?

n°247204
Zaib3k
Posté le 17-11-2002 à 21:25:23  profilanswer
 

taz> j'ai modifié mon code en mettant la meme chose que ton code, et le resultat reste faux, je pense que mon probleme est uniquement due au fait que mes matrices sont binaires mais stockée ds des int.


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247205
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:25:36  profilanswer
 

? heink? c'est une copie qui est renvoyée. je comprends pas encore tout a fait ta question


---------------
du bon usage de rand [C] / [C++]
n°247207
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:28:20  profilanswer
 

Zaib3k a écrit a écrit :

taz> j'ai modifié mon code en mettant la meme chose que ton code, et le resultat reste faux, je pense que mon probleme est uniquement due au fait que mes matrices sont binaires mais stockée ds des int.




 
non, c'est pas ca. prends un exemple et on compare nos resulats
 


------
0 1 1
0 0 1
1 1 1
------
 
  X
 
------
0 1 0
1 0 1
0 1 0
------
 
  =
 
------
1 1 1
0 1 0
1 1 1
------


---------------
du bon usage de rand [C] / [C++]
n°247208
Zaib3k
Posté le 17-11-2002 à 21:28:22  profilanswer
 

excusez moi pour mon charabia :/
 
en fait mon programme doit permettre a l'utilisateur de :
saisir une matrice biniaire
faire un produit de matrice
 
le probleme est que mon produit se fait sur des int et non des bits.
 
la somme 1+1 me donne 2, et ca c pas bon
 
ca fait qq heure que je me prend la tete et j'en peux plus


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247209
Zaib3k
Posté le 17-11-2002 à 21:30:08  profilanswer
 

Taz@PPC a écrit a écrit :

 
 
non, c'est pas ca. prends un exemple et on compare nos resulats
 


------
0 1 1
0 0 1
1 1 1
------
 
  X
 
------
0 1 0
1 0 1
0 1 0
------
 
  =
 
------
1 1 1
0 1 0
1 1 1
------






 
mon prog multiplie des matrice 1*n avec des matrice n*n
 
et le modifié a cette heure me semble risqué  :whistle:


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247210
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:30:39  profilanswer
 

Zaib3k a écrit a écrit :

excusez moi pour mon charabia :/
 
en fait mon programme doit permettre a l'utilisateur de :
saisir une matrice biniaire
faire un produit de matrice
 
le probleme est que mon produit se fait sur des int et non des bits.
 
la somme 1+1 me donne 2, et ca c pas bon
 
ca fait qq heure que je me prend la tete et j'en peux plus




 
et alors?
 
t'as la reponse dans ta question, on fait du binaire et pas du decimale.
 
1 | 1 == 1


---------------
du bon usage de rand [C] / [C++]
n°247211
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:31:46  profilanswer
 

------
0 1 1
------
  X
------
0 0 1
1 1 1
0 1 0
------
  =
------
1 1 1
------


---------------
du bon usage de rand [C] / [C++]
n°247212
lorill
Posté le 17-11-2002 à 21:31:49  profilanswer
 

Taz@PPC a écrit a écrit :

? heink? c'est une copie qui est renvoyée. je comprends pas encore tout a fait ta question




en fait y'a pas de question, je viens de dire une connerie plus grosse que moi, c'est tout  [:sinclaire]

n°247214
Zaib3k
Posté le 17-11-2002 à 21:34:07  profilanswer
 

Taz@PPC a écrit a écrit :

------
0 1 1
------
  X
------
0 0 1
1 1 1
0 1 0
------
  =
------
1 1 1
------






 
la ca marche
 
mais je ne sais pas ce que j'ai changé :/
 
je refais un test avec mes ancienne valeur de test


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247215
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:34:37  profilanswer
 

lorill a écrit a écrit :

 
en fait y'a pas de question, je viens de dire une connerie plus grosse que moi, c'est tout  [:sinclaire]  




 
je crois qu'en fait t'as question est:
 

Code :
  1. void* foo()
  2. {
  3.   return malloc(MAGIC_NUMBER);
  4. }


 
est ce valide? est ce que la zone allouée dans foo() est conservée.
 
la reponse est oui: les allocations dynamiques se font dans le tas et non pas dans la pile. il n'y a aucun problème a renvoyé un pointeur sur une zone allouée, c'est d'ailleurs ce que fait malloc. elle alloue et renvoie un pointeur. pas de problème.


---------------
du bon usage de rand [C] / [C++]
n°247217
Zaib3k
Posté le 17-11-2002 à 21:36:31  profilanswer
 

taz>  tu peu me dire ce que tu obtient en faisant :
 
1011  
 
*
 
111
101
110
011
 
merci


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247218
lorill
Posté le 17-11-2002 à 21:37:15  profilanswer
 

Taz@PPC a écrit a écrit :

 
 
je crois qu'en fait t'as question est:
 

Code :
  1. void* foo()
  2. {
  3.   return malloc(MAGIC_NUMBER);
  4. }


 
est ce valide? est ce que la zone allouée dans foo() est conservée.
 
la reponse est oui: les allocations dynamiques se font dans le tas et non pas dans la pile. il n'y a aucun problème a renvoyé un pointeur sur une zone allouée, c'est d'ailleurs ce que fait malloc. elle alloue et renvoie un pointeur. pas de problème.




nan, ca je le sais, mais justement dans son programme y'a pas d'allocation, et il renvoit pas de pointeur. J'avais juste oublié que y'avait une copie au return.

n°247219
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:38:48  profilanswer
 

[1 1 1]


---------------
du bon usage de rand [C] / [C++]
n°247221
Zaib3k
Posté le 17-11-2002 à 21:40:10  profilanswer
 

Taz@PPC a écrit a écrit :

[1 1 1]




 
merci
moi aussi, j'obtient ca mais mon cours me donne 010
 
je vais verifier ca. deja je n'ai plus de 75 -1857 698  :D


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°247223
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 17-11-2002 à 21:42:04  profilanswer
 

sache que les operateurs bit a bit sont dangereux et indefinies sur les types signés.
 
si tu strocke dans un type entier, precise "unsigned" meme pour un char


---------------
du bon usage de rand [C] / [C++]
n°247227
Zaib3k
Posté le 17-11-2002 à 21:44:51  profilanswer
 

ok, je vais ajouter ca, par contre ds mon cours, sur le cours de mes potes, c'est bien un XOR et je ne sais pas pourquoi


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] manipulation de matrices binaires

 

Sujets relatifs
Manipulation des dates en visual C++probleme d'envoi de fichiers binaires dans une app client/serveur
[XML] stocker des données binaires dans un fichier XML ...[VBA] manipulation des strings
[PHP] Manipulation de données contenant des 'quotes' ?[resolu] calculs sur des matrices et de vecteurs
[PHP] manipulation binaire[SVG / java/Batik] Manipulation / convertion de fichiers SVG
[Visual Basic] Manipulation de chainesManipulation de BD Access avec Visual Basic [edit : + onglets]
Plus de sujets relatifs à : [C] manipulation de matrices binaires


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR