Advertisement
HugoBallee

GLIN202/TP3-4

Feb 12th, 2013
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.04 KB | None | 0 0
  1. // exo1.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <cmath>
  8.  
  9. #define MAX 1000
  10.  
  11. float discriminant(float a, float b, float c);
  12. int nmbreRacines(float a, float b, float c);
  13.  
  14. int sommeDiviseursPropres(int n);
  15. int ami(int a, int b);
  16. void printNombreParfaits(int n);
  17.  
  18. void printTriangle(int base);
  19.  
  20. int estPremier(int n);
  21. int prochainPremier(int n);
  22.  
  23. void printEntiersBizarres(void);
  24. int estEntierBizarre(int n);
  25.  
  26. int _tmain(int argc, _TCHAR* argv[])
  27. {
  28.     int a, b, c;
  29.  
  30.     printf("nombre : ");
  31.     scanf("%d", &a);
  32.     printEntiersBizarres(); // 153, 370, 371, 407
  33.  
  34.     printf("nombre : ");
  35.     scanf("%d", &a);
  36.     printf("%d est premier : %d\n", a, estPremier(a));
  37.     printf("Prochain nombre premier de %d est : %d\n", a, prochainPremier(a));
  38.  
  39.  
  40.     printf("Base du triangle : ");
  41.     scanf("%d", &a);
  42.     printTriangle(a);
  43.  
  44.  
  45.     printf("first number : ");
  46.     scanf("%d", &a);
  47.     printf("second number : ");
  48.     scanf("%d", &b);
  49.     printf("Les nombres parfaits jusqu'a %d :\n", a);
  50.     printNombreParfaits(a);
  51.     printf("Somme des diviseurs propres de %d : %d\n", a, sommeDiviseursPropres(a));
  52.     printf("Somme des diviseurs propres de %d : %d\n", b, sommeDiviseursPropres(b));
  53.     printf("%d et %d sont amis : %d\n", a, b, ami(a, b));
  54.     scanf("\n");
  55.  
  56.  
  57.     printf("a : ");
  58.     scanf("%d", &a);
  59.     printf("b : ");
  60.     scanf("%d", &b);
  61.     printf("c : ");
  62.     scanf("%d", &c);
  63.     switch (nmbreRacines(a, b, c)) {
  64.     case 2:
  65.         printf("L'equation %dxx + %dx + %d admet deux solutions :\n", a, b, c);
  66.         printf("x1 = (-%d -sqrt(discrim)) / (2%d)\t= %.2f\n", b, a, (-b-sqrt(discriminant(a, b, c))) / (2*a));
  67.         printf("x1 = (-%d +sqrt(discrim)) / (2%d)\t= %.2f\n", b, a, (-b+sqrt(discriminant(a, b, c))) / (2*a));
  68.         break;
  69.     case 1:
  70.         printf("L'equation %dxx + %dx + %d admet une racine double :\n", a, b, c);
  71.         printf("x1 = x2 = -%d / (2%d)\t= %.2f\n", b, a, -b/(2.*a));
  72.         break;
  73.     default:
  74.         printf("Il n'y a pas de solutions reelle a l'equation %dxx + %dx + %d\n", a, b, c);
  75.         break;
  76.     }
  77.  
  78.     scanf("\n");
  79.     return 0;
  80. }
  81.  
  82. int sommeDiviseursPropres(int n)
  83. {
  84.     int i;
  85.     int res = 0;
  86.     for (int i = 1; i <= n / 2; ++i) {
  87.         if ((n % i) == 0) {
  88.             res += i;
  89.         }
  90.     }
  91.  
  92.     return res;
  93. }
  94.  
  95. int ami(int a, int b)
  96. {
  97.     if ((a == sommeDiviseursPropres(b)) && (b == sommeDiviseursPropres(a))) {
  98.         return 1;
  99.     }
  100.     return 0;
  101. }
  102.  
  103. float discriminant(float a, float b, float c)
  104. {
  105.     return b*b - 4*a*c;
  106. }
  107.  
  108. int nmbreRacines(float a, float b, float c)
  109. {
  110.     float discrim = discriminant(a, b, c);
  111.     if (discrim > 0.) {
  112.         return 2;
  113.     } else if (discrim == 0.) {
  114.         return 1;
  115.     } else {
  116.         return 0;
  117.     }
  118. }
  119.  
  120. void printNombreParfaits(int n)
  121. {
  122.     int i;
  123.     for (i = 1; i <= n; ++i) {
  124.         if (i == sommeDiviseursPropres(i)) {
  125.             printf("%d\n", i);
  126.         }
  127.     }
  128. }
  129.  
  130. void printTriangle(int base)
  131. {
  132.     int nbEtoiles, nbEspaces, etage, i, j, newBase = base;
  133.  
  134.     if (newBase < 0) {
  135.         newBase = -newBase;
  136.     }
  137.     if (newBase % 2) {
  138.         ++newBase;
  139.     }
  140.  
  141.     nbEtoiles = 1;
  142.     nbEspaces = (newBase - nbEtoiles) / 2;
  143.     for (etage = 1; etage <= newBase / 2; etage++) {
  144.         for (i = 0; i < nbEspaces; ++i) {
  145.             printf(" ");
  146.         }
  147.         for (i = 0; i < nbEtoiles; ++i) {
  148.             printf("*");
  149.         }
  150.         for (i = 0; i < nbEspaces; ++i) {
  151.             printf(" ");
  152.         }
  153.         printf("\n");
  154.         nbEtoiles += 2;
  155.         nbEspaces = (newBase - nbEtoiles) / 2;
  156.     }
  157. }
  158.  
  159. int estPremier(int n)
  160. {
  161.     int i;
  162.     if (n <= 1) {
  163.         return false;
  164.     }
  165.     for (i = 2; i <= n / 2; ++i) {
  166.         if ((n % i) == 0) {
  167.             return false;
  168.         }
  169.     }
  170.     return true;
  171. }
  172.  
  173. int prochainPremier(int n)
  174. {
  175.     int res, m = n;
  176.     while (!(res = estPremier(m))) {
  177.         ++m;
  178.     }
  179.     return m;
  180. }
  181.  
  182. void printEntiersBizarres()
  183. {
  184.     int i;
  185.     for (i = 2; i <= MAX; ++i) {
  186.         if (estEntierBizarre(i)) {
  187.             printf("%d\n", i);
  188.         }
  189.     }
  190. }
  191.  
  192. int estEntierBizarre(int n)
  193. {
  194.     int unite, dizaine, centaine;
  195.  
  196.     unite = n % 10;
  197.     dizaine = ((n - unite) / 10) % 10;
  198.     centaine = ((((n - unite) / 10) - dizaine) / 10) % 10;
  199.  
  200.     if ((unite * unite * unite + dizaine * dizaine * dizaine + centaine * centaine * centaine) == n) {
  201.         return 1;
  202.     } else {
  203.         return 0;
  204.     }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement