Exercice de Grammaire: Les Adjectifs Possessifs

body {
font-family: ‘Segoe UI’, Tahoma, Geneva, Verdana, sans-serif;
max-width: 100%;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
}
h1, h2, h3 {
color: #2c3e50;
}
.container {
background-color: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
max-width: 100%;
margin: 0 auto;
}
.subscription-form {
background-color: #f4f8e8;
padding: 20px;
border-radius: 8px;
margin-bottom: 30px;
}
.exercise-container {
display: none;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input, select {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
}
button {
background-color: #4caf50;
color: white;
border: none;
padding: 12px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
button:hover {
background-color: #388e3c;
}
.exercise-text {
line-height: 2;
font-size: 18px;
}
.gap {
border-bottom: 1px solid #333;
padding: 0 5px;
margin: 0 3px;
min-width: 50px;
display: inline-block;
}
input.gap-input {
width: 100px;
border: none;
border-bottom: 1px solid #333;
font-size: 16px;
text-align: center;
}
.context {
color: #666;
font-size: 14px;
font-style: italic;
margin-left: 2px;
}
.result {
margin-top: 30px;
padding: 20px;
background-color: #f5fef5;
border-radius: 8px;
display: none;
}
.badge {
text-align: center;
margin-top: 30px;
padding: 20px;
display: none;
}
.error {
color: red;
font-size: 14px;
}
#badgePreview {
position: relative;
width: 300px;
height: 300px;
margin: 0 auto;
overflow: hidden;
}
.badge-outer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
background: linear-gradient(45deg, #4caf50, #388e3c, #2e7d32, #1b5e20);
display: flex;
justify-content: center;
align-items: center;
}
.badge-inner {
width: 90%;
height: 90%;
border-radius: 50%;
background-color: white;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 15px;
box-sizing: border-box;
}
.badge-title {
font-size: 16px;
font-weight: bold;
margin-bottom: 10px;
color: #2c3e50;
}
.badge-name {
font-size: 18px;
font-weight: bold;
margin-bottom: 5px;
color: #4caf50;
}
.badge-info {
font-size: 14px;
margin-bottom: 5px;
text-align: center;
}
.badge-icon {
margin-bottom: 10px;
width: 60px;
height: 60px;
}
.badge-actions {
text-align: center;
margin-top: 20px;
display: none;
}
.rules-section {
background-color: #e5f5e5;
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
border-left: 4px solid #4caf50;
}
.rules-section h3 {
margin-top: 0;
color: #2e7d32;
}
.rules-section ul {
padding-left: 20px;
}
.rules-toggle {
margin-bottom: 15px;
text-decoration: underline;
color: #4caf50;
cursor: pointer;
}
.hint-button {
background-color: #8bc34a;
color: white;
padding: 5px 10px;
border-radius: 4px;
cursor: pointer;
font-size: 12px;
margin-left: 10px;
vertical-align: middle;
}
.hint-button:hover {
background-color: #689f38;
}
.download-button {
background-color: #2196F3;
color: white;
border: none;
padding: 12px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
margin-top: 15px;
}
.download-button:hover {
background-color: #0b7dda;
}

Exercice de Grammaire: Les Adjectifs Possessifs

Inscrivez-vous pour commencer l’exercice

Veuillez vous abonner et remplir vos informations pour accéder à l’exercice.

Complétez les phrases avec l’adjectif possessif correct

Afficher les règles des adjectifs possessifs

Règles des adjectifs possessifs

  • Les adjectifs possessifs indiquent la possession ou l’appartenance. Ils s’accordent en genre et en nombre avec le nom qu’ils déterminent (pas avec le possesseur).
  • En français, les adjectifs possessifs sont:
    • 1ère personne du singulier:
      • Mon (masculin singulier)
      • Ma (féminin singulier)
      • Mes (pluriel)
    • 2ème personne du singulier:
      • Ton (masculin singulier)
      • Ta (féminin singulier)
      • Tes (pluriel)
    • 3ème personne du singulier:
      • Son (masculin singulier)
      • Sa (féminin singulier)
      • Ses (pluriel)
    • 1ère personne du pluriel:
      • Notre (singulier)
      • Nos (pluriel)
    • 2ème personne du pluriel:
      • Votre (singulier)
      • Vos (pluriel)
    • 3ème personne du pluriel:
      • Leur (singulier)
      • Leurs (pluriel)
  • Attention: Devant un nom féminin commençant par une voyelle ou un h muet, on utilise “mon”, “ton”, “son” au lieu de “ma”, “ta”, “sa” (ex: mon amie, ton histoire).
  • Remarque importante: L’adjectif possessif s’accorde avec le nom qui suit (l’objet possédé), pas avec le possesseur.

Choisissez le niveau de difficulté:

Facile
Moyen
Difficile

Les Adjectifs Possessifs (Niveau Facile)
J’ai perdu livre. Tu cherches clés ? Elle a oublié sac à l’école. Nous aimons maison. Vous avez perdu temps. Ils ont rangé affaires. J’aime voiture. Tu as oublié veste. Elle a invité amis. Nous avons rencontré professeurs.

Les Adjectifs Possessifs (Niveau Moyen)
Marie a perdu téléphone et clés hier soir. Nous avons invité voisins pour anniversaire de mariage. As-tu terminé travail pour l’école ? Les enfants ont rangé chambre et jouets. J’adore amie Sophia et famille. Avez-vous préparé bagages pour le voyage ?

Les Adjectifs Possessifs (Niveau Difficile)
Chaque étudiant devrait apporter ordinateur portable et notes de cours. L’artiste a exposé œuvres dans nouvelle galerie. Malgré fatigue, les athlètes ont continué entraînement intensif. ami Pierre et habitude d’arriver en retard nous ont causé des problèmes. Avez-vous confirmé présence à la conférence avec collègues ?

Résultat

Badge de Maîtrise
Adjectifs Possessifs
Niveau:
Score: %

// Variables globales
let currentDifficulty = ‘facile’;
let userInfo = {
prenom: ”,
nom: ”,
email: ”
};

// Attente que le DOM soit chargé
document.addEventListener(‘DOMContentLoaded’, function() {
// Éléments du DOM
const startButton = document.getElementById(‘startButton’);
const changeDifficultyButton = document.getElementById(‘changeDifficultyButton’);
const checkButton = document.getElementById(‘checkButton’);
const generateBadgeButton = document.getElementById(‘generateBadgeButton’);
const downloadBadgeButton = document.getElementById(‘downloadBadgeButton’);
const difficultySelect = document.getElementById(‘difficultySelect’);
const rulesToggle = document.getElementById(‘rulesToggle’);
const rulesSection = document.getElementById(‘rulesSection’);

// Ajout des écouteurs d’événements
startButton.addEventListener(‘click’, startExercise);
changeDifficultyButton.addEventListener(‘click’, changeDifficulty);
checkButton.addEventListener(‘click’, checkAnswers);
generateBadgeButton.addEventListener(‘click’, generateBadge);
downloadBadgeButton.addEventListener(‘click’, downloadBadgePDF);
rulesToggle.addEventListener(‘click’, toggleRules);

// Ajout des indices aux champs de saisie
addHintsToInputs();

// Fonction pour basculer l’affichage des règles
function toggleRules() {
if (rulesSection.style.display === ‘none’) {
rulesSection.style.display = ‘block’;
rulesToggle.textContent = ‘Masquer les règles des adjectifs possessifs’;
} else {
rulesSection.style.display = ‘none’;
rulesToggle.textContent = ‘Afficher les règles des adjectifs possessifs’;
}
}

// Fonction pour démarrer l’exercice
function startExercise() {
// Validation des champs
const prenom = document.getElementById(‘prenom’).value.trim();
const nom = document.getElementById(‘nom’).value.trim();
const email = document.getElementById(‘email’).value.trim();
const subscribe = document.getElementById(‘subscribe’).checked;

// Réinitialisation des messages d’erreur
document.getElementById(‘prenomError’).textContent = ”;
document.getElementById(‘nomError’).textContent = ”;
document.getElementById(‘emailError’).textContent = ”;
document.getElementById(‘subscribeError’).textContent = ”;

let isValid = true;

// Vérification des champs
if (!prenom) {
document.getElementById(‘prenomError’).textContent = ‘Veuillez entrer votre prénom.’;
isValid = false;
}

if (!nom) {
document.getElementById(‘nomError’).textContent = ‘Veuillez entrer votre nom.’;
isValid = false;
}

if (!email) {
document.getElementById(‘emailError’).textContent = ‘Veuillez entrer votre email.’;
isValid = false;
} else if (!validateEmail(email)) {
document.getElementById(‘emailError’).textContent = ‘Veuillez entrer un email valide.’;
isValid = false;
}

if (!subscribe) {
document.getElementById(‘subscribeError’).textContent = ‘Veuillez cocher cette case pour vous abonner.’;
isValid = false;
}

// Si tous les champs sont valides, afficher l’exercice
if (isValid) {
userInfo.prenom = prenom;
userInfo.nom = nom;
userInfo.email = email;

// Cacher le formulaire d’inscription et afficher l’exercice
document.getElementById(‘subscriptionForm’).style.display = ‘none’;
document.getElementById(‘exerciseContainer’).style.display = ‘block’;

// Afficher l’exercice correspondant à la difficulté sélectionnée
showExerciseLevel(currentDifficulty);
}
}

// Fonction pour valider le format de l’email
function validateEmail(email) {
const re = /^[^s@]+@[^s@]+.[^s@]+$/;
return re.test(email);
}

// Fonction pour changer la difficulté de l’exercice
function changeDifficulty() {
const newDifficulty = difficultySelect.value;
showExerciseLevel(newDifficulty);
currentDifficulty = newDifficulty;
}

// Fonction pour afficher l’exercice selon le niveau de difficulté
function showExerciseLevel(level) {
document.getElementById(‘exerciseFacile’).style.display = ‘none’;
document.getElementById(‘exerciseMoyen’).style.display = ‘none’;
document.getElementById(‘exerciseDifficile’).style.display = ‘none’;

document.getElementById(‘exercise’ + level.charAt(0).toUpperCase() + level.slice(1)).style.display = ‘block’;
}

// Fonction pour ajouter des indices aux champs de saisie
function addHintsToInputs() {
const allGapInputs = document.querySelectorAll(‘.gap-input’);
allGapInputs.forEach(input => {
// Ajouter un bouton d’indice à côté de chaque champ
const hintButton = document.createElement(‘span’);
hintButton.className = ‘hint-button’;
hintButton.textContent = ‘?’;
hintButton.title = ‘Afficher un indice’;
hintButton.addEventListener(‘click’, function(e) {
e.stopPropagation();
alert(`Indice: Il faut utiliser un ${input.dataset.hint} ${input.dataset.context}.`);
});
input.insertAdjacentElement(‘afterend’, hintButton);

// Ajouter un petit texte pour montrer le contexte
const context = document.createElement(‘span’);
context.className = ‘context’;
context.textContent = ` ${input.dataset.context}`;
input.insertAdjacentElement(‘afterend’, context);
});
}

// Fonction pour vérifier les réponses
function checkAnswers() {
const resultContainer = document.getElementById(‘resultContainer’);
const scoreDisplay = document.getElementById(‘scoreDisplay’);
const correctionDisplay = document.getElementById(‘correctionDisplay’);

let correctAnswers = 0;
let totalQuestions = 0;
let correctionHtml = ”;

// Récupérer tous les champs de l’exercice actuel
const currentExercise = document.getElementById(‘exercise’ + currentDifficulty.charAt(0).toUpperCase() + currentDifficulty.slice(1));
const inputFields = currentExercise.querySelectorAll(‘.gap-input’);

// Vérifier chaque réponse
inputFields.forEach(input => {
const userAnswer = input.value.trim().toLowerCase();
const correctAnswer = input.dataset.answer.toLowerCase();
totalQuestions++;

if (userAnswer === correctAnswer) {
correctAnswers++;
input.style.color = ‘green’;
correctionHtml += `

Question ${input.dataset.number}: Correct! (${userAnswer})

`;
} else {
input.style.color = ‘red’;
correctionHtml += `

Question ${input.dataset.number}: Incorrect. Vous avez écrit “${userAnswer || ‘(pas de réponse)’}”, la réponse correcte est “${correctAnswer}”.

`;
}
});

// Calculer le score en pourcentage
const scorePercent = Math.round((correctAnswers / totalQuestions) * 100);

// Afficher le résultat
scoreDisplay.innerHTML = `Vous avez obtenu ${correctAnswers}/${totalQuestions} réponses correctes. Score: ${scorePercent}%`;
correctionDisplay.innerHTML = correctionHtml;

// Afficher le conteneur de résultat
resultContainer.style.display = ‘block’;
}

// Fonction pour générer le badge
function generateBadge() {
const badgePreview = document.getElementById(‘badgePreview’);
const badgeActions = document.getElementById(‘badgeActions’);
const badgeNamePreview = document.getElementById(‘badgeNamePreview’);
const badgeLevelPreview = document.getElementById(‘badgeLevelPreview’);
const badgeScorePreview = document.getElementById(‘badgeScorePreview’);
const badgeDatePreview = document.getElementById(‘badgeDatePreview’);

// Récupérer les informations pour le badge
const fullName = `${userInfo.prenom} ${userInfo.nom}`;

// Récupérer le score actuel
const currentExercise = document.getElementById(‘exercise’ + currentDifficulty.charAt(0).toUpperCase() + currentDifficulty.slice(1));
const inputFields = currentExercise.querySelectorAll(‘.gap-input’);
let correctAnswers = 0;
let totalQuestions = inputFields.length;

inputFields.forEach(input => {
const userAnswer = input.value.trim().toLowerCase();
const correctAnswer = input.dataset.answer.toLowerCase();
if (userAnswer === correctAnswer) {
correctAnswers++;
}
});

// Calculer le score en pourcentage
const scorePercent = Math.round((correctAnswers / totalQuestions) * 100);

// Mettre à jour le badge avec les informations de l’utilisateur
badgeNamePreview.textContent = fullName;
badgeLevelPreview.textContent = currentDifficulty.charAt(0).toUpperCase() + currentDifficulty.slice(1);
badgeScorePreview.textContent = scorePercent;
badgeDatePreview.textContent = new Date().toLocaleDateString();

// Afficher le badge et les boutons d’action
badgePreview.style.display = ‘block’;
badgeActions.style.display = ‘block’;
}

// Fonction pour télécharger le badge en PDF
function downloadBadgePDF() {
const { jsPDF } = window.jspdf;
const doc = new jsPDF({
orientation: ‘portrait’,
unit: ‘mm’,
format: ‘a4’
});

// Titre du document
doc.setFontSize(16);
doc.text(‘Certificat de Réussite – Adjectifs Possessifs’, 105, 20, { align: ‘center’ });

// Informations de l’utilisateur
doc.setFontSize(12);
doc.text(`Nom: ${userInfo.prenom} ${userInfo.nom}`, 20, 40);
doc.text(`Email: ${userInfo.email}`, 20, 50);
doc.text(`Niveau: ${currentDifficulty.charAt(0).toUpperCase() + currentDifficulty.slice(1)}`, 20, 60);

// Récupérer le score
const currentExercise = document.getElementById(‘exercise’ + currentDifficulty.charAt(0).toUpperCase() + currentDifficulty.slice(1));
const inputFields = currentExercise.querySelectorAll(‘.gap-input’);
let correctAnswers = 0;
let totalQuestions = inputFields.length;

inputFields.forEach(input => {
const userAnswer = input.value.trim().toLowerCase();
const correctAnswer = input.dataset.answer.toLowerCase();
if (userAnswer === correctAnswer) {
correctAnswers++;
}
});

const scorePercent = Math.round((correctAnswers / totalQuestions) * 100);
doc.text(`Score: ${scorePercent}%`, 20, 70);
doc.text(`Date: ${new Date().toLocaleDateString()}`, 20, 80);

// Ajouter un QR code (simulation)
// Note: Nous utilisons la bibliothèque qrcode-generator pour générer un QR code
const qr = qrcode(4, ‘L’);
qr.addData(`Nom: ${userInfo.prenom} ${userInfo.nom}, Niveau: ${currentDifficulty}, Score: ${scorePercent}%`);
qr.make();
const qrModuleCount = qr.getModuleCount();
const cellSize = 1.5;
const qrSize = qrModuleCount * cellSize;

// Dessiner le QR code
for (let row = 0; row < qrModuleCount; row++) {
for (let col = 0; col < qrModuleCount; col++) {
if (qr.isDark(row, col)) {
doc.setFillColor(0, 0, 0);
doc.rect(150 – qrSize / 2 + col * cellSize, 130 – qrSize / 2 + row * cellSize, cellSize, cellSize, 'F');
}
}
}

// Ajouter un texte au bas du certificat
doc.setFontSize(10);
doc.text('Ce certificat atteste que la personne nommée ci-dessus a complété avec succès', 105, 170, { align: 'center' });
doc.text('l'exercice sur les adjectifs possessifs en français.', 105, 177, { align: 'center' });

// Enregistrer le PDF
doc.save(`certificat_adjectifs_possessifs_${userInfo.prenom}_${userInfo.nom}.pdf`);
}
});

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *