Contrôle continu N°1

Exercice 1:

  1. Ecrire une fonction NbDiv qui retourne la somme des chiffres d'un entier naturel N.

  2. Ecrire une fonction IsHarshad qui détermine si un entier N est un nombre de Harshad sachant qu'un nombre de Harshad est un entier naturel divisible par la somme de ses chiffres.
    N.B: On doit faire appel à la fonction   NbDiv 
    Exemple: 12 est divisible par 1+2,  84 est divisible par 8+4

  3. Ecrire un programme principal qui affiche les 10 premiers nombre de Harshad
    N.B: On doit faire appel à la fonction  IsHarshad

Exercice 2:

  1. Ecrire une fonction ListDiv qui stocke les diviseurs premiers différents d'un entier N dans un tableau T et retourne leur nombre. L'entier et le tableau seront passés en paramètres.
    Exemple: N= 1400 ===> le tableau T contiendra: 2, 5, 7 et la valeur de retour sera 3.

  2. Ecrire une fonction Distinct3Fact qui détermine si trois entiers (a,b,c) passés en arguments possèdent chacun trois diviseurs premiers différents.
    N.B: On doit faire appel à la fonction ListDiv 
    Exemple:
    a= 644, b=645, c=646 ===> valeur de retour 1 car on a:
    644 = 2² × 7 × 23
    645 = 3 × 5 × 43
    646 = 2 × 17 × 19.

  3. Ecrire un programme principal qui affiche les 10 premiers triples (x, y, z) tel que:

      •  y=x+1 et z=x+2
      • chacun des entiers x, y, et z possède trois diviseurs premiers différents

Exercice 3:
Comment peut-on créer une fonction qui fournit plus qu'un résultats?
Une fonction retourne 0 ou 1 valeur d'un type donné. 
Si on veut qu'une fonction fournisse plus qu'une valeur, on utilise des paramètres passés par adresse comme indiqué dans l'exemple suivant:
On veut créer une fonction Calcul qui fournit la somme et le produit de deux entiers qui font partie des paramètres de la fonction.
Solution 1:  
La fonction retourne le produit et stocke la somme dans un paramètre passé par adresse:   int   Calcul (int a, int b, int  *s) {*s=a + b; return a*b; }
                main() { int x, y, r1, r2; 
                printf("Donnez deux entiers:") ; scanf("%d%%d",&x,&y); 
                r1 = Calcul (x, y,  &r2); 
                printf("Produit: %d, Somme: %d", r1, r2);  }
Solution 2:  
La fonction de type void stocke le produit et la somme dans deux paramètres passés par adresse:   
               void   Calcul (int a, int b, int *p, int *s ) {*s=a + b; *p =  a*b; }
                main() { int x, y, r1, r2; 
                printf("Donnez deux ntiers:") ; scanf("%d%%d",&x,&y); 
                Calcul (x, y, &r1, &r2); 
                printf("Produit: %d, Somme: %d",r1,r2);  }


  1. Ecrire une fonction Sequence qui fournit:

    - Le nombre de séquences croissantes dans un tableau T de N entiers ( T et N font partie des paramètres de la fonction).

    - L'indice de début et l'indice de fin de la première séquence la plus grande dans le tableau T.

    Exemple:  N=15  T=12, 45 , 8,10, 34, 44, 2, 7, 13, 6, 20, 23, 31, 4, 9
                      ====> 
    Nombre de séquences croissantes: 5
                                   
    La première séquence la plus grande: indice de début = 2 indice de fin= 5   
  2. Ecrire un programme principal qui lit un tableau dynamique H de M entiers, appelle la fonction Sequence et affiche les résultats.