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

  FORUM HardWare.fr
  Programmation
  C

  matrices en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

matrices en C

n°774674
bibi218
Posté le 23-06-2004 à 18:06:36  profilanswer
 

Bonsoir à tous !
 
Voilà, je sors d'une période de prog prolongée sous Fortran, et là, la gestions des tableaux est vraiment nickel (les fichiers bcp moins mais bon ... :pt1cable: ). Par contre, en C, ça me semble beaucoup plus bizarre, notamment pour les allocations dynamiques ...  :heink:  enfin bref, j'aimerais savoir s'il est possible de déterminer les dimensions d'un argument qui serait une matrice (pour les vecteurs, j'ai honte, mais j'ai rien trouvé de mieux que sizeof(vecteur)/sizeof(type de donnée dedans) ), un truc du genre size  :love:  
 
Ah oui, est-il possible d'avoir plusieurs arguments de sortie pour une fonction C ??? Et si ce n'est pas le cas, comment peut on faire pour renvoyer plus d'une variable ?

mood
Publicité
Posté le 23-06-2004 à 18:06:36  profilanswer
 

n°774676
Taz
bisounours-codeur
Posté le 23-06-2004 à 18:08:42  profilanswer
 

sizeof va marcher comme tu le pense avec les tableaux
avec tout ce qui est pointeur, garde dans des varaibles les dimensions
 
on te peut renvoyer qu'une seule variable, mais ça peut être une structure. ou passer des paramètres par pointeur

n°774678
bjone
Insert booze to continue
Posté le 23-06-2004 à 18:09:11  profilanswer
 

pour retourner plus d'une variable, tu la passes par un pointeur...
 
style
 
void ftest( float a, float b, float *v1, float *v2 )
{
   *v1=a+b;
   *v2=a-b;
}
 
fonc1()
{
  float add,sub;
 
  ftest( 10, 2, &add, &sub );
}

n°774682
bibi218
Posté le 23-06-2004 à 18:11:47  profilanswer
 

Ca veut dire que je devrais par exemple faire un truc du genre :
 
typedef struct matrice {
int[2] taille;
**double data;
} Matrice
 
pour avoir accès aux tailles ???

n°774688
bjone
Insert booze to continue
Posté le 23-06-2004 à 18:16:32  profilanswer
 

oui, et plustôt:
 
double *data;  
 

n°774690
bibi218
Posté le 23-06-2004 à 18:17:53  profilanswer
 

oups, j'avais pô vu ... :D

n°774697
bjone
Insert booze to continue
Posté le 23-06-2004 à 18:21:28  profilanswer
 

et un * pas deux, sinon c'est un pointeur sur une liste de pointeurs que tu déclares...

n°774708
bibi218
Posté le 23-06-2004 à 18:27:02  profilanswer
 

ah, bizarre, pour un tableau, j'aurais fait double **data :
comme ça pour chaque ligne, j'aurais eu un type double* associé, que j'aurais fait pointer au début de chaque ligne
 
data=calloc(ni,sizeof(float*));
tab[0]=calloc(ni*nj,sizeof(float));
for(int i=1;i<ni;++i) data[i]=tab[i-1]+nj;
 
C'est pas de moi, on me l'a filé, mais je trouvais ça joli

n°774718
Taz
bisounours-codeur
Posté le 23-06-2004 à 18:46:52  profilanswer
 

pourquoi tu utilises calloc ? et surtout avec des flottants...

n°774737
bibi218
Posté le 23-06-2004 à 18:59:11  profilanswer
 

les float, c'est parce que c'est du copier-coller  :whistle:  
par contre, pour calloc, je ne suis pas sûr de comprendre la question (pourquoi calloc plutôt que malloc c'est ça ?). Moi j'aime bien calloc, vu qu'il met tous les coeffs à zéros dedans. Comme je bosse sur de grosses matrices bien creuses, ça évite de se fatiguer  :love:

mood
Publicité
Posté le 23-06-2004 à 18:59:11  profilanswer
 

n°774739
bibi218
Posté le 23-06-2004 à 18:59:56  profilanswer
 

En tout cas, je commence à me demander si le C est fait pour les matheux :(

n°774741
Taz
bisounours-codeur
Posté le 23-06-2004 à 19:01:24  profilanswer
 

calloc mets à 0, certes, mais 0 binaire, pas 0.0. et 0 binaire n'est pas flottant valide

n°774762
bjone
Insert booze to continue
Posté le 23-06-2004 à 19:13:21  profilanswer
 

bibi218 a écrit :

En tout cas, je commence à me demander si le C est fait pour les matheux :(


 
non, c'est plus adapté pour les développements oû il faut bien prendre en compte les contraintes architecturelles....  
du moins tu as trop de contrôle sur l'implémentation de tes algo, si tu cherches plus à avoir un truc math qui marche direct. (ie c'est pas maple)


Message édité par bjone le 23-06-2004 à 19:13:35
n°774765
bjone
Insert booze to continue
Posté le 23-06-2004 à 19:14:31  profilanswer
 

ceci dit, tu prends du C++ avec des classes déjà existantes, ça te simplifiera énormément la vie si tu commences en C, et qu'il te faut un truc abouti rapidement.

n°774768
Taz
bisounours-codeur
Posté le 23-06-2004 à 19:17:18  profilanswer
 

mais y a plein de trucs qui existe pour le C aussi
 
 
mais pourquoi changer du fortran si tu ne sais te servir que de ça ?

n°774771
bibi218
Posté le 23-06-2004 à 19:19:08  profilanswer
 

Disons que ce qu'il nous faut à nous autres, c'est surtout de quoi mouliner les calculs à vitesse grand V. Maple a beau être très bien (Matlab est pas mal non plus), ça rame sec dès qu'on rentre dans de gros problèmes ...
Fortran se comporte plus qu'honorablement (enfin je trouve) ... mais je ne sais pas ce qu'il en est vraiment du C. J'ai entendu dire que quand c'était bien fait, ça allait plus vite, mais ma faible expérience ne me permet pas de juger là dessus :)

n°774775
Taz
bisounours-codeur
Posté le 23-06-2004 à 19:20:28  profilanswer
 

vu comment vous programmez comme des pieds, c'est pas la peine de faire du C. maitrise fortran, comprends bien ce que chaque écriture implique, et voilà, ça sera déjà beaucoup

n°774776
Taz
bisounours-codeur
Posté le 23-06-2004 à 19:20:56  profilanswer
 

et assurez vous d'avoir un compilo récent, celui d'intel pour f90 est très puissant par exemple

n°774782
bibi218
Posté le 23-06-2004 à 19:26:24  profilanswer
 

Je veux bien qu'on programme comme des pieds, après tout, c'est pas notre formation première non plus  :ange:  
Au moins ça donne du boulot aux informaticiens et ça fait vendre des bouquins  :lol:
Histoire de vous faire peur, ils essaient de nous apprendre la prog parallèle en ce moment  :D (heu ... oui, en C ...)

n°774787
Taz
bisounours-codeur
Posté le 23-06-2004 à 19:34:41  profilanswer
 

1) maitrise ton compilateur pour être sur d'en tirer le maximum
2) maitrise fortran pour les memes raisons
3) assure toi que ton programme est ok : tu fais le malin avec ton algo en n log(n) seulement une fois implémenté, ton programme il est en n² log(n) ... crois moi, je suis sur que tu en as plein des trucs comme ça.
4) c'est bien le comble tiens que vous connaissiez pas la programmmation paralèle, y a des putains de théories matheuses la dessus, nous on a rien inventer. et la prog // ça se fait sans problème en fortran

n°774789
bjone
Insert booze to continue
Posté le 23-06-2004 à 19:36:02  profilanswer
 

+1 pour le compilo Intel cité par Taz.
 
le compilo Fortran d'Intel bénéficie certainement des mêmes techniques d'optimisation que le compilo C/C++.
 
il vaut mieux écrire du Fortran propre, que le compilo pourra déjà optimiser un peu, que du C mal maitrisé qui donnera un truc ultra-dégueulasse et instable....

n°774804
bibi218
Posté le 23-06-2004 à 19:54:41  profilanswer
 

Tiens, tant que j'y suis, ça me fait penser à quelque chose. J'ai vu que Matlab et Maple intégraient de la génération de code. Vous en pensez quoi personnellement ? Je me doute que c'est largement moins bien qu'un code bien fait (d'ailleurs, les fichiers générés par Matlab sont illisibles ... on reconnait que dalle), mais est-ce que ça vaut le coup côté perfs de passer de l'interprété à du compilé pas beau ??? loll

n°774810
Osama
Posté le 23-06-2004 à 20:08:33  profilanswer
 

C/C++ cai le mal :jap:

n°774829
bjone
Insert booze to continue
Posté le 23-06-2004 à 20:26:58  profilanswer
 

:D

n°774947
Joel F
Real men use unique_ptr
Posté le 23-06-2004 à 22:29:31  profilanswer
 

en C++, y a des moyens simples et efficaces de générer du code matriciel aussi efficace que du C (Blitz++,POOMA,TVMET, EVE)


Message édité par Joel F le 23-06-2004 à 22:29:43
mood
Publicité
Posté le   profilanswer
 


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

  matrices en C

 

Sujets relatifs
librairie sur les matrices comprenant les moduloProduit de 2 matrices de format différent et inversion de matrice
matrices 3D dans octaveastuce pour savoir si deux matrices peuvent "s'emboiter" ?
Le meilleur moyen de représenter des matrices en javaINFO : matrices creuses
[C++] Declarer des matrices de taille variable...[C] Comment passer des matrices par adresse??
Probleme avec des matrices de transformation 3D ...[C] manipulation de matrices binaires
Plus de sujets relatifs à : matrices en C


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