Différences entre versions de « C algo td4 »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 264 : Ligne 264 :
 
<big>Afficher la solution:</big>
 
<big>Afficher la solution:</big>
 
<source class="mw-collapsible-content" lang="c">
 
<source class="mw-collapsible-content" lang="c">
 +
#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <math.h>
 +
 +
int main(){
 +
    int degre1, degre2, i;
 +
    double X;
 +
    /* Récupération des valeurs */
 +
    printf("Veuillez specifier le degre du premier polynome: ");
 +
    scanf("%d", &degre1);
 +
    degre1++;
 +
    double coefficients1[degre1];
 +
    printf("Veuillez specifier le degre du second polynome: ");
 +
    scanf("%d", &degre2);
 +
    degre2++;
 +
    double coefficients2[degre2];
 +
    for (i = degre1; i > 0; i--) {
 +
        if(i > 1){
 +
            printf("Veuillez specifier le coefficient de degre %d du premier polynome: ", i-1);
 +
        }else{
 +
            printf("Veuillez specifier la constante du premier polynome: ");
 +
        }
 +
        scanf("%d", &coefficients1[i]);
 +
    }
 +
    for (i = degre2; i > 0; i--) {
 +
        if(i > 1){
 +
            printf("Veuillez specifier le coefficient de degre %d du second polynome: ", i-1);
 +
        }else{
 +
            printf("Veuillez specifier la constante du second polynome: ");
 +
        }
 +
        scanf("%d", &coefficients2[i]);
 +
    }
 +
    /* Affichage du polynome */
 +
    printf("P1(X) = ");
 +
    for (i = degre1; i > 0; i--) {
 +
        printf("%d", coefficients1[i]);
 +
        if (i > 2) {
 +
            printf("X^%d + ",i-1);
 +
        }else if (i == 2) {
 +
            printf("X + ");
 +
        }
 +
    }
 +
    printf("\n");
 +
    printf("P2(X) = ");
 +
    for (i = degre2; i > 0; i--) {
 +
        printf("%d", coefficients2[i]);
 +
        if (i > 2) {
 +
            printf("X^%d + ",i-1);
 +
        }else if (i == 2) {
 +
            printf("X + ");
 +
        }
 +
    }
 +
    printf("\n");
 +
    printf("Entrez la valeur de X : ");
 +
    scanf("%lf", &X);
 +
    printf("P1(%d) + P2(%d) = ", X, X);
 +
    int maxDegre = degre1;
 +
    if(degre1 < degre2){
 +
        int maxDegre = degre2;
 +
    }
 +
    double sumCoeff[maxDegre];
 +
    for(i = maxDegre; i > 0; i--){
 +
        if(degre1 >= i && degre2 >= i){
 +
            sumCoeff[i] = pow(coefficients1[i] + coefficients2[i], X);
 +
            printf("%d\n", sumCoeff[i]);
 +
        }else if(degre1 >= i){
 +
            sumCoeff[i] = pow(coefficients1[i], X);
 +
        }else if(degre2 >= i){
 +
            sumCoeff[i] = pow(coefficients2[i], X);
 +
        }
 +
    }
 +
    float sum;
 +
    for (i = maxDegre; i > 0; i--) {
 +
        printf("%f", sumCoeff[i]);
 +
        sum += sumCoeff[i];
 +
        if (i >= 2) {
 +
            printf(" + ",i-1);
 +
        }
 +
    }
 +
    printf(" = %d", sum);
 +
    return EXIT_SUCCESS;;
 +
}
 
</source>
 
</source>
 
</div>
 
</div>

Version du 19 mars 2014 à 17:16

Exercice 1

Une matrice de Toeplitz (du nom du mathématicien allemand Otto Toeplitz 1881-1940) est une matrice dont les coefficients sur une diagonale descendant de gauche à droite sont les mêmes.

Par exemple, la matrice suivante est une matrice de Toeplitz :

On souhaite écrire un programme qui permette de créer et d’afficher des matrices de Toeplitz. Ce programme devra effectuer les opérations suivantes :

  • Demander à l’utilisateur la saisie d’un nombre de lignes et d’un nombre de colonnes ;
  • Demander à l’utilisateur la saisie d’une séquence d’initialisation ;
  • Générer la matrice correspondante ;
  • Afficher cette matrice.

Faire une analyse du sujet en décrivant les fonctionnalités du programme en langage naturel ou sous forme d’algorigramme et écrivez le en C.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
   int ligne, colonne, i, j;
   /* Récupération des paramètres de la matrice */
   printf("Combien de lignes : ");
   scanf("%d", &ligne);
   printf("Combien de colonnes : ");
   scanf("%d", &colonne);
   /* Déduction des paramètres de la séquence d'initialisation */
   int seq_size = ligne + colonne - 1, sequence[seq_size];
   int mat[ligne][colonne];
   printf("\n");
   for (i = 0; i < seq_size; i++) {
      printf("Rentrez la valeur de l'index %d : ", i + 1);
      scanf("%d", &sequence[i]);
   }
   /* Construction de la matrice */
   for (i = 0; i < ligne; i++) {
      for (j = 0; j < colonne; j++) {
         if (i == 0) {
            mat[i][j] = sequence[j];
         } else {
            if (j == 0) {
               mat[i][j] = sequence[colonne + i - 1];
            } else {
               mat[i][j] = mat[i - 1][j - 1];
            }
         }
      }
   }
   /* Affichage de la matrice */
   for (i = 0; i < ligne; i++) {
      printf("|");
      for (j = 0; j < colonne; j++) {
         printf("%d", mat[i][j]);
         if (j < colonne - 1) {
            printf(",");
         }
      }
      printf("|\n");
   }
   return EXIT_SUCCESS;;
}

Exercice 2

Écrire un programme permettant de manipuler des polynômes. Un polynôme de degré d peut s’écrire sous la forme :

On limitera le degré de nos polynômes à la valeur 10 et nous considérerons seulement les polynômes dans .

Question 1

Écrire un programme permettant la saisie des coefficients d’un polynôme de degré d.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int degre, i;
    /* Récupération des valeurs */
    printf("Veuillez spécifier le degré de votre polynome: ");
    scanf("%d", &degre);
    degre++;
    int coefficients[degre];
    for (i = degre; i > 0; i--) {
        if(i > 1){
            printf("Veuillez spécifier le coefficient de degré %d: ", i-1);
        }else{
            printf("Veuillez spécifier la constante: ");
        }
        scanf("%d", &coefficients[i]);
    }
    return EXIT_SUCCESS;
}

Exécution

Veuillez spécifier le degré de votre premier polynome: 3
Veuillez spécifier le coefficient de degré 3 : 4
Veuillez spécifier le coefficient de degré 2 : 3
Veuillez spécifier le coefficient de degré 1 : 2
Veuillez spécifier la constante: 1

Question 2

Ajouter des instructions permettant l’affichage à l’écran un polynôme de degré d.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int degre, i;
    /* Récupération des valeurs */
    printf("Veuillez spécifier le degré de votre polynome: ");
    scanf("%d", &degre);
    degre++;
    int coefficients[degre];
    for (i = degre; i > 0; i--) {
        if(i > 1){
            printf("Veuillez spécifier le coefficient de degré %d: ", i-1);
        }else{
            printf("Veuillez spécifier la constante: ");
        }
        scanf("%d", &coefficients[i]);
    }
    /* Affichage du polynome */
    printf("P(X) = ");
    for (i = degre; i > 0; i--) {
        printf("%d", coefficients[i]);
        if (i > 2) {
            printf("X^%d + ",i-1);
        }else if (i == 2) {
            printf("X + ");
        }
    }
    return EXIT_SUCCESS;;
}

Exécution

Veuillez spécifier le degré de votre premier polynome: 3
Veuillez spécifier le coefficient de degré 3 : 4
Veuillez spécifier le coefficient de degré 2 : 3
Veuillez spécifier le coefficient de degré 1 : 2
Veuillez spécifier la constante : 1
P(X) = 4X^3 + 3X^2 + 2X + 1

Question 3

Ajouter des instructions permettant d’effectuer la somme de deux polynômes de degrés au plus d.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int degre1, degre2, i;
    /* Récupération des valeurs */
    printf("Veuillez specifier le degre du premier polynome: ");
    scanf("%d", &degre1);
    degre1++;
    int coefficients1[degre1];
    printf("Veuillez specifier le degre du second polynome: ");
    scanf("%d", &degre2);
    degre2++;
    int coefficients2[degre2];
    for (i = degre1; i > 0; i--) {
        if(i > 1){
            printf("Veuillez specifier le coefficient de degre %d du premier polynome: ", i-1);
        }else{
            printf("Veuillez specifier la constante du premier polynome: ");
        }
        scanf("%d", &coefficients1[i]);
    }
    for (i = degre2; i > 0; i--) {
        if(i > 1){
            printf("Veuillez specifier le coefficient de degre %d du second polynome: ", i-1);
        }else{
            printf("Veuillez specifier la constante du second polynome: ");
        }
        scanf("%d", &coefficients2[i]);
    }
    /* Affichage du polynome */
    printf("P1(X) = ");
    for (i = degre1; i > 0; i--) {
        printf("%d", coefficients1[i]);
        if (i > 2) {
            printf("X^%d + ",i-1);
        }else if (i == 2) {
            printf("X + ");
        }
    }
    printf("\n");
    printf("P2(X) = ");
    for (i = degre2; i > 0; i--) {
        printf("%d", coefficients2[i]);
        if (i > 2) {
            printf("X^%d + ",i-1);
        }else if (i == 2) {
            printf("X + ");
        }
    }
    printf("\n");
    printf("P1(X) + P2(X) = ");
    int maxDegre = degre1;
    if(degre1 < degre2){
        int maxDegre = degre2;
    }
    int sumCoeff[maxDegre];
    for(i = maxDegre; i > 0; i--){
        if(degre1 >= i && degre2 >= i){
            sumCoeff[i] = coefficients1[i] + coefficients2[i];
        }else if(degre1 >= i){
            sumCoeff[i] = coefficients1[i];
        }else if(degre2 >= i){
            sumCoeff[i] = coefficients2[i];
        }
    }
    for (i = maxDegre; i > 0; i--) {
        printf("%d", sumCoeff[i]);
        if (i > 2) {
            printf("X^%d + ",i-1);
        }else if (i == 2) {
            printf("X + ");
        }
    }
    return EXIT_SUCCESS;;
}

Exécution

Veuillez spécifier le degré de votre premier polynome: 3
Veuillez spécifier le degré de votre deuxième polynome: 2
Veuillez spécifier le coefficient du degré 3 du premier polynome: 3
Veuillez spécifier le coefficient du degré 2 du premier polynome: 2
Veuillez spécifier le coefficient du degré 1 du premier polynome: 1
Veuillez spécifier le coefficient du degré 2 du deuxième polynome: 2
Veuillez spécifier le coefficient du degré 1 du deuxième polynome: 1
P1(X) = 3X^3 + 2X + 1
P2(X) = 2X + 1
P1(X) + P2(X) = 3X^3 + 4X + 2

Question 4

Ajouter des instructions permettant d’évaluer un polynôme pour une valeur x particulière.

Afficher la solution:

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

int main(){
    int degre1, degre2, i;
    double X;
    /* Récupération des valeurs */
    printf("Veuillez specifier le degre du premier polynome: ");
    scanf("%d", &degre1);
    degre1++;
    double coefficients1[degre1];
    printf("Veuillez specifier le degre du second polynome: ");
    scanf("%d", &degre2);
    degre2++;
    double coefficients2[degre2];
    for (i = degre1; i > 0; i--) {
        if(i > 1){
            printf("Veuillez specifier le coefficient de degre %d du premier polynome: ", i-1);
        }else{
            printf("Veuillez specifier la constante du premier polynome: ");
        }
        scanf("%d", &coefficients1[i]);
    }
    for (i = degre2; i > 0; i--) {
        if(i > 1){
            printf("Veuillez specifier le coefficient de degre %d du second polynome: ", i-1);
        }else{
            printf("Veuillez specifier la constante du second polynome: ");
        }
        scanf("%d", &coefficients2[i]);
    }
    /* Affichage du polynome */
    printf("P1(X) = ");
    for (i = degre1; i > 0; i--) {
        printf("%d", coefficients1[i]);
        if (i > 2) {
            printf("X^%d + ",i-1);
        }else if (i == 2) {
            printf("X + ");
        }
    }
    printf("\n");
    printf("P2(X) = ");
    for (i = degre2; i > 0; i--) {
        printf("%d", coefficients2[i]);
        if (i > 2) {
            printf("X^%d + ",i-1);
        }else if (i == 2) {
            printf("X + ");
        }
    }
    printf("\n");
    printf("Entrez la valeur de X : ");
    scanf("%lf", &X);
    printf("P1(%d) + P2(%d) = ", X, X);
    int maxDegre = degre1;
    if(degre1 < degre2){
        int maxDegre = degre2;
    }
    double sumCoeff[maxDegre];
    for(i = maxDegre; i > 0; i--){
        if(degre1 >= i && degre2 >= i){
            sumCoeff[i] = pow(coefficients1[i] + coefficients2[i], X);
            printf("%d\n", sumCoeff[i]);
        }else if(degre1 >= i){
            sumCoeff[i] = pow(coefficients1[i], X);
        }else if(degre2 >= i){
            sumCoeff[i] = pow(coefficients2[i], X);
        }
    }
    float sum;
    for (i = maxDegre; i > 0; i--) {
        printf("%f", sumCoeff[i]);
        sum += sumCoeff[i];
        if (i >= 2) {
            printf(" + ",i-1);
        }
    }
    printf(" = %d", sum);
    return EXIT_SUCCESS;;
}