2011-03-24 4 views
0

Merci! Je devais juste jeter le côté droit de l'affectation à terme.Tableaux dynamiques et structures

Je dois faire un tableau dynamique de polynômes qui ont chacun un tableau dynamique de termes. En donnant le terme exposant et coefficient, j'obtiens une erreur "expression attendue avant" {"jeton". Que fais-je incorrectement lors de l'attribution des valeurs?

De même, existe-t-il un moyen facile de conserver le tableau dynamique des termes ordonnés par leur exposant? Je prévoyais juste de boucler, en imprimant la valeur maximum mais préférerais les stocker dans l'ordre.

Merci!

polynomialArray[index].polynomialTerm[0] = {exponent, coefficient}; // ISSUE HERE 

changement

polynomialArray[index].polynomialTerm[0] = (Term){exponent, coefficient}; 

Répondre

1

Si cela est C99, je pense que vous avez besoin

polynomialArray[index].polynomialTerm[0] = (Term){exponent, coefficient}; 
2
polynomialArray[index].polynomialTerm[0]->exponent = exponent; 
polynomialArray[index].polynomialTerm[0]->coefficient = coefficient; 
0

Vous ne pouvez pas attribuer des valeurs telles que (uniquement pendant la déclaration).

Vous devez assigner comme ceci:

polynomialArray[index].polynomialTerm[0].exponent = exponent; 
polynomialArray[index].polynomialTerm[0].coefficient = coefficient; 

A propos de l'autre question, vous ne avez pas vraiment besoin d'affirmer ici. Le pointeur ne sera pas NULL s'il a une valeur malloc qui lui est allouée. Sinon, il vaut mieux être NULL, donc vous pouvez tester si malloc a échoué.

Pour le faire commander, vous devrez commander en utilisant un algorithme de tri. Je pense que si vous cherchez un moyen facile, la façon dont vous faites est bien. S'il est essentiel d'être commandé (comme les applications en temps réel), vous devez repenser l'approche. Si non, gardez-le et avancez!

Prenez soin, Beco

2

Il y a un problème d'efficacité ici dans votre code:

if(index > (sizeof(polynomialArray)/sizeof(Polynomial))) 
     polynomialArray = (Polynomial*)realloc(polynomialArray, index * sizeof(Polynomial)); 

comme polynomialArray est un pointeur, je pense que sizeof (polynomialArray) serait toujours 4 ou 8 (système 64 bits). Donc, le ci-dessus déclaration sera toujours vrai tant que indice est supérieur à 0.

+0

Bonne prise. 'sizeof (X)' donne la réponse à l'auteur original si et seulement si 'X' est un tableau. –