[DEFI N°2]La calculette v2
3 participants
Forum UVSQ :: DUT :: Informatique :: Programmation :: Programmes :: Défis
Page 1 sur 1
[DEFI N°2]La calculette v2
Nous avons récemment vu comment faire une calculette en C réalisant les 4 opérations arithmétiques de base ainsi que les puissances.
Maintenant le défi consiste à améliorer cette calculatrice plutôt basique, en reprenant le code disponible ici ou en le réécrivant vous même (ca entraîne encore plus ! ) et d'ajouter des fonctions à celle-ci.
En effet pour considérer ce défi comme réussi vous devrez réaliser une fonction/procédure pour chaque type de calcul (addition, soustraction...), l'affichage du menu ainsi que la proposition de recommencer un calcul.
Pour les plus téméraires, vous devrez aussi rajouter trois nouvelles fonctions:
Vous pouvez poster votre code (si vous considérez votre défi comme réussi) à la suite de ce message, entre des balises code contenu dans un spoiler:
[.spoiler]
[.code]
"votre code"
[./code]
[./spoiler]
(n'oubliez pas de retirer le point dans les balises)
résultat:
Bonne chance !
Maintenant le défi consiste à améliorer cette calculatrice plutôt basique, en reprenant le code disponible ici ou en le réécrivant vous même (ca entraîne encore plus ! ) et d'ajouter des fonctions à celle-ci.
En effet pour considérer ce défi comme réussi vous devrez réaliser une fonction/procédure pour chaque type de calcul (addition, soustraction...), l'affichage du menu ainsi que la proposition de recommencer un calcul.
Pour les plus téméraires, vous devrez aussi rajouter trois nouvelles fonctions:
- Déterminer si un nombre entré par l'utilisateur est premier ou non.
- Donner la liste des diviseurs d'un nombre donné
- Calculer le discriminant ainsi que les racines d'un polynôme du second degré.
Vous pouvez poster votre code (si vous considérez votre défi comme réussi) à la suite de ce message, entre des balises code contenu dans un spoiler:
[.spoiler]
[.code]
"votre code"
[./code]
[./spoiler]
(n'oubliez pas de retirer le point dans les balises)
résultat:
- Spoiler:
- Code:
Ma superbe calculatrice !
Bonne chance !
Re: [DEFI N°2]La calculette v2
- Spoiler:
- Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
static char*Menu[]=
{
"Pour savoir si un nombre est premier, tapez 1\n\n",
"Pour avoir les diviseurs d'un nombre, tapez 2\n\n",
"Pour calculer les racines d'un polynome de degre 2, tapez 3\n\n"
};
int main()
{
int choix,i,ResScanf, nombre_donne, diviseur;
float a, b, c, discriminant, racine_1, racine_2;
char recommencer;
do
{
do
{
system("CLS");
printf("================================Calculatricev2.0================================\n\n");
for(i=0;i<3;i++)
{
printf("%s", Menu[i]);
}
fflush(stdin);
ResScanf=scanf("%d", &choix);
}while(((choix != 1 && choix != 2)&&choix != 3)|| ResScanf != 1);
switch(choix)
{
case 1 : printf("Quel nombre voulez-vous tester ?\n");
scanf("%d", &nombre_donne);
diviseur = 1;
for(i=2; i<sqrt(nombre_donne);i++)
{
if(nombre_donne%i == 0)
{
diviseur = 2;
};
}
if(diviseur == 2)
{
printf("\nCe nombre n'est pas premier.\n");
}
else
{
printf("\nCe nombre est premier.\n");
}
break;
case 2 : system("CLS");
printf("Quel nombre voulez-vous tester ?\n");
fflush(stdin);
ResScanf=scanf("%d", &nombre_donne);
system("CLS");
for(i=1;i<=(fabs(nombre_donne/2));i++)
{
/*nombre_donne=fabs(nombre_donne);*/
if(nombre_donne%i == 0 && nombre_donne<0)
{
printf("%d est un diviseur de %d\n\n", i, -nombre_donne);
}
else
{
if(nombre_donne==0 && nombre_donne>=0);
printf("%d est un diviseur de %d\n\n", i, nombre_donne);
};
}
break;
case 3 : system("CLS");
printf("Quels sont les coefficients de votre polynome ?\n\n");
fflush(stdin);
scanf("%f %f %f", &a, &b, &c);
discriminant = b*b - 4*a*c;
printf("\n\nDiscriminant = %f", discriminant);
if(discriminant<0)
{
printf("\nIl n'y a pas de racines reelles");
}
else
{
if(discriminant == 0)
{
racine_1=((-b + sqrt(discriminant))/(2*a));
printf("\n\nIl y a une racine double qui est : %f", racine_1);
}
else
{
racine_1=((-b + sqrt(discriminant))/(2*a));
racine_2=((-b - sqrt(discriminant))/(2*a));
printf("\n\nIl y a deux racines reelles qui sont %f et %f", racine_1, racine_2);
};
};
break;
}
printf("\n\nATTENTION : appuyer sur une touche effacera vos résultats !\n\n");
system("PAUSE");
system("ClS");
printf("Souhaitez-vous recommencer ? o/n ");
fflush(stdin);
scanf("%c", &recommencer);
}while(recommencer == 'o');
return 0;
}
Thomas: Il faut faire un programme avec la calculatrice complète, reprendre les calculs de base et faire cela avec des fonctions, là tu as juste codé "tout droit"... A toi de voir comment l'intégrer avec le reste.
Nicolas- Noob en Informatique
- Messages : 6
Date d'inscription : 29/09/2011
Re: [DEFI N°2]La calculette v2
Voila ma version non finale de la calculatrice V2.0
Il me reste le switch a finir et les fonction du début, j'ai également pensé a arrêter la boucle du for dan s la fonction premier dès que la boucle trouve un diviseur.
- Spoiler:
- Code:
#include <stdio.h>
#include <stdlib.h>
#define NB_CHOIX sizeof(Menu)/sizeof(Menu[0])
static char *Menu[]=
{
"Pour une addition, tapez +\n",
"Pour une soustraction, tapez -\n",
"Pour une multiplication, tapez *\n",
"Pour une division, tapez /\n",
"Pour calculé le modulo d'un nombre par un autre, tapez %\n",
"Pour savoir si un nombre est premier, tapez p\n",
"Pour calculer les racines d'un polynome du second degrés, tapez r\n",
"Pour carculer la puissance d'un nombre par un autre tapez o\n",
"Pour quitter,tapez q\n\n"
};
int addition(a, b)
{
return a+b;
}
int soustraction(a,b)
{
return a-b;
}
int multiplication(a,b)
{
return a*b;
}
int division(a,b)
{
if (b!=0)
{
return a/b;
}
else
{
printf("Impossible de diviser par 0\n");
}
}
int modulo(a,b)
{
return a%b;
}
int puissance(a,b)
{
return a^b;
}
int premier(a)
{
int j,diviseurs=1;
for(j=0; j<sqrt(a); j++)
{
if(a%j==0)
{
diviseurs+=1;
}
if(diviseurs>1)
{
return 0;
}
else
{
return 1;
}
}
}
int main(int argc, char *argv[])
{
int ResScanf,i,a,b,total;
char choix;
do
{
do
{
for(i=0; i<NB_CHOIX;i++)
{
printf("%s",Menu[i]);
}
printf("Quel est votre choix ?\n\n");
ResScanf=scanf("%c",&choix);
} while ( ResScanf !=1 || ((choix!='+') && (choix!='-') && (choix!='*') && (choix!='/') && (choix!='%') && (choix!='p') &&
(choix!='r') && (choix!='p') && (choix!='q')));
fflush(stdin);
switch(choix)
{
case '+': {
printf("entrez 2 nombres\n");
scanf("%d %d",&a, &b);
total = addition(a,b);
}
break;
case '-': {
printf("Entrez 2 nombres\n");
scanf("%d %d", &a, &b);
total = soustraction(a,b);
}
break;
case 'q':{ printf("\nAu revoir\n\n ");
system("PAUSE");
return 0;
}
break;
}
printf(" Le resultat est : %d\n\n\n", total);
fflush(stdin);
}while (choix!='q');
system("PAUSE");
return 0;
}
Il me reste le switch a finir et les fonction du début, j'ai également pensé a arrêter la boucle du for dan s la fonction premier dès que la boucle trouve un diviseur.
DamienRD- Développeur
- Messages : 59
Date d'inscription : 28/09/2011
Forum UVSQ :: DUT :: Informatique :: Programmation :: Programmes :: Défis
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|