Rechercher : dans
Par :

Récupérer les dimensions d'un tableau en C ?

Dernière réponse le 24 jan 2008 à 11:07:46 Papi, le 23 jan 2008 à 20:12:33 
 Signaler ce message aux modérateurs

Bonjour à tous,

Comme le nom de ce message l'indique, je débute en langage C et je voudrais faire un programme qui aura comme entrée un tableau deux dimensions quelquonque, et mon problème est que je ne vois pas comment récupérer ses dimensions pour les mettres dans des variables ?

Je pense que la solution est toute simple, mais je me prends la tête la dessus depuis un petit bout de temps.

Merci

Configuration: Intel core 2 Duo E6750
Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Récupérer les dimensions d'un tableau en C ? » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Langage C - Les tableaux VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...
Les tableaux en langage C++ VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

tatou_38, le 23 jan 2008 à 20:56:11

Qu'est ce que tu veux dire par des "tableaux en entrée du programme" ??

Un programme C a en entrée toujours une liste d'arguments, ceux fournis au lancement du programme. Après le programme peut faire l'acquisition de données, à toi de les ranger sous la forme que tu souhaites !

Précise ta question !
tatou_38
Angers

Répondre à tatou_38

2

Papi, le 23 jan 2008 à 21:38:01

Tout d'abord, merci pour ta rapidité tatou_38,

En fait je voudrais créer une fonction ayant comme entrée la matrice d'un objet, c'est à dire un tableau contenant les coordonnées X, Y et Z de chaque angle de l'objet, donc un tableau de 3 colonnes et autant de ligne qu'il y a d'angle.

Et à partir de la, je voudrais appliquer des matrices de transformation pour effectuer une translation, une diminution ou une rotation de l'objet en 3D. Donc j'aurai besoin de savoir combien il y a de ligne dans ce tableau pour appliquer mes matrices de transformation.

Les objets pouvant varier, cette fonction doit s'adapter.

Merci

Répondre à Papi

3

fiddy, le 23 jan 2008 à 21:59:49

Salut,

Tu parles de tableau à taille aléatoire, donc, tu vas devoir faire de l'allocation dynamique.
Dans ce cas, tu passes tout simplement la taille de ton tableau en paramètre.

Avec une allocation statique, par exemple char buffer[25][50]; tu peux utiliser sizeof();

Cordialement
Google is your friend

Répondre à fiddy

4

tatou_38, le 23 jan 2008 à 22:12:39

Tu veux faire de la géométrie dans l'espace, il te faut donc un tableau à trois dimensions :

tab[x][y][z]

Ce tableau pointe sur un objet, qui peut être un entier, une chaîne de caractères, une structure de données, enfin tout ce que tu veux !

ex :

typedef struct {
int couleur;
long poids;
char indice;
} tDonnees;

pour une déclaration statique :

tDonnees tab[20][40][50];

pour une allocation dynamique, à base de malloc, mais il faut allouer toutes les cases une par unes (trois foucles for(;;); imbriquées) sans oublier la déallocation quand tu as fini. Plus compliqué, mais plus performant car tu n'utilise que la mémoire utile, et tu peux toujours "pousser les murs" à l'exécution.





tatou_38
Angers

Répondre à tatou_38

5

Papi, le 23 jan 2008 à 23:35:27

Merci beaucoup pour votre efficacité,

La commande sizeof() correspond tout à fait à ce que je voulais faire.

Sinon tatou_38, par curiosité comment tu fais la déallocation, parce que ca m'intéresse de pouvoir pousser les murs comme tu dis, cela m'a l'air très pratique.

Merci

Répondre à Papi

6

fiddy, le 24 jan 2008 à 00:06:26

Attention Papi.
Soit tu fais de l'allocation dynamique, c'est-à-dire utilisation de malloc et cie, et dans ce cas là, tu peux refaire de la réallocation (realloc) et enfin libérer l'espace mémoire (free). Mais pas de sizeof
Soit tu fais de l'allocation statique, et là, tu peux utiliser sizeof.
Google is your friend

Répondre à fiddy

7

Papi, le 24 jan 2008 à 02:06:01

Merci fiddy pour toutes ses préscisions.

J'étais partie pour travailler en statique donc je vais continuer, mais passer en dynamique pourra être une idée d'optimisation pour plus tard.

Merci


PS : C'est la première fois que je poste sur ce forum et je suis impréssionné de la rapidité de réponse.

Répondre à Papi

8

bowbow13, le 24 jan 2008 à 08:47:23

En c++ 2type de tableau :
_ les statiques dont la taille et la dimension sont déclarer avant en paramètre (ne peut pas s'agrandir, limité en nombre de ressource de stockage)
_ les Vectoriel (ce que tu dis dynamique).

Si tu compte compter les cases du tableau en disant que lorsqu'une case est vide alors c'est la fin du tableau, n'oublie qu'un tableau à des valeurs quelconque attribué lors de sa création du type : -45643186431498156, ou 45153545646546513.

Répondre à bowbow13

9

tatou_38, le 24 jan 2008 à 08:55:46

Oui, tu as raison. C'est pourquoi c'est une bonne habitude de mettre à zéro de suite après tout malloc(), cela évite souvent bien des soucis !
tatou_38
Angers

Répondre à tatou_38

10

bowbow13, le 24 jan 2008 à 08:57:25

J'ai une certaines expérience des erreurs à la con parce que j'ai été trop faineant pour mettre le tableau a 0 ^^ donc depuis c'est devenu une habitude

Répondre à bowbow13

11

 fiddy, le 24 jan 2008 à 11:07:46

Je tiens à vous rappeler que l'initialisation avec calloc remplie la zone avec des 0. Ce qui peut être pratique ;)
Google is your friend

Répondre à fiddy