Langage C/C++

Guide : Comment créer un QCM en langage C avec cases à cocher

×

Recommandés

Appeler une Fonction en C - Exercices...
L'un des concepts fondamentaux en programmation...
En savoir plus
Appeler une Fonction en C - Guide...
Appeler une fonction en C est...
En savoir plus
Multiplication de Deux Matrices en Langage C...
Dans cet article, nous...
En savoir plus
Calcul de puissance en C avec pow()...
Dans cet article, nous explorerons l'utilisation...
En savoir plus
Convertir une Chaîne de Caractères en Majuscule...
La manipulation de chaînes de caractères...
En savoir plus
Convertir une chaîne de caractères en minuscules...
Dans cet article, nous explorerons différentes...
En savoir plus

Le QCM en langage C peut être simulé dans un programme console en offrant plusieurs réponses à l’utilisateur, où il devra choisir en entrant un numéro correspondant à sa sélection. Bien qu’il ne soit pas possible d’implémenter des cases à cocher graphiques en langage C directement (puisque C est un langage de bas niveau qui fonctionne surtout en mode texte), nous pouvons simuler ce comportement en permettant à l’utilisateur de faire plusieurs sélections via des entrées multiples.

Objectifs :

  • Créer un programme en langage C pour simuler un QCM.
  • Permettre à l’utilisateur de choisir plusieurs réponses (simuler les cases à cocher).
  • Valider les réponses et calculer un score.

Étapes :

  1. Définir les questions et les choix
  2. Recueillir les réponses de l’utilisateur
  3. Valider les réponses
  4. Afficher les résultats

Exemple de programme

Voici un exemple simple de programme C pour un QCM avec plusieurs questions et des réponses multiples possibles :

#include <stdio.h>

void afficher_question(int numero_question, char* question, char* options[]) {
    printf("Question %d: %s\n", numero_question, question);
    for (int i = 0; i < 4; i++) {
        printf("%d. %s\n", i + 1, options[i]);
    }
    printf("Entrez vos réponses (séparées par des espaces) et terminez par '0' : ");
}

int est_reponse_correcte(int reponses_utilisateur[], int bonnes_reponses[], int taille) {
    for (int i = 0; i < taille; i++) {
        if (reponses_utilisateur[i] != bonnes_reponses[i]) {
            return 0; // Faux
        }
    }
    return 1; // Vrai
}

int main() {
    // Définir les questions et les options
    char* questions[] = {
        "Quels sont les langages de programmation ?",
        "Quels sont les types de boucles en C ?"
    };

    char* options_q1[] = {"Python", "C", "HTML", "Java"};
    char* options_q2[] = {"for", "while", "if", "do-while"};

    int bonnes_reponses_q1[] = {2, 4};  // C et Java
    int bonnes_reponses_q2[] = {1, 2, 4};  // for, while, do-while

    int reponses_utilisateur[4];
    int score = 0;

    // Question 1
    afficher_question(1, questions[0], options_q1);

    // Lire les réponses
    int index = 0;
    while (1) {
        scanf("%d", &reponses_utilisateur[index]);
        if (reponses_utilisateur[index] == 0) {
            break;
        }
        index++;
    }

    // Validation des réponses pour la question 1
    if (est_reponse_correcte(reponses_utilisateur, bonnes_reponses_q1, 2)) {
        score++;
    }

    // Réinitialiser pour la prochaine question
    for (int i = 0; i < 4; i++) {
        reponses_utilisateur[i] = 0;
    }
    index = 0;

    // Question 2
    afficher_question(2, questions[1], options_q2);

    while (1) {
        scanf("%d", &reponses_utilisateur[index]);
        if (reponses_utilisateur[index] == 0) {
            break;
        }
        index++;
    }

    // Validation des réponses pour la question 2
    if (est_reponse_correcte(reponses_utilisateur, bonnes_reponses_q2, 3)) {
        score++;
    }

    // Affichage du score
    printf("Votre score : %d/2\n", score);

    return 0;
}

Explication du programme

  1. Questions et options :
    • Deux questions sont définies dans des tableaux de chaînes de caractères, avec leurs options correspondantes.
  2. Afficher les questions :
    • La fonction afficher_question() affiche les questions et les options.
  3. Recueillir les réponses :
    • L’utilisateur entre plusieurs réponses en une seule ligne, séparées par des espaces, et termine par « 0 ».
  4. Validation :
    • La fonction est_reponse_correcte() compare les réponses de l’utilisateur avec les bonnes réponses.
  5. Score :
    • Un score est calculé en fonction des bonnes réponses données par l’utilisateur.

Comment améliorer ce programme ?

  • Interface utilisateur graphique : Pour créer de vraies cases à cocher, il faudrait utiliser une interface graphique avec des bibliothèques comme GTK ou Qt.
  • Plus de questions : Ajouter plus de questions et une validation dynamique.
  • Sauvegarde des résultats : Enregistrer les résultats dans un fichier.

Ce programme vous permettra de créer un QCM en console C, avec la possibilité de sélectionner plusieurs réponses, simulant ainsi des cases à cocher.

Comment ajouter un chronomètre au QCM ?

Pour ajouter un chronomètre à votre programme de QCM en langage C, vous pouvez utiliser la bibliothèque standard <time.h>, qui vous permet de gérer et mesurer le temps écoulé. L’idée est de mesurer le temps que l’utilisateur prend pour répondre à chaque question ou pour l’ensemble du QCM.

Voici comment vous pouvez implémenter un chronomètre qui limite le temps de réponse à chaque question.

Étapes :

  1. Initialiser le chronomètre avant de poser la question.
  2. Mesurer le temps écoulé pendant que l’utilisateur répond.
  3. Limiter le temps à une certaine durée pour chaque question (par exemple, 30 secondes).
  4. Si le temps est écoulé, passer à la question suivante automatiquement.

Exemple avec chronomètre :

#include <stdio.h>
#include <time.h>  // Pour la gestion du temps

#define TEMPS_LIMITE 30  // Temps limite en secondes par question

void afficher_question(int numero_question, char* question, char* options[]) {
    printf("Question %d: %s\n", numero_question, question);
    for (int i = 0; i < 4; i++) {
        printf("%d. %s\n", i + 1, options[i]);
    }
    printf("Entrez vos réponses (séparées par des espaces) et terminez par '0' : ");
}

int est_reponse_correcte(int reponses_utilisateur[], int bonnes_reponses[], int taille) {
    for (int i = 0; i < taille; i++) {
        if (reponses_utilisateur[i] != bonnes_reponses[i]) {
            return 0; // Faux
        }
    }
    return 1; // Vrai
}

int main() {
    // Définir les questions et les options
    char* questions[] = {
        "Quels sont les langages de programmation ?",
        "Quels sont les types de boucles en C ?"
    };

    char* options_q1[] = {"Python", "C", "HTML", "Java"};
    char* options_q2[] = {"for", "while", "if", "do-while"};

    int bonnes_reponses_q1[] = {2, 4};  // C et Java
    int bonnes_reponses_q2[] = {1, 2, 4};  // for, while, do-while

    int reponses_utilisateur[4];
    int score = 0;
    time_t debut, fin;  // Variables pour le chronomètre

    // Question 1
    afficher_question(1, questions[0], options_q1);

    // Chronométrage du temps de réponse
    time(&debut);  // Prendre le temps de départ
    int index = 0;

    // Lire les réponses jusqu'à ce que le temps soit écoulé ou que l'utilisateur entre "0"
    while (1) {
        time(&fin);  // Prendre le temps actuel
        if (difftime(fin, debut) >= TEMPS_LIMITE) {
            printf("\nTemps écoulé !\n");
            break;
        }

        scanf("%d", &reponses_utilisateur[index]);
        if (reponses_utilisateur[index] == 0) {
            break;
        }
        index++;
    }

    // Validation des réponses pour la question 1
    if (est_reponse_correcte(reponses_utilisateur, bonnes_reponses_q1, 2)) {
        score++;
    }

    // Réinitialiser pour la prochaine question
    for (int i = 0; i < 4; i++) {
        reponses_utilisateur[i] = 0;
    }
    index = 0;

    // Question 2
    afficher_question(2, questions[1], options_q2);

    // Chronométrage du temps de réponse
    time(&debut);  // Prendre le temps de départ

    while (1) {
        time(&fin);  // Prendre le temps actuel
        if (difftime(fin, debut) >= TEMPS_LIMITE) {
            printf("\nTemps écoulé !\n");
            break;
        }

        scanf("%d", &reponses_utilisateur[index]);
        if (reponses_utilisateur[index] == 0) {
            break;
        }
        index++;
    }

    // Validation des réponses pour la question 2
    if (est_reponse_correcte(reponses_utilisateur, bonnes_reponses_q2, 3)) {
        score++;
    }

    // Affichage du score
    printf("Votre score : %d/2\n", score);

    return 0;
}

Explication du code avec chronomètre

Bibliothèque <time.h> :

  • Utilisée pour gérer le temps et mesurer le temps écoulé entre deux événements.

time_t debut, fin; :

  • Deux variables de type time_t pour stocker le temps de début (debut) et le temps de fin (fin).

Fonction time() :

  • La fonction time(&debut) est utilisée pour obtenir le temps actuel, à un instant donné, et le stocker dans la variable debut.

Fonction difftime() :

  • La fonction difftime(fin, debut) calcule la différence de temps en secondes entre fin (temps actuel) et debut (temps de départ).

Limitation de temps :

  • Si le temps écoulé (difftime(fin, debut)) atteint ou dépasse la valeur définie dans #define TEMPS_LIMITE (par exemple, 30 secondes), le programme interrompt la saisie des réponses et passe à la question suivante.

Résultat

Le programme donne à l’utilisateur 30 secondes pour répondre à chaque question. Si le temps est écoulé avant que l’utilisateur ne termine de répondre, un message s’affiche disant que le temps est écoulé, et le programme passe à la question suivante.

Améliorations possibles

  • Appliquer une limite de temps globale pour l’ensemble du questionnaire.
  • Afficher un compte à rebours pour informer l’utilisateur du temps restant.
  • Gérer une interface graphique pour afficher les questions avec un chronomètre visuel en utilisant des bibliothèques comme GTK ou Qt pour une véritable interface utilisateur avec des cases à cocher.

Recommandés

Guide complet : strcpy en C
La fonction strcpy en C est...
En savoir plus
Fiche Pratique : Réussir un QCM en...
Un questionnaire à choix multiple (QCM)...
En savoir plus
Les Types de Données en C :...
Le langage C, inventé par Dennis...
En savoir plus
Calculer une factorielle en C : Méthodes...
Calculer une factorielle en...
En savoir plus
Pair impair en langage C : Concepts...
La notion de pair et impair...
En savoir plus
Cours et tutoriel du langage C /...
Ce tutoriel du langage C vous...
En savoir plus
AZ

Recent Posts

Méthode des points de vue narratifs en 4ème

Introduction En classe de 4ème, l’étude du récit occupe une place importante dans l’apprentissage du…

6 heures ago

Classification des Documents : Organiser et Automatiser la Gestion Documentaire

Dans toute organisation moderne — entreprise, association, service administratif ou bureau de projet — la…

2 jours ago

Modèle de Bilan Actif Passif sur Excel : Concevoir un tableau comptable clair et automatisé

Dans la pratique comptable, le bilan constitue l’un des documents les plus fondamentaux pour comprendre…

3 jours ago

Fiche Méthode analyse linéaire + guide complet pour la réussir

L’analyse linéaire impressionne souvent plus qu’elle ne le devrait. Au moment d’aborder l’oral du bac…

3 jours ago

Analyse linéaire au bac français : méthode complète, exemples et conseils pour réussir l’oral

L’analyse linéaire occupe une place centrale à l’oral du bac français. C’est l’exercice qui permet…

3 jours ago

Créer une fiche de suivi en ligne : générateur personnalisable à imprimer

Créer une fiche de suivi claire et adaptée à son activité prend souvent plus de…

3 jours ago

This website uses cookies.