Operatins mathematiqus en C
Résolu/Fermé
Censured_51
Messages postés
304
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
10 mars 2010
-
13 juin 2009 à 17:03
Censured_51 Messages postés 304 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 10 mars 2010 - 19 juin 2009 à 10:36
Censured_51 Messages postés 304 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 10 mars 2010 - 19 juin 2009 à 10:36
10 réponses
Utilisateur anonyme
13 juin 2009 à 17:41
13 juin 2009 à 17:41
Salut, essaies cela
J'ai enlever le ".0" au "7" du modulo. Et j'ai déclaré les variables avants (plus net je trouve, mais tu fais comme tu veut...)
Au fait : Pour le modulo, il existe une autre méthode
La fonction "fmod" de la librairie "math.h"
Syntaxe : fmod(premier_nombre,deuxieme_nombre);
Ton programme avec fmod :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
@+
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { long age=0; int resultat=0, resultat02=0, resultat0201=0; printf("Quel age as tu ?\t"); scanf("%ld",&age); printf("\nAlors tu as %ld ans !!\n",age); resultat = age + 3; printf("Si j'addtionne ton age avec 3, ca donne : %ld\n", resultat); resultat02 = resultat / 7; resultat0201 = resultat % 7; printf("En divisant le nombre trouve par 7 j'obtiens %lf et si il y a un reste il est egale a %ld\n\n", resultat02, resultat0201); system("PAUSE"); return 0; }
J'ai enlever le ".0" au "7" du modulo. Et j'ai déclaré les variables avants (plus net je trouve, mais tu fais comme tu veut...)
Au fait : Pour le modulo, il existe une autre méthode
La fonction "fmod" de la librairie "math.h"
Syntaxe : fmod(premier_nombre,deuxieme_nombre);
Ton programme avec fmod :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[]) { long age=0; int resultat=0, resultat02=0, resultat0201=0; printf("Quel age as tu ?\t"); scanf("%ld",&age); printf("\nAlors tu as %ld ans !!\n",age); resultat = age + 3; printf("Si j'addtionne ton age avec 3, ca donne : %ld\n", resultat); resultat02 = resultat / 7; resultat0201 = fmod(resultat,7); printf("En divisant le nombre trouve par 7 j'obtiens %lf et si il y a un reste il est egale a %ld\n\n", resultat02, resultat0201); system("PAUSE"); return 0; }
@+
poukkid
Messages postés
106
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
11 avril 2012
11
13 juin 2009 à 17:42
13 juin 2009 à 17:42
mmm, ca m'étonnerait que modulo accepte un réel.
remplace par
int resultat0201 = resultat % 7;
(j'arrive un peu tard on dirait)
remplace par
int resultat0201 = resultat % 7;
(j'arrive un peu tard on dirait)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 juin 2009 à 17:52
13 juin 2009 à 17:52
Salut,
Pas de double dans un modulo.
C'est une opération définie pour les entiers. Donc int resultat02 = resultat / 7;
Sinon, tu mélanges un peu les types.
printf("En divisant le nombre trouve par 7 j'obtiens %lf et si il y a un reste il est egale a %ld\n\n", resultat02, resultat0201);
resultat02 est un int et non un double. De plus dans printf, on utilise %f pour afficher un double (et non %lf).
resultat0201 est un int, donc ne l'affiche pas en tant que long int (ld).
Cdlt
Pas de double dans un modulo.
C'est une opération définie pour les entiers. Donc int resultat02 = resultat / 7;
Sinon, tu mélanges un peu les types.
printf("En divisant le nombre trouve par 7 j'obtiens %lf et si il y a un reste il est egale a %ld\n\n", resultat02, resultat0201);
resultat02 est un int et non un double. De plus dans printf, on utilise %f pour afficher un double (et non %lf).
resultat0201 est un int, donc ne l'affiche pas en tant que long int (ld).
Cdlt
Censured_51
Messages postés
304
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
10 mars 2010
25
13 juin 2009 à 18:32
13 juin 2009 à 18:32
Merci a toi fiddy mais avant tout saches que je débutes ; j'ai commencé aujourd'hui...
En tout cas merci de ta réponse et bonne soirée
En tout cas merci de ta réponse et bonne soirée
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
14 juin 2009 à 02:19
14 juin 2009 à 02:19
J'ajouterais pour compléter ce que dit fiddy qu'en C les variables sont sensées être déclarées en début de bloc (par exemple au début d'une fonction). Dans ton cas ça marche parce que tu utilises un compilateur C++ sans le savoir (et dans ce cas là autant tirer parti des possibilités du C++, comme par exemple les flux au lieu des printf/scanf).
Idéalement tu devrais contrôler que ton scanf est parvenu à lire avec succès la valeur saisie par l'utilisateur (s'il n'a pas écrit un nombre ou une valeur négative, c'est l'échec).
Dans ton programme tu n'utilises ni argc ni arv donc tu devrais normalement utiliser :
Enfin, l'instruction system("PAUSE") est à proscrire. Je me demande toujours qui inculque au débutant cette instruction qui me fait littéralement voir rouge : elle n'est pas portable (comprendre ça ne marche que sous windows) et elle peut être remplacée par un getchar() qui lui est portable !
Bonne chance
Idéalement tu devrais contrôler que ton scanf est parvenu à lire avec succès la valeur saisie par l'utilisateur (s'il n'a pas écrit un nombre ou une valeur négative, c'est l'échec).
Dans ton programme tu n'utilises ni argc ni arv donc tu devrais normalement utiliser :
int main(){ //.... return 0; }
Enfin, l'instruction system("PAUSE") est à proscrire. Je me demande toujours qui inculque au débutant cette instruction qui me fait littéralement voir rouge : elle n'est pas portable (comprendre ça ne marche que sous windows) et elle peut être remplacée par un getchar() qui lui est portable !
int main(){ //.... getchar(); return 0; }
Bonne chance
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
14 juin 2009 à 12:52
14 juin 2009 à 12:52
Salut
Eh non, même en C on peut déclarer des instructions en milieu de code avec la norme C99. Après c'est une question de préférence.
Pour le system ce sont certains IDE sous windows qui le mettent. Mais c'est vrai que le getchar est mieux. Mais dans ce cas faut faire attention a bien vider le buffer clavier.
D'ailleurs en parlant de bonne habitude, je tiens a préciser qu'en C il faut mettre void en arguments pour spécifier que le prototype n'admet pas d'arguments. Sinon la fonction n'est pas correctement définie. En C++ ce n'est pas le cas.
Cdlt
Eh non, même en C on peut déclarer des instructions en milieu de code avec la norme C99. Après c'est une question de préférence.
Pour le system ce sont certains IDE sous windows qui le mettent. Mais c'est vrai que le getchar est mieux. Mais dans ce cas faut faire attention a bien vider le buffer clavier.
D'ailleurs en parlant de bonne habitude, je tiens a préciser qu'en C il faut mettre void en arguments pour spécifier que le prototype n'admet pas d'arguments. Sinon la fonction n'est pas correctement définie. En C++ ce n'est pas le cas.
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
14 juin 2009 à 14:04
14 juin 2009 à 14:04
Hello fiddy,
Eh non, même en C on peut déclarer des instructions en milieu de code avec la norme C99. Après c'est une question de préférence.
Effectivement ça a changé. Dans le temps on ne pouvait pas.
Pour le system ce sont certains IDE sous windows qui le mettent. Mais c'est vrai que le getchar est mieux. Mais dans ce cas faut faire attention a bien vider le buffer clavier.
Ok (pour les deux points).
D'ailleurs en parlant de bonne habitude, je tiens a préciser qu'en C il faut mettre void en arguments pour spécifier que le prototype n'admet pas d'arguments. Sinon la fonction n'est pas correctement définie.
Personnellement je n'ai jamais eu de problème de ce genre. Ça se produit dans quel cas ?
Eh non, même en C on peut déclarer des instructions en milieu de code avec la norme C99. Après c'est une question de préférence.
Effectivement ça a changé. Dans le temps on ne pouvait pas.
Pour le system ce sont certains IDE sous windows qui le mettent. Mais c'est vrai que le getchar est mieux. Mais dans ce cas faut faire attention a bien vider le buffer clavier.
Ok (pour les deux points).
D'ailleurs en parlant de bonne habitude, je tiens a préciser qu'en C il faut mettre void en arguments pour spécifier que le prototype n'admet pas d'arguments. Sinon la fonction n'est pas correctement définie.
Personnellement je n'ai jamais eu de problème de ce genre. Ça se produit dans quel cas ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
14 juin 2009 à 19:53
14 juin 2009 à 19:53
Personnellement je n'ai jamais eu de problème de ce genre. Ça se produit dans quel cas ?
Ce n'est pas un gros problème en soi, juste une bonne habitude. Par exemple, si tu définis une fonction avec le prototype "void toto(int a)", si tu l'appelles par "toto();", le compilateur va te le signaler puisque le prototype aura été défini. Si par contre tu déclares la fonction par "void toto()", et que tu l'appelles par "toto(5)", le compilateur dira rien. Ce qui s'explique par le fait que le prototype n'est pas clairement défini.
D'où l'intérêt d'utiliser "void toto(void)".
Ce n'est pas un gros problème en soi, juste une bonne habitude. Par exemple, si tu définis une fonction avec le prototype "void toto(int a)", si tu l'appelles par "toto();", le compilateur va te le signaler puisque le prototype aura été défini. Si par contre tu déclares la fonction par "void toto()", et que tu l'appelles par "toto(5)", le compilateur dira rien. Ce qui s'explique par le fait que le prototype n'est pas clairement défini.
D'où l'intérêt d'utiliser "void toto(void)".
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
14 juin 2009 à 20:09
14 juin 2009 à 20:09
Ok je ne savais pas. Apparemment quand ta fonction est déclarée avec ( ) tu peux lui passer un nombre quelconque d'arguments qui seront ignorés. Drôle de choix mais pourquoi pas...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
14 juin 2009 à 20:35
14 juin 2009 à 20:35
Apparemment quand ta fonction est déclarée avec ( ) tu peux lui passer un nombre quelconque d'arguments qui seront ignorés.
C'est normal car "void toto()" n'est pas qu'une déclaration de toto ne renvoyant pas de variable, mais ce n'est pas un prototype. Pour que le prototype soit donné, il faut spécifier le type de l'argument.
En C, il faut déclarer les fonctions avec leur prototype pour programmer proprement. D'autant plus que l'après C99 mettra normalement un message d'erreur lorsque le prototype ne sera pas donné.
C'est normal car "void toto()" n'est pas qu'une déclaration de toto ne renvoyant pas de variable, mais ce n'est pas un prototype. Pour que le prototype soit donné, il faut spécifier le type de l'argument.
En C, il faut déclarer les fonctions avec leur prototype pour programmer proprement. D'autant plus que l'après C99 mettra normalement un message d'erreur lorsque le prototype ne sera pas donné.
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
14 juin 2009 à 23:26
14 juin 2009 à 23:26
Ok... Dommage pour tous les gens qui n'ont pas mis les void :s
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
15 juin 2009 à 20:52
15 juin 2009 à 20:52
T'inquiète, il y aura toujours la possibilité de compiler dans les normes précédentes comme c'est le cas actuellement ;-))).
Censured_51
Messages postés
304
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
10 mars 2010
25
19 juin 2009 à 10:36
19 juin 2009 à 10:36
Merci les gars je pense avoir compris mes erreurs.