Exercice de Grammaire: L’Accord des Noms Collectifs en Français

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: #e8f4f8;
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: #3498db;
color: white;
border: none;
padding: 12px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
button:hover {
background-color: #2980b9;
}
.exercise-text {
line-height: 2;
font-size: 18px;
}
.accord-input {
width: 220px;
padding: 5px;
border: 1px solid #ddd;
border-radius: 4px;
margin: 0 5px;
font-size: 16px;
}
.accord-input.correct {
background-color: #d4edda;
border-color: #c3e6cb;
}
.accord-input.incorrect {
background-color: #f8d7da;
border-color: #f5c6cb;
}
.result {
margin-top: 30px;
padding: 20px;
background-color: #eafaf1;
border-radius: 8px;
display: none;
}
.certificate {
text-align: center;
margin-top: 30px;
padding: 20px;
border: 2px solid #2c3e50;
border-radius: 8px;
display: none;
}
.difficulty-selector {
margin-bottom: 20px;
}
.error {
color: red;
font-size: 14px;
}
#certificatePreview {
position: relative;
width: 100%;
height: 100%;
background-color: #fff;
border: 10px solid transparent;
border-image: linear-gradient(45deg, #3498db, #2980b9, #1abc9c, #16a085, #27ae60) 1;
box-sizing: border-box;
overflow: hidden;
margin-bottom: 20px;
}
.certificate-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.07;
z-index: 0;
background-position: center;
background-repeat: no-repeat;
background-size: 70%;
}
.certificate-content {
position: relative;
z-index: 1;
padding: 20px;
width: 100%;
height: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.certificate-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.certificate-title {
flex-grow: 1;
text-align: center;
}
.certificate-logo {
width: 120px;
height: 60px;
background-color: #3498db;
border-radius: 5px;
}
.certificate-footer {
display: flex;
justify-content: space-between;
align-items: flex-end;
}
.certificate-qr {
width: 120px;
height: 120px;
display: flex;
justify-content: center;
align-items: center;
background-color: #f9f9f9;
border: 1px solid #ddd;
}
.certificate-qr img {
max-width: 100%;
max-height: 100%;
}
.certificate-signature {
flex-grow: 1;
text-align: center;
}
.triangle-pattern {
position: absolute;
width: 150px;
height: 120px;
}
.triangle-pattern.top-right {
top: 0;
right: 0;
}
.triangle-pattern.bottom-left {
bottom: 0;
left: 0;
}
.info-tooltip {
display: inline-block;
position: relative;
margin-left: 5px;
cursor: help;
}
.info-tooltip:after {
content: “?”;
display: inline-block;
width: 18px;
height: 18px;
line-height: 18px;
text-align: center;
border-radius: 50%;
background-color: #3498db;
color: white;
font-weight: bold;
font-size: 14px;
}
.info-tooltip .tooltip-text {
visibility: hidden;
width: 250px;
background-color: #2c3e50;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 5px;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -125px;
opacity: 0;
transition: opacity 0.3s;
}
.info-tooltip:hover .tooltip-text {
visibility: visible;
opacity: 1;
}
.loading {
display: none;
margin-top: 15px;
font-style: italic;
color: #666;
}
.exercise-level {
margin-bottom: 20px;
}
.rule-box {
background-color: #f0f7fb;
border-left: 5px solid #3498db;
padding: 15px;
margin: 20px 0;
border-radius: 4px;
}

Exercice de Grammaire: L’Accord des Noms Collectifs en Français

Inscrivez-vous pour commencer l’exercice

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

L’Accord des Noms Collectifs en Français

Choisissez le niveau de difficulté:

Facile
Moyen
Difficile

Pour chaque phrase, complétez avec le verbe conjugué correctement selon l’accord avec le nom collectif.

En français, l’accord avec un nom collectif peut se faire au singulier ou au pluriel selon le sens de la phrase. Le nom collectif désigne un ensemble d’êtres ou de choses (équipe, foule, groupe…).

Rappel de la règle :

Un nom collectif désigne un ensemble de personnes, d’animaux ou de choses. L’accord du verbe peut se faire de deux façons :

  • Au singulier : quand on considère l’ensemble comme un tout, une unité
  • Au pluriel : quand on met l’accent sur les éléments qui composent cet ensemble

Exemples :

  • Une foule attend devant le théâtre. (La foule considérée comme une unité)
  • Une foule de spectateurs attendent l’ouverture des portes. (L’accent est mis sur les spectateurs)

L’Accord des Noms Collectifs (Niveau Facile)
Complétez chaque phrase avec le verbe entre parenthèses correctement conjugué.

1. Une équipe de joueurs le match de demain. (préparer)

2. Une foule d’admirateurs devant la salle de concert. (attendre)

3. Le groupe d’étudiants sur ce projet depuis une semaine. (travailler)

4. Une dizaine de personnes en retard à la réunion. (arriver)

5. Une majorité des électeurs pour ce candidat. (voter)

6. Une troupe d’acteurs la pièce tous les soirs. (répéter)

7. Un grand nombre de participants à l’invitation. (répondre)

8. La totalité des frais avant la fin du mois. (rembourser)

9. Un troupeau de moutons dans le pré. (brouter)

10. La moitié des élèves l’examen. (réussir)

11. Le comité de direction tous les lundis. (se réunir)

12. Une multitude d’oiseaux dans le ciel. (s’envoler)

13. Un ensemble de propositions lors de la conférence. (présenter)

14. La totalité de l’équipe au tournoi. (participer)

15. Une partie des étudiants ce jour-là. (être absent)

L’Accord des Noms Collectifs (Niveau Moyen)
Complétez chaque phrase avec le verbe entre parenthèses correctement conjugué.

1. La plupart des invités à l’heure. (arriver)

2. Une nuée d’insectes sur les cultures. (s’abattre)

3. Une série de conférences à l’université. (organiser)

4. Une bande de voleurs par la police. (arrêter)

5. La majorité des votants contre cette proposition. (se prononcer)

6. Une centaine de manifestants dans les rues de la ville. (défiler)

7. L’ensemble des documents par l’administration. (vérifier)

8. Un tas de feuilles mortes le sol du jardin. (joncher)

9. La moitié de la population sous le seuil de pauvreté. (vivre)

10. La plupart du temps à la recherche. (consacrer)

11. Une poignée de militants devant le bâtiment. (manifester)

12. Le reste des participants dans la salle adjacente. (attendre)

13. Une quantité importante de déchets lors de cette opération. (collecter)

14. Une horde de journalistes la célébrité. (poursuivre)

15. Le trio de musiciens tous les soirs dans ce restaurant. (jouer)

L’Accord des Noms Collectifs (Niveau Difficile)
Complétez chaque phrase avec le verbe entre parenthèses correctement conjugué.

1. Une minorité des députés contre la loi, mais ils leur mécontentement. (voter / faire entendre)

3. Le tiers des revenus à l’éducation. (consacrer)

4. Une infinité de possibilités à nous. (s’offrir)

5. Une délégation de représentants par le président, puis ils leurs doléances. (recevoir / exposer)

7. Cette collection de livres rares une fortune. (valoir)

8. Une meute de loups dans la forêt, ils ensemble. (apercevoir / chasser)

10. Cette catégorie de produits très bien. (se vendre)

11. Un essaim d’abeilles près de la ruche. (se former)

12. Plus d’une personne témoin de l’accident. (être)

13. Moins de deux semaines de la date limite. (séparer)

14. Un nombre croissant d’entreprises des pratiques écologiques. (adopter)

15. La quasi-totalité des chercheurs sur ce point. (s’accorder)

Résultats

Certificat de réussite

Certificat d’Excellence

Maîtrise de l’Accord des Noms Collectifs en Français

Ce certificat est décerné à

pour avoir complété avec succès l’exercice sur
l’accord des noms collectifs en français au niveau

avec un score de

Date:

Génération du PDF en cours…

document.addEventListener(‘DOMContentLoaded’, function() {
// S’assurer que jsPDF est disponible
if (typeof window.jspdf === ‘undefined’) {
window.jspdf = window.jsPDF;
}

// Références aux éléments DOM
const subscriptionForm = document.getElementById(‘subscriptionForm’);
const exerciseContainer = document.getElementById(‘exerciseContainer’);
const startButton = document.getElementById(‘startButton’);
const verifyButton = document.getElementById(‘verifyButton’);
const difficultySelect = document.getElementById(‘difficultySelect’);
const changeDifficultyButton = document.getElementById(‘changeDifficultyButton’);
const resultContainer = document.getElementById(‘resultContainer’);
const resultText = document.getElementById(‘resultText’);
const mistakesContainer = document.getElementById(‘mistakesContainer’);
const showCertificateButton = document.getElementById(‘showCertificateButton’);
const certificateContainer = document.getElementById(‘certificateContainer’);
const downloadCertificateButton = document.getElementById(‘downloadCertificateButton’);
const pdfLoading = document.getElementById(‘pdfLoading’);

// Informations de l’utilisateur
let userData = {
prenom: ”,
nom: ”,
email: ”,
difficulty: ‘facile’,
score: 0
};

// Fonction pour afficher l’exercice selon le niveau de difficulté
function showExerciseByDifficulty(difficulty) {
// Masquer tous les exercices
document.querySelectorAll(‘.exercise-level’).forEach(el => {
el.style.display = ‘none’;
});

// Afficher l’exercice correspondant à la difficulté
const exerciseId = ‘exercise’ + difficulty.charAt(0).toUpperCase() + difficulty.slice(1);
document.getElementById(exerciseId).style.display = ‘block’;
userData.difficulty = difficulty;
}

// Démarrer l’exercice
startButton.addEventListener(‘click’, function() {
// Valider le formulaire
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éinitialiser les messages d’erreur
document.getElementById(‘prenomError’).textContent = ”;
document.getElementById(‘nomError’).textContent = ”;
document.getElementById(‘emailError’).textContent = ”;
document.getElementById(‘subscribeError’).textContent = ”;

// Valider les champs
let isValid = true;

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 continuer’;
isValid = false;
}

if (isValid) {
// Enregistrer les données utilisateur
userData.prenom = prenom;
userData.nom = nom;
userData.email = email;

// Masquer le formulaire et afficher l’exercice
subscriptionForm.style.display = ‘none’;
exerciseContainer.style.display = ‘block’;

// Afficher l’exercice selon la difficulté par défaut
showExerciseByDifficulty(userData.difficulty);
}
});

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

// Changer le niveau de difficulté
changeDifficultyButton.addEventListener(‘click’, function() {
const difficulty = difficultySelect.value;
showExerciseByDifficulty(difficulty);

// Réinitialiser les résultats et les champs d’entrée
resultContainer.style.display = ‘none’;
certificateContainer.style.display = ‘none’;
document.querySelectorAll(‘.accord-input’).forEach(input => {
input.value = ”;
input.classList.remove(‘correct’, ‘incorrect’);
});
});

// Vérifier les réponses
verifyButton.addEventListener(‘click’, function() {
let correctAnswers = 0;
let totalQuestions = 0;
const mistakes = [];
const exerciseId = ‘exercise’ + userData.difficulty.charAt(0).toUpperCase() + userData.difficulty.slice(1);
const inputs = document.querySelectorAll(`#${exerciseId} .accord-input`);

totalQuestions = inputs.length;

inputs.forEach(input => {
const userAnswer = input.value.trim().toLowerCase();
const correctAnswer = input.dataset.answer.toLowerCase();
const questionNumber = input.dataset.number;

if (userAnswer === correctAnswer) {
input.classList.add(‘correct’);
input.classList.remove(‘incorrect’);
correctAnswers++;
} else {
input.classList.add(‘incorrect’);
input.classList.remove(‘correct’);

// Récupérer le texte de la question pour l’affichage des erreurs
let questionText = “”;
let node = input.previousSibling;
while (node && node.nodeType === 3) { // 3 = Text node
questionText = node.textContent.trim() + questionText;
node = node.previousSibling;
}

// Ajout du verbe à l’infinitif entre parenthèses
const verbMatch = questionText.match(/((.*?))$/);
const verb = verbMatch ? verbMatch[1] : “”;

mistakes.push({
number: questionNumber,
userAnswer: userAnswer,
correctAnswer: correctAnswer,
questionText: questionText,
verb: verb
});
}
});

// Calculer le score
userData.score = Math.round((correctAnswers / totalQuestions) * 100);

// Afficher les résultats
resultContainer.style.display = ‘block’;
resultText.innerHTML = `Votre score: ${userData.score}% (${correctAnswers} réponses correctes sur ${totalQuestions})`;

// Afficher les erreurs
mistakesContainer.innerHTML = ”;
if (mistakes.length > 0) {
const mistakesTitle = document.createElement(‘h4’);
mistakesTitle.textContent = ‘Vos erreurs:’;
mistakesContainer.appendChild(mistakesTitle);

const mistakesList = document.createElement(‘ul’);
mistakes.forEach(mistake => {
const listItem = document.createElement(‘li’);
listItem.innerHTML = `Question ${mistake.number}: Vous avez répondu “${mistake.userAnswer}” au lieu de “${mistake.correctAnswer}” pour le verbe ${mistake.verb}`;
mistakesList.appendChild(listItem);
});
mistakesContainer.appendChild(mistakesList);
}

// Afficher le bouton de certificat si le score est supérieur à 70%
if (userData.score >= 70) {
showCertificateButton.style.display = ‘block’;
} else {
showCertificateButton.style.display = ‘none’;
}
});

// Afficher le certificat
showCertificateButton.addEventListener(‘click’, function() {
certificateContainer.style.display = ‘block’;

// Remplir les informations du certificat
document.getElementById(‘certificateName’).textContent = `${userData.prenom} ${userData.nom}`;
document.getElementById(‘certificateLevel’).textContent = userData.difficulty;
document.getElementById(‘certificateScore’).textContent = `${userData.score}%`;

// Date du jour
const today = new Date();
const options = { year: ‘numeric’, month: ‘long’, day: ‘numeric’ };
document.getElementById(‘certificateDate’).textContent = today.toLocaleDateString(‘fr-FR’, options);

// Générer un QR code
const qrCodeContainer = document.querySelector(‘.certificate-qr’);
qrCodeContainer.innerHTML = ”;

// Créer les données du QR code
const qrData = `Certificat pour ${userData.prenom} ${userData.nom}nEmail: ${userData.email}nNiveau: ${userData.difficulty}nScore: ${userData.score}%nDate: ${today.toLocaleDateString(‘fr-FR’, options)}`;

// Générer le QR code
const qr = qrcode(0, ‘M’);
qr.addData(qrData);
qr.make();
qrCodeContainer.innerHTML = qr.createImgTag(4);

// Ajouter une image de fond au certificat
const certificateBackground = document.querySelector(‘.certificate-background’);
certificateBackground.style.backgroundImage = “url(‘/api/placeholder/800/600’)”;

// Générer des motifs de triangles pour les coins
const trianglePatterns = document.querySelectorAll(‘.triangle-pattern’);
trianglePatterns.forEach(pattern => {
pattern.innerHTML = generateTrianglePattern();
});
});

// Générer un motif de triangles SVG
function generateTrianglePattern() {
const colors = [‘#3498db’, ‘#2980b9’, ‘#1abc9c’, ‘#16a085’, ‘#27ae60’];
let svg = ”;

for (let i = 0; i < 10; i++) {
const x1 = Math.random() * 150;
const y1 = Math.random() * 120;
const x2 = x1 + (Math.random() * 30 – 15);
const y2 = y1 + (Math.random() * 30 – 15);
const x3 = x1 + (Math.random() * 30 – 15);
const y3 = y1 + (Math.random() * 30 – 15);
const color = colors[Math.floor(Math.random() * colors.length)];
const opacity = Math.random() * 0.3 + 0.1;

svg += “;
}

svg += ”;
return svg;
}

// Télécharger le certificat en PDF
downloadCertificateButton.addEventListener(‘click’, function() {
pdfLoading.style.display = ‘block’;

// Utiliser html2canvas pour capturer le certificat
html2canvas(document.getElementById(‘certificatePreview’)).then(canvas => {
// Créer un nouveau document PDF
const pdf = new jspdf.jsPDF({
orientation: ‘landscape’,
unit: ‘mm’,
format: ‘a4’
});

// Convertir le canvas en image
const imgData = canvas.toDataURL(‘image/png’);

// Ajouter l’image au document PDF
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
pdf.addImage(imgData, ‘PNG’, 0, 0, pdfWidth, pdfHeight);

// Télécharger le PDF
pdf.save(`certificat_${userData.prenom}_${userData.nom}_${userData.difficulty}.pdf`);

pdfLoading.style.display = ‘none’;
});
});

// Initialiser le premier niveau d’exercice
showExerciseByDifficulty(‘facile’);
});

Dejar un comentario

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