Calculatrice(langage C) [Fermé]

Signaler
Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
-
 Christophe -
Bonjour,
svp aidez moi a faire ce programme
Ecrire un programme qui fait le travail d'une calcutrice
avec les fonctions et les pointeurs
et merci d'avance
A voir également:

12 réponses

Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
26
voila ce que j'ai fait dans le programme de la calculatrice
#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
char op;
int a,b;
printf("Donner l'opérande a:");
scanf("%d",&a);
printf("Donner l'opérateur (+,-,*,/,%)");
scanf("%c",&op);
printf("Donner l'opérande b:");
scanf("%d",&b);
switch(op)
{
case'+':printf("%d+%d=%d",a,b,a+b);break;
case'-':printf("%d-%d=%d",a,b,a-b);break;
case'*':printf("%d*%d=%d",a,b,a*b);break;
case'/':if(b)
printf("%d/%d=%d",a,b,a/b);break;
else
printf("Impossible division par 0");break;
case'%':if(b)
printf("%d%%%d=%d",a,b,a%b);break;
else
printf("Erreur division par 0");break;
dfault:printf("Opérateur non accepté");
}
getch();
}
voila ce que j'ai fait
mais le problème c'est je dois faire la fonction qui fait ce travail pr plus de 2 nombres et la je trouve des difficultés
28
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Va sur se site tu pourra mieu comprendre et regarde en bas de la page dans les commentaire il y a ce que tu cherche
http://www.siteduzero.com/tutoriel-3-13956-les-conditions.html

#include<stdio.h>
#include<string.h>
#include<math.h>

main()
{
char c[100];
int i,s1,r,j,ind,s;
for(j=1;j>0;j++)
{

gets(c);

for(i=0;i<strlen(c);i++)
{

if(c[i]=='+')
{
ind=i;

break;
}
if(c[i]=='*')
{
ind=i;

break;
} if(c[i]=='/')
{
ind=i;

break;
} if(c[i]=='-')
{
ind=i;

break;
}
}
if(ind==3||ind==5)

{

s=1;

}
else
{
s=0;

}

for(i=0;i<ind;i++)
{
if(c[i]=='1')
s=s+pow(10,ind-1-i);
if(c[i]=='2')
s=s+2*pow(10,ind-1-i);
if(c[i]=='3')
s=s+3*pow(10,ind-1-i);
if(c[i]=='4')
s=s+4*pow(10,ind-1-i);
if(c[i]=='5')
s=s+5*pow(10,ind-1-i);
if(c[i]=='6')
s+=6*pow(10,ind-1-i);
if(c[i]=='7')
s=s+7*pow(10,ind-1-i);
if(c[i]=='8')
s=s+8*pow(10,ind-1-i);
if(c[i]=='9')
s=s+9*pow(10,ind-1-i);

}
if(strlen(c)-ind==2||strlen(c)-ind==4)

{

s1=1;

}
else
{
s1=0;

}

for(i=ind+1;i<strlen(c);i++)
{

if(c[i]=='1')
s1=s1+pow(10,strlen(c)-i-1); // bloc du determination des nombres
if(c[i]=='2')
s1=s1+2*pow(10,strlen(c)-i-1);
if(c[i]=='3')
s1=s1+3*pow(10,strlen(c)-i-1);
if(c[i]=='4')
s1=s1+4*pow(10,strlen(c)-i-1);
if(c[i]=='5')
s1=s1+5*pow(10,strlen(c)-i-1);
if(c[i]=='6')
s1+=6*pow(10,strlen(c)-i-1);
if(c[i]=='7')
s1=s1+7*pow(10,strlen(c)-i-1);
if(c[i]=='8')
s1=s1+8*pow(10,strlen(c)-i-1);
if(c[i]=='9')
s1=s1+9*pow(10,strlen(c)-i-1);
}
if(s1>=10 && s>=10)
{
/* bloc des opérations */
printf("%d",s+s1);
if(c[ind]=='/')
printf("%d",s/s1);
if(c[ind]=='-')
printf("%d",s-s1);
if(c[ind]=='*')
printf("%d",s*s1);
}
if(s1<10 && s>=10)
{
s1--;
if(c[ind]=='+')
printf("%d",s+s1);
if(c[ind]=='/')
printf("%d",(s)/(s1));
if(c[ind]=='-')
printf("%d",s-s1);
if(c[ind]=='*')
printf("%d",s*s1);

}
if(s1>=10&&s<10)
{


if(c[ind]=='+')
printf("%d",s+s1);
if(c[ind]=='/')
printf("%d",(s)/(s1));
if(c[ind]=='-')
printf("%d",s-s1);
if(c[ind]=='*')
printf("%d",s*s1);
}
if(s1<10 && s<10)
{

s1--;
if(c[ind]=='+')
printf("%d",s+s1);
if(c[ind]=='/')
printf("%d",s/s1);
if(c[ind]=='-')
printf("%d",s-s1);
if(c[ind]=='*')
printf("%d",s*s1);
}
//printf(" %d\t",s);
//printf(" %d\n",s1);
}
}
Messages postés
20
Date d'inscription
dimanche 19 juin 2016
Statut
Membre
Dernière intervention
7 octobre 2018
> Anass Hassoun
Ce programme compile mais ne s'éxécute pas sur mon ordinateur!
Quel est la problème?
>
Messages postés
20
Date d'inscription
dimanche 19 juin 2016
Statut
Membre
Dernière intervention
7 octobre 2018

Vous devez creer une base de donner pour que le programme marche sur votre ordi sans utiliser le compilateur pour effectuer les opperations
Cette programmation ma vraiment aidé mais malheureusement j'ai pas trouvé ton problème à toi merci
le probleme c de realisé une calculatrice ki li une operation comme char et la calculé on utilisant les piles (respectant aussi les priorité des operateur)
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
423
ben vu que tu ne modifie pas tes variables pas besoin de pointeurs
par exemple pour l'addition tu fais une fonction addition
int addition(int a, int b)
{
      return (a+b);
}
et pour l'appeler dans ton case
case '+' : printf("%d+%d=%d",a,b,addition(a,b)); break;
Messages postés
1963
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
130
Je crois que son problème est pour créer une fonction qui puisse gérer a + b - c par exemple...
salut tout le monde ,on a 1 autre facon a gerer un prg de calculatrice mé c 1 pti peu compliké, on peut demander a l'utilisateur d'ecrire 1 chaine de caractere comme : 2+7*(4/2+2(7*6)-1^2)
ca c 1 chaine de caracteres et va a l'aide de 2 piles , on va parcourir cette chaine comme suit:
boucle(tantque ch[i]) faire { si ch[i] est nbre ou '('->push(&pile1,ch[i]) sinon ->push(&pile2,ch[i])
vous comprenez ce ke j veu dire ? mé c assez compliké
Messages postés
1963
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
130
Tu en es où du développement ? Quelle genre d'aide tu attends de nous ?
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
423
ok je vois c'est plus compliqué...
tu pourrais utiliser un tableau je pense pour stocker les variables utilisé dans l'operation
bonsoir,
Aidez moi svp à réaliser une calculatrice arithmétique en C en utilisant les piles ,les files et listes.Tout en veillant sur la priorité des opérandes et des parentèses.IL faut aussi afficher un msg d'erreur en cas d'erreur dans l'expression donnée.
Je n'arrive pas à avoir une approche exacte du programme. Et svp le code ASCII de CTRL-N.
salut je dois faire exactement le même programme que toi, je voulais savoir si tu l'avais fini ou pas et si c'était possible de l'avoir, je suis prêt à payer si il le faut. Je n'ai jamais fait de C.
Messages postés
2
Date d'inscription
samedi 7 février 2015
Statut
Membre
Dernière intervention
7 février 2015
1
J'ai moi même fais une calculatrice qui réalise bien plus que 4 opérations.
Mon code est en construction, ne m'en voulez pas pour les fautes pouvant être présente, surtout au niveau du mot de passe.
Mot de passe: Pips
#define STERLING 1.3
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "main.h"
#include <string.h>


// Prototype -> main.h




int main()
{


int resultat = 0, nombre1 = 0, nombre2 = 0, argent= 0, choix= 0, compteur=0, o = 0, nombre3 = 0, nombre4= 0,convertir = 0 ; // Variables "normales"
float francs = 0, longueur= 0, largeur = 0, aire = 0, euros = 0 ; // Specifiques
nb1nb2 nombres;

int tableau[4] = {0};// Tableaux et pointeurs
char mdp[100], autrecalcul[100] = "oui"; // Chaine de caract
printf("Veulliez indiquez le mot de passe:\n");
scanf("%s", mdp);



if (mdp == 0)
printf("0 est interdit");

if ( !strcmp(mdp,"Pips"))

{

while (!strcmp(autrecalcul, "oui") || (!strcmp(autrecalcul,"OUI")))

{
printf("Ce programme est une calculatrice\n1. additioner,\n2. soustraire \n3. multiplier \n4. diviser \n5. tripler votre nombre,\n6. convertir les francs en euros\n");
printf("7. Calculer l'aire d'un rectangle\n8. addition plus complexe \n9. Date et Heure");
printf("\nentrer le nombre ici:");
scanf("%d", &choix);

switch (choix)
{
case 1: // Addition
basique1(&nombres);
resultat = nombres.nombre1 + nombres.nombre2;
printf("resultat: %d", resultat);
break;

case 2: // Soustraction
basique1(&nombres);
resultat = nombres.nombre1 - nombres.nombre2;
printf("%d - %d = %d",nombres.nombre1, nombres.nombre2, resultat);
break;
case 3:
// Multiplication
basique1(&nombres);
resultat = nombres.nombre1 * nombres.nombre2;
printf("%d x %d = %d", nombres.nombre1, nombres.nombre2, resultat);
break;
case 4:
nombres.nombre1 = 15;
nombres.nombre2 = 13; // Division
basique1(&nombres);
resultat = nombres.nombre1 / nombres.nombre2;
printf(" %d / %d = %d\n", nombres.nombre1, nombres.nombre2, resultat);
resultat = nombres.nombre1%nombres.nombre2;
printf ("Il reste donc %d", resultat );
break;

case 5: // Triple
printf("Entrer un nombre\n");
scanf("%d", &nombre1);
nombre2= triple(nombre1);
printf("resultat:%d", nombre2);
break;
case 6:
printf("Quel monnaie voulez vous convertir en euros?");
printf("\n\t1.Sterling\n\t2.francs\n\t3.Yens");
scanf("%d", &convertir);
switch(convertir)
{
case 1:
Convertisseur(&euros);

euros = euros / STERLING ;
printf("Vous avez %f", euros);
break;
case 2:
Convertisseur(&euros);
euros = euros / YENS;
printf ("Vous avez %f", euros);


break;
}

break;
case 7:
printf("Longueur:");
scanf("%f", &longueur);
printf("Largeur:");
scanf("%f", &largeur);
airerectangle (longueur,largeur, aire);
break;
case 8:


basique2( &tableau[0],&tableau[1],&tableau[2],&tableau[3]);
resultat= tableau[0]+ tableau[1] + tableau[2] + tableau[3];
printf ("%d", resultat);
case 9:
printf("Nous sommes le %s,\nIl est %s\n",__DATE__, __TIME__);


break;

default:
printf("Ce chiffre n'est pas compris entre 1 et 8");
break;

}
printf( "Autre calcul?");
scanf("%s", autrecalcul);
chaine(autrecalcul);
printf( "%s",autrecalcul);
}

}
else
{
while(mdp != 1234, compteur<3)
{


printf("Ce n'est pas le bon mdp\n");
scanf("%d", &mdp);
compteur++;
}


}

return 0;
}



void basique1(nb1nb2*pointeur1 )

{


printf("Nombre1:");
scanf("%d", &pointeur1->nombre1);
printf ("Nombre2 :");
scanf ("%d", &pointeur1->nombre2);


}


int triple( int param)
{
int result=0;
result=param*3;
return (result);

}

void airerectangle (float param1, float param2, float param3)
{
param3 = param1*param2;
printf("%f x %f = %f ", param1, param2, param3);
}
int sommeTableau(int tableau[], int tailleTableau)

{
int sommeTableau;
sommeTableau = tableau[0]+tableau[1]+tableau[2]+ tableau[3];
return sommeTableau;
}
void basique2(int *pointeur1,int *pointeur2,int *pointeur3, int *pointeur4)
{

printf("Addition a 4 chiffres\n");
printf("Nombre 1:");
scanf("%d", pointeur1);
printf("Nombre 2:");
scanf("%d", pointeur2);
printf("Nombre 3:");
scanf("%d", pointeur3);
printf("Nombre 4:");
scanf("%d", pointeur4);



}
void chaine (char *chaine1)
{
if (chaine1[0] == 'O')
{
chaine1[0] = 'o';
}
if (chaine1[1] == 'U')
{
chaine1[1] = 'u';
}
if (chaine1[2] == 'I')
{
chaine1[2] = 'i';
}
}
void Convertisseur(int *pointeur1)
{
printf("Argent:");
scanf("%f", pointeur1);
}
Messages postés
20
Date d'inscription
dimanche 19 juin 2016
Statut
Membre
Dernière intervention
7 octobre 2018

Ce programme compile mais ne s'éxécute pas sur mon ordinateur!
Quel est la problème?
jai encore ce problème avec ce programme
Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
26
j'ai essayé avec switch mais il faut utiliser les pointeurs et les fonctions et c'est difficile
Messages postés
1963
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
130
Mais dans les faits, tu en es où du code ? Fais une demande un peu plus précise, on ne va pas te faire ta calculatrice quand même !
Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
26
un programme qui fait laddition,la soustraction, la division et la multiplication des nombres
Messages postés
1963
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
130
Je sais ce qu'est une calculatrice, je te demande simplement ce que tu attends de nous ? Tu ne pense pas qu'on va tout te faire ?
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
423
poste ton programme que tu as deja fait on t'aidera...
Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
26
oui oila ki fait plusieurs opérations nn pas entre deux variables
Messages postés
2
Date d'inscription
samedi 7 février 2015
Statut
Membre
Dernière intervention
7 février 2015
1
Et les prototypes:int triple( int param);
float convertisseur ( float param);
void airerectangle (float param1, float param2, float param3);
int sommeTableau(int tableau[], int tailleTableau);
void basique2();
void basique0();

typedef struct nb1nb2 nb1nb2;
struct nb1nb2{
int nombre1;
int nombre2;

};

void basique1(nb1nb2 *);

typedef enum Convertisseur Convt;
enum Cont
{
FRANCS = 1, YENS = 3
}
;
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
22
le return 0 n'est absolument pas nécessaire dans ce cas la.
C'est vrai (section 5.1.2.2.3 de la bible du C (c'est-à-dire l'ISO/IEC 9899:T2C): reaching the } that terminates the main function returns a value of 0.), mais c'est une très, très, très, très mauvaise habitude de ne pas le faire, parce que c'est la seule exception, une fonction dont le type n'est pas void doit retourner quelque chose.

Personne ne connaît la balise <code> dans ce sujet ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 750 >
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018

Oui, en C99 c'est juste. Sauf que, je ne connais pas de compilateur compatible C99 à 100%. C'est dommage de perdre en portabilité juste pour économiser une ligne.
Pour ma part, je continuerai donc à signaler le manque de return 0; en C dans le main() comme une erreur.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 750
Bon, je vais être plus clair.
Je ne vois pas l'intérêt de déterrer un post qui date de 8 ans pour apporter une réponse moins bonne.
Je le répète : ton programme est mal bâti. Je ne parle pas d'un point de vue C, mais d'un point de vue algorithmique. Les if séquentiels, c'est moche. Pas de fonction, c'est illisible. Bref, la réponse apportée n'aidera probablement personne.

En plus, le cas '/' par 0 n'est pas traité (il est traité dans les réponses plus haut). C'est ce que j'appelle une erreur. Ton programme compile peut-être, mais il ne faut pas oublier que ce n'est pas parce qu'il compile qu'il n'a pas d'erreur. Autre problème, strcpy(). Tu rentres une chaîne trop longue, et ça plante.
Messages postés
20
Date d'inscription
dimanche 19 juin 2016
Statut
Membre
Dernière intervention
7 octobre 2018
>
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Je ne vois pas l'intérêt de déterrer un post qui date de 8 ans pour apporter une réponse moins bonne.

Ouais bin mrc de me dire que mon programme est nul fiddy! Exactement le type de message attendus sur CCM!

Bref, la réponse apportée n'aidera probablement personne.

J'ai tt de même envie de répondre c tt!

De plus, il est normal que je commette quelques erreurs, étant donné que je suis DEBUTANT!!

Alors merci bien de me dire que mon 1er "vrai" programme est nul et de ruiner mon travail!

cordialement.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 750 >
Messages postés
20
Date d'inscription
dimanche 19 juin 2016
Statut
Membre
Dernière intervention
7 octobre 2018

Ne le prends pas ainsi.
En plus, ton programme est loin d'être nul !
Mais pour aider, il faut utiliser les bonnes pratiques. Sinon, celui qui a posé sa question n'aura pas un bon code, ce qui ne l'aidera pas. C'est comme dans la conduite. Lorsque tu apprends à conduire, tu ne peux pas encore te permettre d'aider les autres sous peine de leur apprendre de mauvaises pratiques. Il faut d'abord progresser soi-même, et on est là pour ça :-).

Je te conseille plutôt donc de créer un nouveau post et on te corrigera pour que tu progresses.

A+