IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

déclaration de variable non prise en compte


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut déclaration de variable non prise en compte
    bonjour,
    Je dot créer un programme faisant le calcul d'un formule sur laquelle on place une correction en fonction d'un angle (d'ou le nombre important de condition).
    Pour simplifier le programme j'ai créer une fonction pour chaque corection mais je ne sais pas si mes fonctions sont bien déclarer.

    De plus lors de la compilation l'ordinateur m'affiche à chaque variable un message d'erreur disant "identificateur non déclarer"...

    J'ai eu beau retournée le code dans tout les sens je ne voit pas ou est la faille

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    //Projet découverte
    //informatique et astronautique
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    float t0(float e,float w,float a);					//déclaration de la fonction t sans correction
    float t1(float e,float w,float a);					//déclaration de la fonction t avec correction 1
    float t2(float e,float w,float a);					//déclaration de la fonction t avec correction 2
    float t3(float e,float w,float a);					//déclaration de la fonction t avec correction 3
    float t4(float e,float w,float a);					//déclaration de la fonction t avec correction 4
     
    void main()
    {
    	 float a=0;										// rayon de l'orbite
    	 float e=0;										// exentricité
    	 float v=0;										// point de l'orbite d'anomalies vraie
    	 float i=0;										// inclinaison
    	 float w=0;										//
    	 int mu=398600;									// parametre mu définie dans le TP 
    	 float vc=0;									//
    	 float tab[28][5];								// déclaration du tableau des calculs
    	 float la=0;									// latitude
     
    	 float tp=0;									//temp de passage au périgé
    	 int t=0;										//compteur de boucle pour l'affichage du tableau
    	 int n=0;										//nombre de V saisie
     
     
    	 printf("projet modélisation mathématique de la trace d'un satelitte en orbite terrestre\n\n");
    	 printf("veuillez saisir le rayon a de l'orbite \n");
    	 scanf("%f",&a);
    	 printf("veuillez saisir l'exentricite e\n");
    	 scanf("%f",&e);
    	 printf("veuillez saisir l'inclinaison i\n");
    	 scanf("%f",&i);
    	 printf("veuillez saisir le parametre w\n");
    	 scanf("%f",&w);
     
    	 tp=(-sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w)))-e*((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w))));
    	 printf("temp de passage au perigee :%f\n",&tp);
    	 printf("vous pouvez saisir 28 point different de V");
     
    	do
    	{
    		printf("veuillez saisir un point V de l'orbite\n");
    		scanf("%f",&v);
    		n++;
    		tab[n-1][0]=v;								//attribution de V
    		tab[n-1][1]=(3,141592654*v)/180;			//converstion de V en radian
    		vc=acos(-e);								//calcul de Vc
    			if(Vc<=v<=2*(3,141592654)-Vc)
    			{
    				tab[n-1][2]=t1;
    			} else
    				{
    				if(tab[n-1][1]>=2*(3,141592654)-Vc)
    				{
    					tab[n-1][2]=t2;
    				} else
    					{
    					if(-2*(3,141592654)+Vc<=tab[n-1][1]<=-Vc)
    					{
    						tab[n-1][2]=t3;
    					} else
    						{
    						if(2*(3,141592654)+Vc>=tab[n-1][1])
    						{
    							tab[n-1][2]=t4;
    						} else
    							{
    							if(-Vc<=tab[n-1][1]<=Vc,-Vc<=-w<=Vc)
    							{
    								tab[n-1][2]=t0;
    							}
    							}
    						}
    					}
    				}
    		la=pow(sin(sin(w+tab[n-1][0])*sin(i)),-1);					//calcul de la latitude
    		tab[n-1][3]=la;												//
    		tab[n-1][4]=pow(sin((tan(la))/(tan(i))),-1);				//calcul de la longitude
        } while(n!=28);													//fin de la boucle à la 28e valeurs
     
     
    	printf("affichage du tableau\n");
        printf("affichage du tableau\nresultats des calculs : \n\n");
        for (t=0; t<28; t++)											//boucle d'affichage des résultats
        {
          printf("point %2d : %f, %f, %f, %f, %f\n",t+1,tab[t][0],tab[t][1],tab[t][2],tab[t][3],tab[t][4]);
        }
    return 0;
    }
     
    float t0(float e,float w,float a)
    {
    	return (sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1]))));
    }																	//définition de la fonction t0
    float t1(float e,float w,float a)
    {
    	return (sqrt(pow(a,3)/mu))*((3,141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t1
    float t2(float e,float w,float a)
    {
    	return (sqrt(pow(a,3)/mu))*(2*(3,141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t2
    float t3 (float e,float w,float a)
    {
    	return (sqrt(pow(a,3)/mu))*((-3,141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t3
    float t4(float e,float w,float a)
    {
    	return (sqrt(pow(a,3)/mu))*(-2*(-3,141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t4

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Bonsoir,
    Je n'ai fait que survoler ton programme mais il y a déjà quelques petites erreurs :

    • Le C est sensible à la casse, c'est-à-dire qu'il différencie les majuscules des minuscules. La variable « Vc » est donc differente de « vc ». Une bonne voie à suivre est de prendre d'emblée l'habitude de systématiquement écrire les variables en minuscules. Il n'y a aucune raison technique à cela mais c'est l'usage le plus courant avec ce langage ;
    • Les nombres flottants s'écrivent à l'anglo-saxonne, donc avec un point décimal « . » et pas une virgule. C'est important parce « 3,141592654 » est une expression valide en C et qui compilera donc en silence, mais qui ne te donnera pas du tout le résultat attendu : l'opérateur virgule « , » évalue successivement tous les termes séparés par lesdites virgules puis prend la valeur du dernier, soit ici 141592654, considérée ici comme une valeur entière valant cent quarante et un millions, cinq cent quatre-vingt-douze mille six cent cinquante-quatre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Citation Envoyé par tom250908 Voir le message
    De plus lors de la compilation l'ordinateur m'affiche à chaque variable un message d'erreur disant "identificateur non déclarer"...
    Essaye d'une manière générale de donner l'intégralité des informations. Par exemple le compilateur te donne le nombre de la variable non déclarée et la ligne et la colone en question.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    aprés avoir apporté certaine correction j'obtient le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    //Projet découverte
    //informatique et astronautique
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    	float t0 (float e,float w,float a);				//déclaration de la fonction t sans correction
    	float t1 (float e,float w,float a);				//déclaration de la fonction t avec correction 1
    	float t2 (float e,float w,float a);				//déclaration de la fonction t avec correction 2
    	float t3 (float e,float w,float a);				//déclaration de la fonction t avec correction 3
    	float t4 (float e,float w,float a);				//déclaration de la fonction t avec correction 4
     
    int main()
    {
    	 float a=0;										// rayon de l'orbite
    	 float e=0;										// exentricité
    	 float v=0;										// point de l'orbite d'anomalies vraie
    	 float i=0;										// inclinaison
    	 float w=0;										//
    	 int mu=398600;									// parametre mu définie dans le TP 
    	 float vc=0;									//
    	 float tab[28][5]=0;							// déclaration du tableau des calculs
    	 float la=0;									// latitude
     
    	 float tp=0;									//temp de passage au périgé
    	 int t=0;										//compteur de boucle pour l'affichage du tableau
    	 int n=0;										//nombre de V saisie
     
     
    	 printf("projet modélisation mathématique de la trace d'un satelitte en orbite terrestre\n\n");
    	 printf("veuillez saisir le rayon a de l'orbite \n");
    	 scanf("%f",&a);
    	 printf("veuillez saisir l'exentricite e\n");
    	 scanf("%f",&e);
    	 printf("veuillez saisir l'inclinaison i\n");
    	 scanf("%f",&i);
    	 printf("veuillez saisir le parametre w\n");
    	 scanf("%f",&w);
     
    	 tp=(-sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w)))-e*((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w))));
    	 printf("temp de passage au perigee :%f\n",&tp);
    	 printf("vous pouvez saisir 28 point different de V");
     
    	do
    	{
    		printf("veuillez saisir un point V de l'orbite\n");
    		scanf("%f",&v);
    		n++;
    		tab[n-1][0]=v;								//attribution de V
    		tab[n-1][1]=(3.141592654*v)/180;			//converstion de V en radian
    		vc=acos(-e);								//calcul de Vc
    			if(vc<=v<=2*(3.141592654)-vc)
    			{
    				tab[n-1][2]=t1;
    			} else
    				{
    				if(tab[n-1][1]>=2*(3.141592654)-vc)
    				{
    					tab[n-1][2]=t2;
    				} else
    					{
    					if(-2*(3.141592654)+vc<=tab[n-1][1]<=-vc)
    					{
    						tab[n-1][2]=t3;
    					} else
    						{
    						if(2*(3.141592654)+vc>=tab[n-1][1])
    						{
    							tab[n-1][2]=t4;
    						} else
    							{
    							if(-vc<=tab[n-1][1]<=vc,-vc<=-w<=vc)
    							{
    								tab[n-1][2]=t0;
    							}
    							}
    						}
    					}
    				}
    		la=pow(sin(sin(w+tab[n-1][0])*sin(i)),-1);					//calcul de la latitude
    		tab[n-1][3]=la;												
    		tab[n-1][4]=pow(sin((tan(la))/(tan(i))),-1);				//calcul de la longitude
        } while(n!=28);													//fin de la boucle à la 28e valeurs
     
     
    	printf("affichage du tableau\n");
        printf("affichage du tableau\nresultats des calculs : \n\n");
        for (t=0; t<28; t++)											//boucle d'affichage des résultats
        {
          printf("point %2d : %f, %f, %f, %f, %f\n",t+1,tab[t][0],tab[t][1],tab[t][2],tab[t][3],tab[t][4]);
        }
    return 0;
    }
     
    float t0(float e,float w,float a)
    {
    	int mu=398600;	
    	float tab[28][5]=0;
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1]))));
    }
    float t1(float e,float w,float a)
    {
    	int mu=398600;	
    	float tab[28][5]=0;
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*((3,141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t1
    float t2(float e,float w,float a)
    {
    	int mu=398600;	
    	float tab[28][5]=0;
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(2*(3,141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t2
    float t3 (float e,float w,float a)
    {
    	int mu=398600;	
    	float tab[28][5]=0;
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*((-3,141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t3
    float t4(float e,float w,float a)
    {
    	int mu=398600;	
    	float tab[28][5]=0;
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(-2*(-3,141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t4
    mais j'ai toujours des erreur dans les "conversion" et des erreur par rapport au tableau dans les définition des fonction (à partir de la ligne 100)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    1>------ Début de la génération*: Projet*: projet, Configuration*: Debug Win32 ------
    1>Compilation en cours...
    1>calculTp.cpp
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(24) : error C2440: 'initialisation'*: impossible de convertir de 'int' en 'float [28][5]'
    1>        Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(52) : warning C4244: '='*: conversion de 'double' en 'float', perte possible de données
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(54) : warning C4804: '<='*: utilisation risquée du type 'bool' dans l'opération
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(56) : error C2440: '='*: impossible de convertir de 'float (__cdecl *)(float,float,float)' en 'float'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(61) : error C2440: '='*: impossible de convertir de 'float (__cdecl *)(float,float,float)' en 'float'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(64) : warning C4804: '<='*: utilisation risquée du type 'bool' dans l'opération
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(66) : error C2440: '='*: impossible de convertir de 'float (__cdecl *)(float,float,float)' en 'float'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(71) : error C2440: '='*: impossible de convertir de 'float (__cdecl *)(float,float,float)' en 'float'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(74) : warning C4804: '<='*: utilisation risquée du type 'bool' dans l'opération
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(74) : warning C4804: '<='*: utilisation risquée du type 'bool' dans l'opération
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(76) : error C2440: '='*: impossible de convertir de 'float (__cdecl *)(float,float,float)' en 'float'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(100) : error C2440: 'initialisation'*: impossible de convertir de 'int' en 'float [28][5]'
    1>        Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(107) : error C2440: 'initialisation'*: impossible de convertir de 'int' en 'float [28][5]'
    1>        Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(114) : error C2440: 'initialisation'*: impossible de convertir de 'int' en 'float [28][5]'
    1>        Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(121) : error C2440: 'initialisation'*: impossible de convertir de 'int' en 'float [28][5]'
    1>        Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(128) : error C2440: 'initialisation'*: impossible de convertir de 'int' en 'float [28][5]'
    1>        Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\Thomas\Desktop\Projet\projet\Debug\BuildLog.htm"
    1>projet - 11 erreur(s), 5 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    je n'est jamais vraiment compris cette histoire de converstion surtout que même en declarant "void" au lieu de float, il y a la meme probleme...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 26
    Points
    26
    Par défaut
    C'est parce que tu essayes de calculer des floats avec un int (dans ton code l'int mu), la compilateur n'aime pas ça. A cause de la perte de précision du résultat, tu ne pourras jamais effectuer des calculs avec des variables de type différent.

    Deux solutions de présentent a toi :

    -N'utiliser que des variables de même type dans un même calcul.

    -Caster la variable sur le type souhaité s'il n'y a pas de risque de perte de précision afin que le compilateur la lise comme un autre type par exemple int vers float, si j'ai un int nbr que je veux utiliser en float pour un calcul:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_float = (float)nbr + 1.52;
    Je te conseille d'opter pour la première solution et de garder la deuxième pour un cas où tu n'as pas le choix ^^


    PS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (sqrt(pow(a,3)/mu))*((-3,141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    Tu as oublié de remplacer 3,14XXXX par 3.14XXXX
    Et tu as d'autres bouts de code étrange, notamment au niveau de tes tableaux de float.

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    En vrac :

    On n'initialise pas un tableau comme ca lors de sa declaration :
    Mais comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float tab[28][5] = {0};
    Il est deconseille d'utiliser scanf pour lire les entrees clavier.

    La division de deux floats ne donnerait-elle pas un double ? C'est du moins ce que semble te dire le compilateur. Si tu veux absolument un float :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[n-1][1]=(float)((3.141592654*v)/180);
    Si tu veux tester si v est entre deux valeurs, tu ne peux pas faire ca en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(vc<=v<=2*(3.141592654)-vc)
    Il faut que tu testes si v est plus grand que vc ET si v est plus petit que 2*PI-vc.

    Pareil ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(-2*(3.141592654)+vc<=tab[n-1][1]<=-vc)
    Sais-tu ce que fait ce code ? Es-tu vraiment certain de vouloir ecrire cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(-vc<=tab[n-1][1]<=vc,-vc<=-w<=vc)
    Dans t0, tu laboures allegrement la memoire en accedant a tab[-1][1]. Pareil dans t1, t2, t3 et t4.

    D'ailleurs, tes noms de fonctions et de variables sont a proscrire : tu as pleins de lettre sur ton clavier, pourquoi ne pas t'en servir pour ecrire des noms de fonction qui veulent dire quelque chose ? Et pareil pour les variables.

    mu devrait etre une constante globale

    Bref, pas mal de problemes a corriger.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    merci à vous, aprés certaine correction ( je n'est pas eu le temps de tout mettre au propre) j'obtient le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    	double t0 (double e,double w,double a);				//déclaration de la fonction t sans correction
    	double t1 (double e,double w,double a);				//déclaration de la fonction t avec correction 1
    	double t2 (double e,double w,double a);				//déclaration de la fonction t avec correction 2
    	double t3 (double e,double w,double a);				//déclaration de la fonction t avec correction 3
    	double t4 (double e,double w,double a);				//déclaration de la fonction t avec correction 4
     
    int main()
    {
    	 double a=0;									// rayon de l'orbite
    	 double e=0;									// exentricité
    	 float v=0;										// point de l'orbite d'anomalies vraie
    	 float i=0;										// inclinaison
    	 double w=0;									//
    	 float mu=398600;								// parametre mu définie dans le TP 
    	 float vc=0;									//
    	 double tab[28][5]={0};								// déclaration du tableau des calculs
    	 float la=0;									// latitude
     
    	 float tp=0;									//temp de passage au périgé
    	 int t=0;										//compteur de boucle pour l'affichage du tableau
    	 int n=0;										//nombre de V saisie
     
     
    	 printf("projet modélisation mathématique de la trace d'un satelitte en orbite terrestre\n\n");
    	 printf("veuillez saisir le rayon a de l'orbite \n");
    	 scanf("%f",&a);
    	 printf("veuillez saisir l'exentricite e\n");
    	 scanf("%f",&e);
    	 printf("veuillez saisir l'inclinaison i\n");
    	 scanf("%f",&i);
    	 printf("veuillez saisir le parametre w\n");
    	 scanf("%f",&w);
     
    	 tp=(-sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w)))-e*((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w))));
    	 printf("temp de passage au perigee :%f\n",&tp);
    	 printf("vous pouvez saisir 28 point different de V");
     
    	do
    	{
    		printf("veuillez saisir un point V de l'orbite\n");
    		scanf("%f",&v);
    		n++;
    		tab[n-1][0]=v;								//attribution de V
    		tab[n-1][1]=(3.141592654*v)/180;			//converstion de V en radian
    		vc=acos(-e);								//calcul de Vc
    			if(vc<=tab[n-1][1],tab[n-1][1]<=2*(3.141592654)-vc)
    			{
    				tab[n-1][2]=t1;
    			} else
    				{
    				if(tab[n-1][1]>=2*(3.141592654)-vc)
    				{
    					tab[n-1][2]=t2;
    				} else
    					{
    					if(-2*(3.141592654)+vc<=tab[n-1][1],tab[n-1][1]<=-vc)
    					{
    						tab[n-1][2]=t3;
    					} else
    						{
    						if(2*(3.141592654)+vc>=tab[n-1][1])
    						{
    							tab[n-1][2]=t4;
    						} else
    							{
    							if(-vc<=tab[n-1][1],tab[n-1][1]<=vc,-vc<=-w,-w<=vc)
    							{
    								tab[n-1][2]=t0;
    							}
    							}
    						}
    					}
    				}
    		la=pow(sin(sin(w+tab[n-1][0])*sin(i)),-1);					//calcul de la latitude
    		tab[n-1][3]=la;												
    		tab[n-1][4]=pow(sin((tan(la))/(tan(i))),-1);				//calcul de la longitude
        } while(n!=28);													//fin de la boucle à la 28e valeurs
     
     
    	printf("affichage du tableau\n");
        printf("affichage du tableau\nresultats des calculs : \n\n");
        for (t=0; t<28; t++)											//boucle d'affichage des résultats
        {
          printf("point %2d : %f, %f, %f, %f, %f\n",t+1,tab[t][0],tab[t][1],tab[t][2],tab[t][3],tab[t][4]);
        }
    return 0;
    }
     
    double t0(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5]={0};
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1]))));
    }
    double t1(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5]={0};
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*((3.141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t1
    double t2(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5]={0};
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(2*(3.141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t2
    double t3 (double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5]={0};
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*((-3.141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t3
    double t4(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5]={0};
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(-2*(-3.141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t4
    Mais j'ai toujours le message d'erreur suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    1>------ Début de la génération*: Projet*: projet, Configuration*: Debug Win32 ------
    1>Compilation en cours...
    1>calculTp.cpp
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(34) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(36) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(38) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(40) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(42) : warning C4244: '='*: conversion de 'double' en 'float', perte possible de données
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(49) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(53) : warning C4244: '='*: conversion de 'double' en 'float', perte possible de données
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(56) : error C2440: '='*: impossible de convertir de 'double (__cdecl *)(double,double,double)' en 'double'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(61) : error C2440: '='*: impossible de convertir de 'double (__cdecl *)(double,double,double)' en 'double'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(66) : error C2440: '='*: impossible de convertir de 'double (__cdecl *)(double,double,double)' en 'double'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(71) : error C2440: '='*: impossible de convertir de 'double (__cdecl *)(double,double,double)' en 'double'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(76) : error C2440: '='*: impossible de convertir de 'double (__cdecl *)(double,double,double)' en 'double'
    1>        Aucun contexte dans lequel cette conversion est possible
    1>c:\users\thomas\desktop\projet\projet\calcultp.cpp(82) : warning C4244: '='*: conversion de 'double' en 'float', perte possible de données
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\Thomas\Desktop\Projet\projet\Debug\BuildLog.htm"
    1>projet - 5 erreur(s), 8 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    Je ne sais pas si il faut mettre les variables à prendre en compte dans les fonction en double aussi ou non ... je suis un peu perdu la ...

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Je pense que tu ne comprends pas tout ce que tu ecris, notamment ce genre de syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(vc<=tab[n-1][1],tab[n-1][1]<=2*(3.141592654)-vc)
    Ce que tu veux ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (vc<=tab[n-1][1]) || (tab[n-1][1]<=2*(3.141592654)-vc) )
    Et tu n'as toujours pas corrige le code de tes fonctions, qui accedent a tab[-1][1], ce qui va entrainer un comportement indefini (c'est a dire que ca ne fait pas ce que tu veux).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double t0(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5]={0};
    	int n=0;
    	return (sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1]))));
    }
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Je comprend pas ce que tu veut dire avec le tab[-1][1] ...

    j'ai corriger les conditions par contre , merci

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par tom250908 Voir le message
    Je comprend pas ce que tu veut dire avec le tab[-1][1]
    Tu accèdes à tab[n-1] mais tu as défini n=0 à la ligne juste avant et « 0-1 = -1 ». Tu essaies donc d'accéder à la « case numéro -1 » qui est par définition hors tableau.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    ha mais oui ... effectivement c'est problematique, merci
    sa c'est corrigé mais à chaque fois que je fait appel à une de ces fonction dans le bloc principal il m'affiche le message d'erreur de conversion (ligne 56 61 66 71 76 et 32) c'est le même message que celui posté plus haut ...

    Je ne comprend pas comment regler cette erreur etant donné que les variables et la fonction sont definie en "double"

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par tom250908 Voir le message
    … à chaque fois que je fait appel à une de ces fonction dans le bloc principal il m'affiche le message d'erreur de conversion (ligne 56 61 66 71 76 et 32) c'est le même message que celui posté plus haut ...

    Je ne comprend pas comment regler cette erreur etant donné que les variables et la fonction sont definie en "double"
    SI je prends la ligne 56 au hasard, on tombe sur ceci :


    Qu'est-ce que cela est censé représenter ? « tab » est un tableau de double et « t2 » est une fonction. Tu es donc en train d'essayer d'affecter une fonction à une variable de type double.

    Si c'est le résultat de la fonction que tu cherches à enregistrer dans le tableau, alors il faut l'invoquer, donc en ajoutant les parenthèses et surtout en lui spécifiant les trois paramètres qu'elle est censée recevoir, comme indiqué dans tes déclarations en début de programme.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    donc le code devrait ressemblé a sa ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    if((vc<=tab[n-1][1])||(tab[n-1][1]<=2*(3.141592654)-vc))
    			{
    				tab[n-1][2]=(t1)(double e,double w,double a);
    			} else
    				{
    				if(tab[n-1][1]>=2*(3.141592654)-vc)
    				{
    					tab[n-1][2]=(t2)(double e,double w,double a);
    				} else
    					{
    					if((-2*(3.141592654)+vc<=tab[n-1][1])||(tab[n-1][1]<=-vc))
    					{
    						tab[n-1][2]=(t3)(double e,double w,double a);
    					} else
    						{
    						if(2*(3.141592654)+vc>=tab[n-1][1])
    						{
    							tab[n-1][2]=(t4)(double e,double w,double a);
    						} else
    							{
    							if((-vc<=tab[n-1][1])||(tab[n-1][1]<=vc,-vc<=-w,-w<=vc))
    							{
    								tab[n-1][2]=(t0)(double e,double w,double a);
    							}
    							}
    						}
    					}
    				}
    le compilateur m'affiche "double doit etre precede de ')' " ...Je ne voit pas ce qu'il veut dire ...

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par tom250908 Voir le message
    donc le code devrait ressemblé a sa ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			tab[n-1][2]=(t1)(double e,double w,double a);
    (Indice : le « ç » sur trouve sur la touche 9 ).

    Non, ça devrait ressembler à ça : tab[n-1][2]=t1(e,w,a);.

    Tu utilises déjà sin() et cos() dans tes expressions une ligne au dessus. Tes propres fonctions s'invoquent et s'utilisent exactement de la même façon. Il n'y a pas de différences entre les deux.

    Donc, pas de parenthèse autour du nom de la fonction, mais autour des arguments. Et pas de répétition du nom de type car celui-ci ne sert que pour les déclarations.

    Détail important : tes variables sont locales (sauf lorsque tu définis des variables globales mais il ne faut pas les utiliser), ça veut dire qu'elles ne sont visibles que entre le bloc « { } » le plus proche. Les variables « e,w,a » que tu définis dans ton main ne sont pas les mêmes que celles que tu déclares au sein de chacune de tes fonctions t1, t2, t3, etc. Il faut donc les passer explicitement.

    Ça a l'air confus mais ça ne devrait pas l'être puisqu'il faut travailler exactement comme tu en a l'habitude en algèbre et en analyse traditionnelle sur le papier. Pour reprendre le cas du sinus, tu déclarerais cette fonction avec :


    … pour dire que sin(x) est défini dans ℝ ⟼ ℝ, puis tu l'utiliserais normalement en passant un paramètre :


    Il faut donc faire de même avec tes propres fonctions.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    j'ai du mal a comprendre ce que tu veut dire avec les fonctions...

    a vrai dire je comprend pourquoi ce ne sont pas les mêmes variables ...etc, mais Je ne saisie pas bien ce qu'il faut faire malgré l'exemple

    d'ailleur l'execution du programme se stop dés qu'on atteint un moment de calcul...

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par tom250908 Voir le message
    j'ai du mal a comprendre ce que tu veut dire avec les fonctions...
    Ce que je veux dire, c'est que si tu écris correctement sin(n) avec des fonction usuelles sans avoir à y réfléchir, pourquoi t'y prends-tu différemment quand tu appelles tes propres fonctions ?

    a vrai dire je comprend pourquoi ce ne sont pas les mêmes variables ...etc, mais Je ne saisie pas bien ce qu'il faut faire malgré l'exemple
    Imagine que j'écrive deux fonctions qui me calculent respectivement les sommes des entiers de 1 à n et la factorielle de n. Je vais leur passer à chacune un paramètre n et y déclarer en interne un indice de boucle, disons « i », pour faire les calculs, ainsi qu'un accumulateur « total ». Ce qui donne :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    int somme (int n)
    {
        int i,total;
     
        for (i=0,total=0;i<n;i++) total += i;
        return total;
    }
     
    int factorielle (int n)
    {
        int i,total;
     
        for (i=0,total=1;i<n;i++) total *= i;
        return total;
    }

    Ces deux fonctions sont écrites exactement de la même façon et l'algorithme est le même dans les deux cas à l'exception de l'opérateur utilisé (et de la valeur initiale de « total »). Pour autant, les variables « n », « i » et « total » sont bien propres à chaque fonction. Elles ont beau porter le même nom, elles sont propres à chaque contexte.

    C'est important parce que si ce n'était pas le cas, tu serais obligé de faire très attention à ne pas écraser de variables existantes — y compris celles qui ne sont pas déclarées par toi mais par les bibliothèques que tu utilises — et accessoirement… tu ne pourrais pas utiliser de fonctions récursives !

    d'ailleur l'execution du programme se stop dés qu'on atteint un moment de calcul...
    Probablement une segfault mais on verra ça en temps voulu.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Donc comment redéfinir a chaque fois une variable sans écraser la valeur qui sera entrée par l'opérateur ?

    Pour l'instant j'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    	double t0 (double e,double w,double a);				//déclaration de la fonction t sans correction
    	double t1 (double e,double w,double a);				//déclaration de la fonction t avec correction 1
    	double t2 (double e,double w,double a);				//déclaration de la fonction t avec correction 2
    	double t3 (double e,double w,double a);				//déclaration de la fonction t avec correction 3
    	double t4 (double e,double w,double a);				//déclaration de la fonction t avec correction 4
     
    int main()
    {
    	 double a=0;									// rayon de l'orbite
    	 double e=0;									// exentricité
    	 float v=0;										// point de l'orbite d'anomalies vraie
    	 float i=0;										// inclinaison
    	 double w=0;									//
    	 float mu=398600;								// parametre mu définie dans le TP 
    	 float vc=0;									//
    	 double tab[28][5]={0};								// déclaration du tableau des calculs
    	 float la=0;									// latitude
     
    	 float tp=0;									//temp de passage au périgé
    	 int t=0;										//compteur de boucle pour l'affichage du tableau
    	 int n=0;										//nombre de V saisie
     
     
    	 printf("projet modélisation mathématique de la trace d'un satelitte en orbite terrestre\n\n");
    	 printf("veuillez saisir le rayon a de l'orbite \n");
    	 scanf("%f",&a);
    	 printf("veuillez saisir l'exentricite e\n");
    	 scanf("%f",&e);
    	 printf("veuillez saisir l'inclinaison i\n");
    	 scanf("%f",&i);
    	 printf("veuillez saisir le parametre w\n");
    	 scanf("%f",&w);
     
    	 tp=(-sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w)))-e*((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w))));
    	 printf("temp de passage au perigee :%f\n",&tp);
    	 printf("vous pouvez saisir 28 point different de V");
     
    	do
    	{
    		printf("veuillez saisir un point V de l'orbite\n");
    		scanf("%f",&v);
    		n++;
    		tab[n-1][0]=v;								//attribution de V
    		tab[n-1][1]=(3.141592654*v)/180;			//converstion de V en radian
    		vc=acos(-e);								//calcul de Vc
    			if((vc<=tab[n-1][1])||(tab[n-1][1]<=2*(3.141592654)-vc))
    			{
    				tab[n-1][2]=t1(e,w,a)-tp;
    			} else
    				{
    				if(tab[n-1][1]>=2*(3.141592654)-vc)
    				{
    					tab[n-1][2]=t2(e,w,a)-tp;
    				} else
    					{
    					if((-2*(3.141592654)+vc<=tab[n-1][1])||(tab[n-1][1]<=-vc))
    					{
    						tab[n-1][2]=t3(e,w,a)-tp;
    					} else
    						{
    						if(2*(3.141592654)+vc>=tab[n-1][1])
    						{
    							tab[n-1][2]=t4(e,w,a)-tp;
    						} else
    							{
    							if((-vc<=tab[n-1][1])||(tab[n-1][1]<=vc,-vc<=-w,-w<=vc))
    							{
    								tab[n-1][2]=t0(e,w,a)-tp;
    							}
    							}
    						}
    					}
    				}
    		la=pow(sin(sin(w+tab[n-1][0])*sin(i)),-1);					//calcul de la latitude
    		tab[n-1][3]=la;												
    		tab[n-1][4]=pow(sin((tan(la))/(tan(i))),-1);				//calcul de la longitude
        } while(n!=28);													//fin de la boucle à la 28e valeurs
     
     
    	printf("affichage du tableau\n");
        printf("affichage du tableau\nresultats des calculs : \n\n");
        for (t=0; t<28; t++)											//boucle d'affichage des résultats
        {
          printf("point %2d : %f, %f, %f, %f, %f\n",t+1,tab[t][0],tab[t][1],tab[t][2],tab[t][3],tab[t][4]);
        }
    return 0;
    }
     
    double t0(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5];
    	int n;
    	return (sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1]))));
    }
    double t1(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5];
    	int n;
    	return (sqrt(pow(a,3)/mu))*((3.141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t1
    double t2(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5];
    	int n;
    	return (sqrt(pow(a,3)/mu))*(2*(3.141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t2
    double t3 (double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5];
    	int n;
    	return (sqrt(pow(a,3)/mu))*((-3.141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t3
    double t4(double e,double w,double a)
    {
    	float mu=398600;	
    	double tab[28][5];
    	int n;
    	return (sqrt(pow(a,3)/mu))*(-2*(-3.141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))));
    }																	//définition de la fonction t4

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 629
    Points
    23 629
    Par défaut
    Citation Envoyé par tom250908 Voir le message
    Donc comment redéfinir a chaque fois une variable sans écraser la valeur qui sera entrée par l'opérateur ?
    Tu t'embrouilles l'esprit pour rien. Au niveau de la déclaration des variables, ton code est correct pour le moment. Tu trouveras des tutoriels C ici : http://c.developpez.com/cours/

    Fais une recherche avec « variables locales » si tu veux savoir comment ça fonctionne.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    okok merci pour le lien

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Si on enleve les fonction et qu'on integre directement les formules dans les instructions des conditions on obtient un programme plus simple je trouve et qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main()
    {
    	 double a;											// rayon de l'orbite
    	 double e;											// exentricité
    	 float v;											// point de l'orbite d'anomalies vraie
    	 float i;											// inclinaison
    	 double w;											//
    	 float mu=398600;									// parametre mu définie dans le TP 
    	 float vc;											//
    	 double tab[28][5]={0};								// déclaration du tableau des calculs
    	 float la;											// latitude
    	 float tp;											//temp de passage au périgé
    	 int t=0;											//compteur de boucle pour l'affichage du tableau
    	 int n=0;											//nombre de V saisie
     
     
    	 printf("projet modélisation mathématique de la trace d'un satelitte en orbite terrestre\n\n");
    	 printf("veuillez saisir le rayon a de l'orbite \n");
    	 scanf("%f",&a);
    	 printf("veuillez saisir l'exentricite e\n");
    	 scanf("%f",&e);
    	 printf("veuillez saisir l'inclinaison i\n");
    	 scanf("%f",&i);
    	 printf("veuillez saisir le parametre w\n");
    	 scanf("%f",&w);
     
    	 tp=(-sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w)))-e*((sqrt(1-pow(e,2))*sin(-w))/(1+e*cos(-w))));
    	 printf("temp de passage au perigee :%f\n",&tp);
    	 printf("vous pouvez saisir 28 point different de V");
     
    	do
    	{
    		printf("veuillez saisir un point V de l'orbite\n");
    		scanf("%f",&v);
    		n++;
    		tab[n-1][0]=v;								//attribution de V
    		tab[n-1][1]=(3.141592654*v)/180;			//converstion de V en radian
    		vc=acos(-e);								//calcul de Vc
    			if((vc<=tab[n-1][1])||(tab[n-1][1]<=2*(3.141592654)-vc))
    			{
    				tab[n-1][2]=(sqrt(pow(a,3)/mu))*((3.141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))))-tp;
    			} else
    				{
    				if(tab[n-1][1]>=2*(3.141592654)-vc)
    				{
    					tab[n-1][2]=(sqrt(pow(a,3)/mu))*(2*(3.141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))))-tp;
    				} else
    					{
    					if((-2*(3.141592654)+vc<=tab[n-1][1])||(tab[n-1][1]<=-vc))
    					{
    						tab[n-1][2]=(sqrt(pow(a,3)/mu))*((-3.141592654)-(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))))-tp;
    					} else
    						{
    						if(2*(3.141592654)+vc>=tab[n-1][1])
    						{
    							tab[n-1][2]=(sqrt(pow(a,3)/mu))*(-2*(-3.141592654)+(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))))-tp;
    						} else
    							{
    							if((-vc<=tab[n-1][1])||(tab[n-1][1]<=vc,-vc<=-w,-w<=vc))
    							{
    								tab[n-1][2]=(sqrt(pow(a,3)/mu))*(asin((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1])))-e*((sqrt(1-pow(e,2))*sin(tab[n-1][1]))/(1+e*cos(tab[n-1][1]))))-tp;
    							}
    							}
    						}
    					}
    				}
    		la=pow(sin(sin(w+tab[n-1][0])*sin(i)),-1);					//calcul de la latitude
    		tab[n-1][3]=la;												
    		tab[n-1][4]=pow(sin((tan(la))/(tan(i))),-1);				//calcul de la longitude
        } while(n!=28);													//fin de la boucle à la 28e valeurs
     
        printf("affichage du tableau\nresultats des calculs : \n\n");
        for (t=0; t<28; t++)											//boucle d'affichage des résultats
        {
          printf("point %2d : %f, %f, %f, %f, %f\n",t+1,tab[t][0],tab[t][1],tab[t][2],tab[t][3],tab[t][4]);
        }
    return 0;
    }
    mais les résultat sont faux ... il me semble que les valeurs entrées ne sont pas prises en compte ... car le calcul de La et Lo donne les même resultats alors qu'il depande directement des parametres saisies ...

    Je ne voit pas pourquoi il ne saisie pas les valeurs

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modification d'une variable non prise en compte
    Par Zuthos dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/01/2013, 14h19
  2. Variable non prise en compte dans l'url
    Par duffman39 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 20/10/2011, 16h33
  3. variable non prise en compte
    Par oliv27400 dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/11/2010, 09h28
  4. Permissions CACLS variable non prise en compte
    Par Selkurs dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/03/2009, 13h27
  5. Variable non prise en compte dans un formulaire
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2008, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo