aide debutante programmation en c - C - Programmation
Marsh Posté le 01-03-2007 à 14:43:46
ReplyMarsh Posté le 01-03-2007 à 14:50:31
Citation :
|
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
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 |
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 |
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.
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?
Marsh Posté le 01-03-2007 à 15:09:45
laroche14 a écrit : Ben dslée , |
Oui déjà, même s'il te manque toujours des lettres.
C'est dingue, tu le vois pas ?
Marsh Posté le 01-03-2007 à 15:10:17
ReplyMarsh 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
Marsh Posté le 01-03-2007 à 15:12:47
laroche14 a écrit : Reponse à ELmoricp, |
non, pas lol
Regarde par exemple "row" que tu utilises alors que, potentiellement, son contenu est aléatoire.
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 ?
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
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.
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': |
edit : tiens c'est marrant, il signale pas l'emploi des variables non initialisées
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!!
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
Marsh Posté le 01-03-2007 à 15:22:27
laroche14 a écrit : Normal pour read , il faut le fichier de données |
Tu confonds variables et données !
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 ), mais parce que ce que tu as écrit est potentiellement faux.
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
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 ?
Marsh Posté le 01-03-2007 à 15:25:29
ReplyMarsh 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.
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