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 :

Calculatrice Scientifique en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 66
    Par défaut Calculatrice Scientifique en C
    Bonjour tout le monde,

    Je travaille sur l'écriture d'une calculatrice simple fonctionnant de la manière suivante :

    - Je déclare PI comme une constante
    - Je souhaite que les 4 opérations élémentaire sur entier soit dans unique fichier source et que les 4 opération élémentaire sur flottant soit dans un autre fichier source
    - enfin les 2 opération racine carré et puissance seront toute deux dans un autre fichier source

    Mon problème se situe au niveau des opération sur entier et sur flottant car je n'arrive pas à trouver une méthode me permettant de tester l'entrée clavier pour savoir de quel type de donnée il s'agit.

    Voici mon avancement actuel :
    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
    // programme d'une calculatrice scientifique
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //#include <int_op.h>
    //#include <float_op.h>
    //#include <others_op.h>
     
    #define PI 3.1415
     
    void typtest(int,float,char *);
    long nb =0;
     
    int main(void)
    {
     
    long op,nb1 = 0,nb2 = 0,resultat = 0;
    int i = 0; float x = 0; char pi[3];
    	printf("Calculatrice Scientifique\n\n\r");
    	printf("Choisissez l'operation a effectuer:\n\n");
    		printf("1.Addition:\n");
    		printf("2.Soustraction:\n");
    		printf("3.Multiplication:\n");
    		printf("4.Division:\n");
    		printf("5.racine carre de :\n");
    		printf("6.Puissance :\n");
    		scanf("%ld",&op);
     
    		switch(op)
    		{
    		case 1:
    			printf("Entrez le premier nombre:\n\r");
    			printf("Pour  PI(= 3.1415) taper : pi \n\r");
    			scanf("%d%f%*s",&i,&x,&pi);
    			typtest(i,x,pi);
     
    			printf("Entrez le deuxieme nombre:\n\r");
    			printf("Pour  PI(=3.1415) taper : 2\n\r");
    			scanf("%d%f%*s",&i,&x,&pi);
    			typtest(i,x,pi);
     
    				break;
    		case 2:
    			printf("Entrez le premier nombre:\n\r");
    			scanf("%ld",&nb1);
    			printf("Entrez le deuxieme nombre:\n\r");
    			scanf("%ld",&nb2);
     
    			resultat = nb1 - nb2;
    			printf("%ld - %ld = %ld \n\r",nb1,nb2,resultat);
    				break;
    		case 3:
    			printf("Entrez le premier nombre:\n\r");
    			scanf("%ld",&nb1);
    			printf("Entrez le deuxieme nombre:\n\r");
    			scanf("%ld",&nb2);
     
    			resultat = nb1 * nb2;
    			printf("%ld * %ld = %ld \n\r",nb1,nb2,resultat);
    				break;
    		case 4:
    			printf("Entrez le premier nombre:\n\r");
    			scanf("%ld",&nb1);
    			printf("Entrez le deuxieme nombre:\n\r");
    			scanf("%ld",&nb2);
     
    			resultat = nb1 / nb2;
    			printf("%ld / %ld = %ld \n\r",nb1,nb2,resultat);
    				break;
    		}
    		return 0;
    }
     
    void typtest(int a, float b,char *c)
    {	
     
     	if(a !=0 ){
    	 	printf("nombre entier : %d\n",a);
    	 	return(nb = a);
    	 	}
     
    	else if(b != 0){
    	 	printf("nombre flottant : %f\n",b);
    	 	return (nb = b);
    	 	}
     
    	else if(c != 0){
    		printf("pi(3.1415)");
    		nb = 3.1415;
    		return (nb = 3.1415);
    		}
     
    }
    A la compilation j'ai 5 warning :

    calc_scientifique.c: In function ‘main’:
    calc_scientifique.c:35: warning: too many arguments for format
    calc_scientifique.c:40: warning: too many arguments for format
    calc_scientifique.c: In function ‘typtest’:
    calc_scientifique.c:80: warning: ‘return’ with a value, in function returning void
    calc_scientifique.c:85: warning: ‘return’ with a value, in function returning void
    calc_scientifique.c:91: warning: ‘return’ with a value, in function returning void


    Pourriez vous me guidez sur une piste éventuel ?
    Merci
    Cordialement.

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Il faut voir ce que tu as mis dans tes scanf. Le formateur %s sert à récupérer une chaîne de caractères, mais l'étoile sert à sauter le formateur qui suit.
    Par exemple, ce code ne récupèrera que le 1er et le 3ème nombre saisi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
      int a, b;
      scanf("%d%*d%d", &a, &b);
      printf("%d %d", a, b);
      return EXIT_SUCCESS;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 66
    Par défaut
    Je pensait récupérer la chaine de caractère "pi" taper sur le clavier, en claire ce que je souhaite réaliser c'est :

    1) tester la saisie pour savoir de quel type de donnée il s'agit
    2) ouvrir le fichier source correspondant à l'opération a effectuer
    3) effectuer l'opération et l'afficher

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par makia42 Voir le message
    2) ouvrir le fichier source correspondant à l'opération a effectuer
    Quel fichier source ? De quoi tu parles ? Qu'est donc sensé contenir ce fichier si je choisis "1 - Addition" ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 66
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Quel fichier source ? De quoi tu parles ? Qu'est donc sensé contenir ce fichier si je choisis "1 - Addition" ???
    Salut,

    Je parle du fichier qui contiendra les opérations en fonction du type de donnée( entier ou flottant) comme j'ai précisé dans mon premier post , je veux en faite réaliser plusieurs fichier ".h" pour les opérations.

    Si tu choisis 1 et que la donnée est un entier par exemple , le fichier "int_op.h" contiendra les opérations sur des entier simples.

    Si tu choisis 1 et que tu rentre une valeur décimale alors le fichier "flot_op.h" se chargera d'effectuer l'opération car il contient les opérations sur flottant.

    Voila, j’espère me faire comprendre ^^?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    euh... tu ne vas pas tout recompiler à chaque fois que tu veux changer de type de données ?

    Il te suffit de faire des fonctions, les unes pour gérer les entiers, les autres pour gérer les nombres à virgule.

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 530
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 530
    Par défaut
    Citation Envoyé par makia42 Voir le message
    printf("pi(3.1415)");
    nb = 3.1415;
    return (nb = 3.1415);
    nb retournera toujours 3.1415 !!!
    tu affectes cette valeur une ligne avant !
    Il suffit de déclarer return (nb);


    En plus c'est une erreur ; si tu veux retourner un résultat soit vrai soit faux selon un test il faut déclarer return ( a==b)
    Comme c'est déclaré ici tu affectes 3.14 à nb ce qui est toujours vrai

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ça s'appelle la notation polonaise et, oui, beaucoup de calculateurs utilisent cette méthode, à commencer par les HP48.
    La notation polonaise inverse dispose de 4 registres, noté X,Y,Z,T.
    Lorsque l'opérateur veut faire une opération il tape et entre le premier opérande, puis le second. Les registres X et Y sont renseignés. Le choix d'une opération efféctue cette opération entre les registres X et Y. Le résultat est mis en X. Ce type de machine ne dispose pas de touche "=" mais dispose de deux touches supplémentaires, un touche "échange" qui échange X et Y, et un touche "flèche en bas" qui effectue une permutation circulaire sur les 4 registres.
    Je suppose que si je lui en avais parlé, on m'aurait répondu "Ne complique pas les choses".
    Toutes les calculatrices HP que je connais utilisent cette logique (HP21, HP41 entre autres)
    Par contre, lorsqu'il s'agit de fonction avec un seul paramètre, par exemple sin, dans la logique d'une calculatrice avec un ordinateur, je préfèrerait que l'opérateur ait à taper sin(25) plutôt que 25 puis sin.
    Comme il s'agit d'une calculatrice scientifique, le problème se posera.

Discussions similaires

  1. [info] La "Calculext": une calculatrice scientifique extensible
    Par tyrtamos dans le forum Général Python
    Réponses: 2
    Dernier message: 06/02/2008, 12h23
  2. une calculatrice scientifique
    Par bassemb dans le forum C#
    Réponses: 6
    Dernier message: 11/12/2007, 09h05
  3. Réalisation d'une calculatrice scientifique
    Par diden138 dans le forum Pascal
    Réponses: 7
    Dernier message: 22/05/2006, 11h45
  4. [TP] Calculatrice scientifique
    Par cherif31 dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 17/04/2006, 21h25

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