Opérations matricielles

lainlain Messages postés 7 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 5 septembre 2003 - 5 sept. 2003 à 16:35
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 6 sept. 2003 à 15:20
Salut tout le monde!
Je me suis lancé dans un projet de programme qui traîte toutes les opérations matricielles (enfin celle qu'on a vue en cours...)
Je fais ceci dans le cadre d'un travail de maturité (c'est un truc Suisse... Pour passer ses exams de bac, il faut faire le gros truc...), et je me suis lancé dans la programmation... A la base j'avais jamais programmé, mais j'ai pas mal vite appris... Il me manque quand meme beaucoup de savoir en la matière...

Bon, pour en revenir à mon travail, normalement je dois faire afficher les résultat en décimales ou en fractions...

Il me faut un petit coup de pouce, surtout pour la création d'une matrice quelconque qui doit être fait dans une classe... J'ai déjà fait qquelque chose, mais j'arrive pas à créer un tableau matriciel dynamique (avec lignes et colonnes... style tableau[][] j'arrive seulement comme ça tableau[]...)

Si jamais, je peux transmettre les bases de mon travail...

Merci d'avance!

Un petit débutant qui veut tout savoir

5 réponses

blopera Messages postés 10 Date d'inscription samedi 23 août 2003 Statut Membre Dernière intervention 20 décembre 2004
5 sept. 2003 à 17:41
slt,

ta matrice peut-être vue comme un tableau à deux dimensions, te permettant de gérer facilement les lignes/colonnes (tableau[i][j]) ou comme un tableau à une dimension dans lequel tu doit gérer toi même l'accès à la ième colonne (tableau[i + nbcolones*j]).

En fonction de ton choix, BruNews conseille plutôt un tableau à une dimension...( pour des raisons d'accès au memory manager), perso, je pense que ça dépend des cas...

Bref pour un tableau à 1 dim:
int *tab;
tab = (int*)malloc(nblignes*nbcolonnes*sizeof(int));

et pour un tableau à 2 dim:
int **tab;
tab = (int**)malloc(nblignes*sizeof(int*));
for(int i=0; i!=nbcolonnes;i++)
tab[i] = (int*)malloc(nbcolonnes*sizeof(int));

n'oublie pas de désallouer et de vérifier les retours d'allocation...

si tu as besoin de plus d'aide, je veux bien regarder ton code...

Bertrand
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2003 à 17:59
Effectivement on evite ainsi le malloc en boucle:
int *tab;
tab = (int*)malloc(nblignes*nbcolonnes*sizeof(int));
mais rien n'empeche de s'en servir en 2 dimensions:
int **idxtab = (int**) tab;
Et on se sert de idxtab en 2 dimensions.
Ensuite on fera aussi enorme benef en sortie:
free(tab); // 1 seule fois !!!
va bon ?
BruNews, ciao...
0
lainlain Messages postés 7 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 5 septembre 2003
5 sept. 2003 à 20:21
Merci!

Mais pourquoi je peux pas créer un tableau dynamique à 2 dimensions? J'ai eu des erreurs à la compilation en essayant... J'ai été obligé de créer un tableau à 1 dimension. Je saurai comment faire même avec 1 dimension, mais je préférerai pour des raisons pratiques et pour que mon prof comprenne plus facilement pouvoir créer un tableau à 2 dimension.
0
blopera Messages postés 10 Date d'inscription samedi 23 août 2003 Statut Membre Dernière intervention 20 décembre 2004
5 sept. 2003 à 20:40
oups, petite erreur, dans la boucle, mets nblignes et non nbcolonnes!!!

for(int i=0; i!=nblignes;i++)

bertrand
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 sept. 2003 à 15:20
http://www.cppfrance.com/article.aspx?Val=2497
Je t'ai fait demo avec 1 seule alloc et desalloc.
Vois que va nickel.
BruNews, ciao...
0
Rejoignez-nous