aide debutante programmation en c

aide debutante programmation en c - C - Programmation

Marsh Posté le 01-03-2007 à 14:29:52    

Rebonjour,
J'ai un autre petit soucis cette fois avec la programmation en c
 
Je vous explique mon soucis
 
J'ai deux fichiers
Un où j'ai pleins de paramètres repartis en colonnes
 
et l'autre où je voudrais lui demander de lui une ligne de l'autre fichier or je ne sais pas comment lui faire comprendre
 
voici mon premier fichier "dipole.vec" avec par colonne la lat_d,lon_d,prof_d,M,I,D (crée sous xemacs)
 
0 0 40 5 90 0
0 0 40 5 60 0
0 0 40 5 30 0
 
 
et j'amerais le lire (par lignes)  dans fin quand je rentre mes diférents parametres "calcul_champ_mag_exe. <fin>...."
 
et voici mon code en c
//*Calcul_champ_mag1.exe*/
/*on va entrer plusieurs parametres afin de calculer le champ magnetique */
/*dans ce fichier on calcule Mr_d,Mt_d et Mp_d a partir de I et D*/
 
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <malloc.h>
 
#define M_PI   3.14159265358979323846
#define PI_180 (M_PI / 180.0)
#define rp 3393.5
 
 
#define READl1 "% % % %lf %lf %lf\n"
#define WRITEl2 "% % % %13.9lf %13.9lf %13.9lf\n"
 
 
 
int main(argc, argv)
int argc;
char *argv[];
{
    FILE   *fout, *f, *fin;
    int row;
    double M, I, D;
    double r, theta, phi;   //*parametres d'observation */
    double alt, lat, lon;
    double lat_min, lat_max;
    double lon_min, lon_max;
    double r_d, theta_d, phi_d;  //*parametres du dipole */
    double prof_d, lat_d, lon_d;
    double Mr_d, Mt_d ,Mp_d;
    double l;
    double A1, A2, A3;
    double B1, B2, B3;
    double C1, C2, C3;
    double F1, F2, F3;
    double Br, Btheta, Bphi;
    double x;
    double resol;
    int i;
    double D1,D2,D3;
    double prod1, prod2, prod3;
    double prod11, prod21, prod31;
    double prod111,prod211, prod311;
    double F;
    double inc;
    double l3;
 
    printf("############################################################\n" );
    printf("Calcul_champ_mag.exe\n\n" );
    /*printf("\tEntrez les parametres necessaires :\n" );*/
if(argc!=15 )
    {
    prinf("erreur nombre de parametres\n" );
    exit(-1);
    }
    printf("Calcul_champ_mag.exe <fin> <lat_min> <lat_max> <lon_min> <lon_max> <alt> <inc> <fout> \n" );
    /* lire les inputs */
 
 
    fin= fopen(argv [1],"r" );
 
for (i=0;i<row;i++)
      {
        fscanf(fin, READl,
               &lat_d,&lon_d,&prof_d,&M,&I,&D);
    }
 
    lat_min = atof(argv[2]);
 
    lat_max = atof(argv[3]);
 
    lon_min=atof(argv[4]);
 
    lon_max=atof(argv[5]);
 
    alt=atof(argv[6]);
 
    inc = atof(argv[7]);
 
    fout = fopen(argv[8],"w" );
   
 
if(fout==NULL)
    {
    return 0;
    }
 
 
 
 
 
/*modification pour avoir des degres --- a changer*/
/*lat_d = 90.-thetad/PI_180;*/
/*lon_d = phid/PI_180;*/
/*prof_d = rd - rp;*/
   
       
    theta_d = (90.-lat_d)*PI_180;
    phi_d = (lon_d)*PI_180;
    r_d = rp-prof_d;
 
/*calcul de Mr_d, Mt_d,Mp_d dont les resultats seront ecrits dans un autre fichier */
 
I_rad=I*PI_180
D_rad=D*PI_180
 
Mr_d=M*sin(I_rad);
Mt_d=M*cos(I_rad)*cos(D_rad);
Mp_d=M*cos(I_rad)*sin(D_rad);
 
 
/* calcul  */
    for (lat=lat_min+(inc/2); lat<lat_max+(inc/2); lat += inc)
        for(lon=lon_min+(inc/2); lon<lon_max+(inc/2); lon +=inc)
      {
       
        theta = (90.-lat)*PI_180;
        phi = lon*PI_180;
        r = alt+rp;
   
 
   
/* calcul des parametres A*/
 
    A1=cos(theta)*cos(theta_d)+sin(theta)*sin(theta_d)*cos(phi-phi_d);
    A2=-sin(theta)*cos(theta_d)+cos(theta)*sin(theta_d)*cos(phi-phi_d);
    A3=-sin(theta_d)*sin(phi-phi_d);
 
/*calcul des parametres B*/
 
    B1=cos(theta)*sin(theta_d)-sin(theta)*cos(theta_d)*cos(phi-phi_d);
    B2=-sin(theta)*sin(theta_d)-cos(theta)*cos(theta_d)*cos(phi-phi_d);
    B3=cos(theta_d)*sin(phi-phi_d);
 
/*calcul des parametres C*/
 
    C1=sin(theta)*sin(phi-phi_d);
    C2=cos(theta)*sin(phi-phi_d);
    C3=cos(phi-phi_d);
 
/*calcul de l*/
    x=acos(cos(theta)*cos(theta_d)+sin(theta)*sin(theta_d)*cos(phi-phi_d));
    l=sqrt((r_d*r_d)+(r*r)-2*r_d*r*cos(x));
 
/*calcul des parametres D*/
    D1=r-r_d*A1;
    D2=-r_d*A2;
    D3=-r_d*A3;
 
/*calcul des parametres F*/
    F1=r*A1-r_d;
    F2=-r*B1;
    F3=r*C1;
 
/*calcul prod1 prod2 prod3 pour Br*/
    prod1=((3*D1*F1)/(l*l))-A1;
    prod2=((3*D1*F2)/(l*l))+B1;
    prod3=((3*D1*F3)/(l*l))-C1;
 
/*calcul prod11 prod21 prod31 pour Btheta*/
    prod11=((3*D2*F1)/(l*l))-A2;
    prod21=((3*D2*F2)/(l*l))+B2;
    prod31=((3*D2*F3)/(l*l))-C2;
 
/*calcul prod111 prod211 prod311 pour Bphi*/
    prod111=((3*D3*F1)/(l*l))-A3;
    prod211=((3*D3*F2)/(l*l))+B3;
    prod311=((3*D3*F3)/(l*l))-C3;
 
 
/*Calcul des composantes du champ magnetique en nanotesla*/
    l3=l*l*l;
    Br=(Mr_d*(prod1/(l3))+Mt_d*(prod2/(l3))+Mp_d*(prod3/(l3)))*1000000000.;
    Btheta=(Mr_d*(prod11/(l3))+Mt_d*(prod21/(l3))+Mp_d*(prod31/(l3)))*1000000000.;
    Bphi=(Mr_d*(prod111/(l3))+Mt_d*(prod211/(l3))+Mp_d*(prod311/(l3)))*1000000000.;
 
/*calcul du champ*/
 
    /* sortie vers fichier */
   
    fprintf(fout, WRITEl2,lat,lon,alt,Mr_d,Mt_d,Mp_d,Br,Btheta,Bphi);
    }
fclose(fout);
fclose(fin);
}
 
 
je vous remercie

Reply

Marsh Posté le 01-03-2007 à 14:29:52   

Reply

Marsh Posté le 01-03-2007 à 14:43:46    

quel est le problème / la question ?


---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 14:50:31    

Citation :

int main(argc, argv)
int argc;
char *argv[];
{
    FILE   *fout, *f, *fin;
    int row;
    double M, I, D;
    double r, theta, phi;   //*parametres d'observation */
    double alt, lat, lon;
    double lat_min, lat_max;
    double lon_min, lon_max;
    double r_d, theta_d, phi_d;  //*parametres du dipole */
    double prof_d, lat_d, lon_d;
    double Mr_d, Mt_d ,Mp_d;
    double l;
    double A1, A2, A3;
    double B1, B2, B3;
    double C1, C2, C3;
    double F1, F2, F3;
    double Br, Btheta, Bphi;
    double x;
    double resol;
    int i;
    double D1,D2,D3;
    double prod1, prod2, prod3;
    double prod11, prod21, prod31;
    double prod111,prod211, prod311;
    double F;
    double inc;
    double l3;
 



 
[:ciler]

Reply

Marsh Posté le 01-03-2007 à 14:52:16    

Ben j'aimerais lire  ligne par ligne le fichier crée sous xemacs dans mon code c  et je sais pas comment faire pour lui dire  
 
Dans fin, quand je rentre le nom de mon fichier dans mon code "calcul_champ"qui me lui la premiere ligne et op ça me cree un fichier correspondant à cette ligne et ainsi de suite pour chaque ligne

Reply

Marsh Posté le 01-03-2007 à 14:58:59    

laroche14 a écrit :

Ben j'aimerais lire  ligne par ligne le fichier crée sous xemacs dans mon code c  et je sais pas comment faire pour lui dire  
 
Dans fin, quand je rentre le nom de mon fichier dans mon code "calcul_champ"qui me lui la premiere ligne et op ça me cree un fichier correspondant à cette ligne et ainsi de suite pour chaque ligne


Vazy fait un effort et corrige, ca veut dire:
- grammaire,
- orthographe,
- ponctuation.
 
Franchement je comprends rien à ta requête:

Citation :

qui me lui la premiere ligne



---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 15:07:37    

Il y a tellement de choses à corriger dans ce bout de code que je ne sais même pas par où commencer : définition de fonction non ANSI, liste interminable de variables dont certaines ne semblent là que pour émuler des tableaux, code commenté donc inutile, indentation aléatoire, des macros de toute beauté, des scanf(), utilisation de variables non initialisées, magic numbers, main() sans code retour, aucune fonction...

 

A ce stade je ne recommande plus qu'une chose : se rendre sur amazon.fr ou dans une librairie spécialisée, se procurer le livre "Le Langage C" de Kernighan&Ritchie, et commencer à le potasser avant d'écrire une seule ligne supplémentaire de code.
A la place du livre il y a aussi d'excellents tutoriaux sur le net.


Message édité par Elmoricq le 01-03-2007 à 15:12:15
Reply

Marsh Posté le 01-03-2007 à 15:08:59    

Ben dslée ,
 
'aimerais donc lire  ligne par ligne le fichier ( crée sous xemacs) dans mon code c  et je ne sais pas comment faire pour lui dire .
 
Dans <fin>,  dans mon code "calcul_champ" j'aimerais qu'il comprenne que je ne veux que la premiere ligne et à la fin qu'il me crée un fichier correspondant à cette ligne et ainsi de suite pour chaque ligne.
 
C'est plus compréhensible?

Reply

Marsh Posté le 01-03-2007 à 15:09:45    

laroche14 a écrit :

Ben dslée ,
 
'aimerais donc lire  ligne par ligne le fichier ( crée sous xemacs) dans mon code c  et je ne sais pas comment faire pour lui dire .
 
Dans <fin>,  dans mon code "calcul_champ" j'aimerais qu'il comprenne que je ne veux que la premiere ligne et à la fin qu'il me crée un fichier correspondant à cette ligne et ainsi de suite pour chaque ligne.
 
C'est plus compréhensible?


Oui déjà, même s'il te manque toujours des lettres.
C'est dingue, tu le vois pas ?


---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 15:10:17    

(et sinon Elmoriq réponds aux questions que tu te poses).


---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 15:10:48    

Reponse à ELmoricp,  
Mes variables sont toutes utilisées dans mes calculs, c'est pas de ma faute si mes calculs sont très longs! lol
 

Reply

Marsh Posté le 01-03-2007 à 15:10:48   

Reply

Marsh Posté le 01-03-2007 à 15:11:19    

C'est bon merci de votre aide....

Reply

Marsh Posté le 01-03-2007 à 15:12:47    

laroche14 a écrit :

Reponse à ELmoricp,  
Mes variables sont toutes utilisées dans mes calculs, c'est pas de ma faute si mes calculs sont très longs! lol


non, pas lol
 
Regarde par exemple "row" que tu utilises alors que, potentiellement, son contenu est aléatoire.

Reply

Marsh Posté le 01-03-2007 à 15:13:38    

Bon et ton code là, il réagit comment ?
Il se passe quoi concrètement ?
Un debugger tu sais ce que c'est ?


---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 15:14:15    

ben justement j'ai mis row car je pense que c'est la clé de mon truc et qu'il faut que je m'en serve

Reply

Marsh Posté le 01-03-2007 à 15:14:21    

laroche14 a écrit :

C'est bon merci de votre aide....


 
Très, très franchement, tu ne peux pas continuer comme cela avec ton niveau de connaissance actuel.
Il te faut lire des cours, parce que là, la seule direction que tu prends, c'est le mur.
 
Tu peux commencer par là, par exemple : http://mapage.noos.fr/emdel
 
Il y a d'autres liens sur le net, et des livres aussi.

Reply

Marsh Posté le 01-03-2007 à 15:15:52    

laroche14 a écrit :

ben justement j'ai mis row car je pense que c'est la clé de mon truc et qu'il faut que je m'en serve

 

Tu programmes au hasard.

 

D'ailleurs, ton compilateur devrait te le dire, voici ce que ça donne chez moi avec un copier-coller de ton code :

taiste.c: In function `main':
taiste.c:56: warning: implicit declaration of function `prinf'
taiste.c:67: error: `READl' undeclared (first use in this function)
taiste.c:67: error: (Each undeclared identifier is reported only once
taiste.c:67: error: for each function it appears in.)
taiste.c:107: error: `I_rad' undeclared (first use in this function)
taiste.c:108: error: parse error before "D_rad"
taiste.c:111: error: `D_rad' undeclared (first use in this function)
taiste.c:184: warning: conversion lacks type at end of format
taiste.c:184: warning: conversion lacks type at end of format
taiste.c:184: warning: conversion lacks type at end of format
taiste.c:184: warning: too many arguments for format
taiste.c:24: warning: unused variable `f'
taiste.c:41: warning: unused variable `resol'
taiste.c:47: warning: unused variable `F'

 

edit : tiens c'est marrant, il signale pas l'emploi des variables non initialisées [:pingouino]


Message édité par Elmoricq le 01-03-2007 à 15:20:14
Reply

Marsh Posté le 01-03-2007 à 15:20:11    

Normal pour read , il faut le fichier de données  
I_rad et D_rad aussi car j'ai pas fini de voir comment je pouvais les modifier et je les ai pas déclaré mais c'est pas le sujet ici ..;et le reste je les ai pas encore enlevé car je suis en train de tout modifier!! desolée je suis pas une pro de la programmation!!  

Reply

Marsh Posté le 01-03-2007 à 15:21:05    

Je programme pas au hasard aussi, j'apprends sur le tas car j'ai pas le temps autrement, j'ai un programme à réaliser pour calculer le champ magnétique de Mars avec les données de la NASA

Message cité 1 fois
Message édité par laroche14 le 01-03-2007 à 15:22:49
Reply

Marsh Posté le 01-03-2007 à 15:22:27    

laroche14 a écrit :

Normal pour read , il faut le fichier de données  
I_rad et D_rad aussi car j'ai pas fini de voir comment je pouvais les modifier et je les ai pas déclaré mais c'est pas le sujet ici ..;et le reste je les ai pas encore enlevé car je suis en train de tout modifier!! desolée je suis pas une pro de la programmation!!


 
Tu confonds variables et données !


---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 15:23:25    

laroche14 a écrit :

Je programme pas au hasard aussi, j'apprends sur le tas car j'ai pas le temps autrement, j'ai un programme à réaliser pour calculer le champ magnétique de Mars avec les données de la NASA


Imagine que si tu te trompes, tes résultats seront faux, et tu ne le remarqueras peut-être même pas au début.

 

On ne dit pas ça juste pour des questions esthétiques, ni pour jouer aux cadors (personnellement je m'en moque :o), mais parce que ce que tu as écrit est potentiellement faux.


Message édité par Elmoricq le 01-03-2007 à 15:24:49
Reply

Marsh Posté le 01-03-2007 à 15:23:29    

peut etre
 allez  j'en ai marre de me justifier ,je dois travailler
Merci de votre aide

Reply

Marsh Posté le 01-03-2007 à 15:24:49    

magnifique C K&R.
 
C'est quoi qui marche pas ? Quel est le problème à l'exécution ?

Reply

Marsh Posté le 01-03-2007 à 15:25:29    

Mais non reviens !
On t'as meme pas parlé des balises code !


---------------
Töp of the plöp
Reply

Marsh Posté le 01-03-2007 à 15:26:24    

Si vraiment tu veux continuer sur cette voie, alors pour lire ton fichier renseigne-toi sur les fonctions fopen()/fclose()/fgets() pour commencer.
 
Mais, vraiment, je te conseille de te documenter avant de continuer ce code. Tu ne sembles pas t'en rendre compte, mais au final tu gagnerais du temps. Beaucoup.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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