Tableau dont la taille est paramétrable

Tableau dont la taille est paramétrable - C - Programmation

Marsh Posté le 03-11-2004 à 13:55:01    

Je cherche à écrire un programme qui manipule des tableaux à une dimension dont la taille est N. Cette valeur de N est bien évidemment entière mais dépend d'une autre variable notée DA. N est le résultat du calcul suivant:
 
N=720/DA+1
 
La valeur de DA est nécessairement choisie par l'utilisateur du programme de façon à ce que N soit entier (Si DA=0.1 alors N vaut 7201). Je ne souhaite pas que l'utilisateur rentre directement N. J'ai donc écrit ça:
 
/*DEBUT PROG*/
#include <stdio.h>
#include <math.h>
 
//DECLARATION DE DA puis de N
const double DA=0.1;
const int N=720/DA+1;
 
//DECLARATION D'UN TABLEAU TYPE  
double TABLEAU[N]={0};
 
//CORPS DU PROGRAMME
int main(void)
{
...
}
/*FIN PROG*/
 
J'utilisais le compilateur lcc-win32 qui acceptait cette déclaration. J'utilise dorénavant le compilateur Borland C 5.5 (freecommandlinetools) qui est paraît-il plus performant. Ce compilateur ainsi que Visual C++ refuse cette déclaration de N, qualifiée alors par le compilateur d'illégale.
 
Quel est le problème?
 
- N est de type int et DA de type double...pb de conversion de type?
- puis-je effectuer un calcul au moment de ma déclaration de N?
- Ai-je le droit de faire des calculs ailleurs que dans main(), de façon à pouvoir déterminer N en fonction de DA?
 
Merci de m'éclairer sur ce point qui me paraît obscur.
 
PS: Je suis sans doute une burne en programmation C...


Message édité par GROFRED le 03-11-2004 à 14:01:04
Reply

Marsh Posté le 03-11-2004 à 13:55:01   

Reply

Marsh Posté le 03-11-2004 à 13:59:51    

utilise malloc ....

Reply

Marsh Posté le 03-11-2004 à 15:27:03    

Essai avec des "#define" et non des "const" :

Code :
  1. //DECLARATION DE DA puis de N
  2. const double DA=0.1;
  3. const int N=720/DA+1;
  4. ========================
  5. #define DA ((double) 0.1)
  6. #define N  ((int) ((720.0/DA) +1))


Sinon, avec "malloc()" ou autre fonction d'allocation dynamique, ça passera toujours...


---------------
If I want to fail and succeed, which I have done ?
Reply

Marsh Posté le 03-11-2004 à 19:15:11    

GROFRED a écrit :

Je cherche à écrire un programme qui manipule des tableaux à une dimension dont la taille est N. Cette valeur de N est bien évidemment entière mais dépend d'une autre variable notée DA. N est le résultat du calcul suivant:
 
N=720/DA+1
 
La valeur de DA est nécessairement choisie par l'utilisateur du programme de façon à ce que N soit entier (Si DA=0.1 alors N vaut 7201). Je ne souhaite pas que l'utilisateur rentre directement N. J'ai donc écrit ça:
 
/*DEBUT PROG*/
#include <stdio.h>
#include <math.h>
 
//DECLARATION DE DA puis de N
const double DA=0.1;
const int N=720/DA+1;
 
//DECLARATION D'UN TABLEAU TYPE  
double TABLEAU[N]={0};
 
//CORPS DU PROGRAMME
int main(void)
{
...
}
/*FIN PROG*/
 
J'utilisais le compilateur lcc-win32 qui acceptait cette déclaration. J'utilise dorénavant le compilateur Borland C 5.5 (freecommandlinetools) qui est paraît-il plus performant. Ce compilateur ainsi que Visual C++ refuse cette déclaration de N, qualifiée alors par le compilateur d'illégale.
 
Quel est le problème?
 
- N est de type int et DA de type double...pb de conversion de type?
- puis-je effectuer un calcul au moment de ma déclaration de N?
- Ai-je le droit de faire des calculs ailleurs que dans main(), de façon à pouvoir déterminer N en fonction de DA?
 
Merci de m'éclairer sur ce point qui me paraît obscur.
 
PS: Je suis sans doute une burne en programmation C...


 
Le problème c'est que tu n'as pas le droit de déclarer un tableau dont la taille est issue d'un calcul. Cela devient une allocation dynamique donc tu dois utiliser "malloc()" La taille d'un tableau statique doit être soit un nombre fixe, soit une variable de type "const" donc non-modifiable.
 
Par ailleurs, si DA n'est utilisée que pour calculer N, tu peux la déclarer en "int". Mais cette remarque ne change rien à ma remarque précédente...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed