Novice en langage C ! HELP! - C - Programmation
Marsh Posté le 13-11-2013 à 19:35:50
lnkjv a écrit : |
Marsh Posté le 15-11-2013 à 18:47:36
lnkjv a écrit : les 4 premières lignes sont les préprocesseurs |
Exact. Ce sont des lignes que le préprocesseur analyse. Le résultat produit un code C qui est rajouté au programme.
Les #include incluent le fichier cité et les #define permettent de remplacer une valeur ou une expression par une chaine mnémotechnique
lnkjv a écrit : puis la 5éme je ne la comprends pas ...Pourquoi des * ? |
Les étoiles ont 2 signification
1) quand elles sont mises dans la définition, cela signifie que la variable servira à stocker une adresse (on appelle cela un "pointeur" )
Exemple:
Code :
|
Ici "toto" est capable de stocker une adresse. Et à cette adresse, il y aura une valeur de type double. Ainsi le compilo saura que s'il doit récupérer la valeur située à cette adresse, il lui faudra alors récupérer aussi les 3 adresses suivantes (car une adresse ne concerne qu'un octet alors qu'un double est stocké sur 4 octets).
2) quand elles sont mises dans des instructions, elles signifient qu'il faut récupérer la valeur située à cette adresse
Exemple:
Code : |
Ici le printf n'affichera pas la valeur située dans toto mais la valeur située à l'adresse contenue dans toto. Et comme il sait que "*toto" est de type "double", il sait qu'il faut utiliser non seulement cette adresse mais aussi les 3 suivantes.
On utilise les pointeurs en paramètres de fonction lorsque la fonction a besoin de modifier la variable originelle ou alors lorsque l'élément que doit recevoir la fonction est trop gros pour être recopié (comme un tableau ou une structure). Dans ce cas on préfère lui passer simplement l'adresse de l'élément en question.
lnkjv a écrit : pourquoi cette ligne n'est pas au début du main avec les autres déclarations ? |
Les déclarations du main ne concernent que les variables utilisées dans la fonction "main()". Ici il s'agit d'une déclaration d'une autre fonction qui sera utilisée plus tard.
Le problème avec le compilo, c'est qu'il lit le code source en séquentiel. Et s'il rencontre un appel de fonction qu'il ne connait pas, il la place alors automatiquement en type "int". Donc lorsque tu appelles "rect()" en ligne 27 qui est de type "double", il lui faut absolument qu'il la connaisse avant. Donc soit on la définit avant (on écrit son code) et dans ce cas la définition tient lieu de déclaration (tu remarqueras une différence entre ces deux termes); soit on la déclare avant (on indique son existence et ses paramètres) et on la code après.
lnkjv a écrit : Je ne comprends pas cette ligne aussi : |
Les variables "b", "a" et "h" sont de type double. Le calcul produira donc un résultat de type "double". Le (long) placé devant permet de transformer ce résultat en résultat de type "long". C'est ce qu'on appelle un "cast" (du verbe "caster" => jouer un rôle). Typiquement si le résultat vaut 3.1416, cela donne alors ensuite 3.
Le "L" placé après le "1" a le même rôle. Il permet de lever l'ambiguïté sur les constantes (1 pourrait aussi être vu comme un short).
On aurait pu aussi écrire (long)1 mais c'est dommage de passer par un cast alors qu'il y a plus simple.
Toutefois, mettre (long) est un peu inutile vu que "N" étant long, le résultat aurait été automatiquement casté.
lnkjv a écrit : et celle la : |
fabs() est une autre fonction définie ailleurs (dans la librairie mathématique je crois). Cette librairie étant liée lors de la compilation, les fonctions qui s'y trouvent sont accessibles lors de l'exécution. Ca permet un travail collaboratif et ne pas réinventer la roue à chaque nouveau programme...
Marsh Posté le 13-11-2013 à 17:50:42
bonjour, excusez moi de vous déranger mais j'ai un gros soucis ! je suis actuellement en master et mon master comporte de l'informatique or je n'en ai jamais fait et me retrouve avec des étudiants en ayant fait depuis 3 ans. Le prof ne prend donc pas le temps de m'expliquer le fonctionnement de ce langage et j'avoue que je galère pas mal...
j'essaye de lire des livres ou d'aller sur des sites comme celui ci pour essayer d'apprendre un tel langage mais ce n'est pas facile...
j'en viens au but. voici un programme que mon professeur nous a donné qui est pour calculer l'intégrale exp x entre 2 bornes a et b en prenant un pas h (méthode des rectangles si je ne m'abuse) bref voila ce qu'il nous a donné comme code
mon problème est le suivant : je ne comprends pas grand chose a ce code ...
les 4 premières lignes sont les préprocesseurs puis la 5éme je ne la comprends pas ...Pourquoi des * ? pourquoi cette ligne n'est pas au début du main avec les autres déclarations ?
Je ne comprends pas cette ligne aussi :
N=1L+(long)( (b-a)/h )
et celle la :
Er=100.0*fabs( (A-Ath)/Ath
Pouvez vous m'aider ? D'avance merci
Cordialement
Message édité par gilou le 13-11-2013 à 21:42:22