2010-01-15 3 views
0

myRainfallDB est un tableau en trois dimensions contenant des informations sur les précipitations dans des endroits aléatoires sur la terre. Je veux mettre en place la structure du tableau suivant:C: tableaux mettant en tableaux correctement

myRainfallDB[] contient une liste d'enregistrements de lieux. Ces coordonnées doivent être stockées en double.

myRainfallDB[][] contient

  • à l'indice 0: une double contenant la coordonnée X du lieu
  • à l'index 1: un double contenant la coordonnée Y du lieu
  • à l'indice 2: une matrice contenant douze doubles stocker la quantité de pluie chaque mois

Je sais que je pourrais probablement faire avancer les choses plus efficacement en utilisant des classes, mais je suis en train d'apprendre C donc je veux juste jouer avec des tableaux pour le moment. Comment pourrais-je déclarer ce tableau 3D?

Répondre

4

Vous avez besoin d'une structure ou tout simplement mettre une structure de données définie par l'utilisateur. Quelque chose comme:

struct rainfall_t { 
    double x, y; /* location */ 
    double monthly_rainfall[ 12 ]; 
}; 

En C, les tableaux sont homogènes à savoir qu'ils peuvent stocker des données d'un seul type seulement. Même pour les tableaux multidimensionnels. Vous ne pouvez éventuellement pas avoir un tableau pour toutes les données que vous décrivez sans d'abord l'encapsuler dans un struct.

Vous pouvez ensuite créer un tableau de rainfall_t et l'utiliser comme vous le souhaitez:

struct rainfaill_t db[ 100 ]; /* a DB of 100 locations */ 

Vous devriez également rechercher la mémoire allouée dynamiquement au cas où vous ne savez pas à l'avance le nombre d'emplacements que vous aurez à traiter avec.

2

Je pense que plus de choix que vous devez d'abord une structure pour stocker les informations que vous avez mentionné. Vous avez besoin d'un tableau de structure par rapport à un tableau à 3 dimensions.

struct RainfallDB 
{ 
double XCord; 
double YCord; 
double Mnths[12]; 
}; 

Maintenant, dans la fonction, vous pouvez déclarer un tableau comme celui-ci.

struct RainFallDB raininfo[100]; 

Cela va stocker les informations de 100 enregistrements. Si vous ne savez pas combien d'enregistrements l'utilisateur souhaite stocker, vous pouvez créer une liste de liens hors de la structure et l'allouer dynamiquement en utilisant malloc.

Espérons que cela aide.

0

Oui, utiliser struct pour le travail

struct myRainfallRecord { 
    double x; 
    double y; 
    double **monthlyrainfall; 
} 

et ont un tableau de myRainfallRecords. Monthlyrainfall peut être malloc en utilisant malloc (12 * sizeof (double)) lorsque vous remplissez la valeur de la structure.

+0

Si vous deviez le faire (et il n'y a aucune raison d'utiliser malloc ici) vous voulez un 'double *', pas un 'double **' . –

2

Vous ne voulez vraiment pas utiliser un tableau 3D pour cela - C est pas bon à traiter avec des tableaux multidimensionnels.De plus, il est beaucoup plus facile de traiter avec des noms plutôt que des index du tableau, donc à la place, créer une struct:

typedef struct { 
    double x, y; 
    double rainfall[12]; 
} places; 

puis créer un tableau 1 dimensions d'entre eux:

places p[100]; // 100 places 
0

Dans un multidimensionnel tableau les dimensions supérieures sont composées de tableaux de dimension inférieure. Par conséquent, seul votre tableau final contiendra autre chose qu'un tableau.

Il semble que vous n'avez pas vraiment besoin de cette troisième dimension, n'est-ce pas?

Alors:

rfd[][14] = { 
        { X_coord, Y_coord, rain, rain, rain, ... }, 
        { X_coord, Y_coord, rain, rain, rain, ... }, 
        { X_coord, Y_coord, rain, rain, rain, ... }, 
}; 

Vous aurez besoin d'un réseau parallèle pour les noms de lieux. C'est pourquoi on devrait normalement utiliser une structure pour ce type de données.

char *places[] = { "Spain, the plains", ... }; 

(OU, struct Rain { char *place, double x,y; double rain[12]; };)