[DEFI N°2]La calculette v2

Poster un nouveau sujet   Répondre au sujet

Voir le sujet précédent Voir le sujet suivant Aller en bas

[DEFI N°2]La calculette v2

Message  Thomas le Mer 9 Nov - 18:45

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 ! Very Happy ) 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:
  1. Déterminer si un nombre entré par l'utilisateur est premier ou non.
  2. Donner la liste des diviseurs d'un nombre donné
  3. 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 ! Cool

_________________
Signature alakon

Thomas
LUKE, JE SUIS TON PERE
LUKE, JE SUIS TON PERE

Messages: 54
Date d'inscription: 27/09/2011

http://forum-uvsq.forumgratuit.org

Revenir en haut Aller en bas

Re: [DEFI N°2]La calculette v2

Message  Nicolas le Mer 9 Nov - 20:41

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
Noob en Informatique

Messages: 6
Date d'inscription: 29/09/2011

Revenir en haut Aller en bas

Re: [DEFI N°2]La calculette v2

Message  DamienRD le Dim 13 Nov - 22:00

Voila ma version non finale de la calculatrice V2.0

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
Développeur

Messages: 59
Date d'inscription: 28/09/2011

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Poster un nouveau sujet   Répondre au sujet
Permission de ce forum:
Vous pouvez répondre aux sujets dans ce forum