<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Non classé Archives - CISP L&#039;ENVOL À ANDENNE ASBL</title>
	<atom:link href="https://lenvolandenne.be/category/non-classe/feed/" rel="self" type="application/rss+xml" />
	<link>https://lenvolandenne.be/category/non-classe/</link>
	<description>CENTRE D&#039;ALPHABÉTISATION POUR ADULTES</description>
	<lastBuildDate>Thu, 05 Mar 2026 14:33:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://lenvolandenne.be/wp-content/uploads/2025/02/cropped-envol-logo-blanc-carre-noir-32x32.png</url>
	<title>Non classé Archives - CISP L&#039;ENVOL À ANDENNE ASBL</title>
	<link>https://lenvolandenne.be/category/non-classe/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>25 mots de base en informatique</title>
		<link>https://lenvolandenne.be/2026/03/05/25-mots-de-base-en-informatique/</link>
					<comments>https://lenvolandenne.be/2026/03/05/25-mots-de-base-en-informatique/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 14:29:28 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://lenvolandenne.be/?p=5306</guid>

					<description><![CDATA[<p>Mots croisés – Informatique (25 mots) + Questions 🧩 Mots croisés – Informatique (25 mots) Clique sur “Nouvelle grille”. Les ... <a title="25 mots de base en informatique" class="read-more" href="https://lenvolandenne.be/2026/03/05/25-mots-de-base-en-informatique/" aria-label="En savoir plus sur 25 mots de base en informatique">Lire plus</a></p>
<p>The post <a href="https://lenvolandenne.be/2026/03/05/25-mots-de-base-en-informatique/">25 mots de base en informatique</a> appeared first on <a href="https://lenvolandenne.be">CISP L&#039;ENVOL À ANDENNE ASBL</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="5306" class="elementor elementor-5306">
				<div class="elementor-element elementor-element-05537e4 e-con-full e-flex e-con e-parent" data-id="05537e4" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-aa70d22 elementor-widget__width-inherit elementor-widget elementor-widget-html" data-id="aa70d22" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
					<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Mots croisés – Informatique (25 mots) + Questions</title>
<style>
  body{font-family:Arial, sans-serif; background:#f6f7fb; margin:0; padding:18px; color:#111;}
  h1{margin:0 0 8px;}
  .hint{font-size:14px; color:#475569; margin-top:6px;}
  .bar{display:flex; gap:10px; flex-wrap:wrap; margin:12px 0 16px;}
  button{padding:10px 14px; border:0; border-radius:10px; cursor:pointer; font-size:16px;}
  button.primary{background:#2563eb; color:#fff;}
  button.secondary{background:#111827; color:#fff;}
  button.soft{background:#e5e7eb;}
  .wrap{display:grid; grid-template-columns: 1fr; gap:14px; max-width:1200px;}
  @media (min-width: 980px){ .wrap{grid-template-columns: 1.1fr 0.9fr;} }

  .card{background:#fff; border-radius:14px; padding:14px; box-shadow:0 6px 18px rgba(0,0,0,.06);}
  .gridWrap{overflow:auto;}
  table{border-collapse:collapse; margin:auto;}
  td{width:32px; height:32px; border:1px solid #cbd5e1; text-align:center; vertical-align:middle; position:relative;}
  td.block{background:#111827; border-color:#111827;}
  td.cell input{
    width:100%; height:100%; border:0; outline:0; text-align:center;
    font-size:18px; text-transform:uppercase; background:transparent;
  }
  .num{position:absolute; top:2px; left:3px; font-size:10px; color:#334155;}

  .words{line-height:1.8; font-size:14px;}
  .pill{display:inline-block; padding:4px 10px; margin:4px 6px 0 0; background:#eef2ff; border-radius:999px;}

  .cols2{display:grid; gap:10px;}
  @media (min-width: 700px){ .cols2{grid-template-columns: 1fr 1fr;} }

  .clues h3{margin:8px 0 6px;}

  /* &#x2705; IMPORTANT : plus de numérotation auto -> on utilise <ul> sans puces */
  .clues ul{margin:0; padding-left:0; list-style:none;}
  .clues li{margin:6px 0; color:#111;}

  .clues .small{color:#64748b; font-size:12px; margin-top:8px;}
</style>
</head>
<body>

<h1><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Mots croisés – Informatique (25 mots)</h1>
<div class="hint">Clique sur “Nouvelle grille”. Les questions “Horizontaux / Verticaux” s’adaptent à chaque nouvelle grille.</div>

<div class="bar">
  <button class="primary" id="btnNew">Nouvelle grille</button>
  <button class="soft" id="btnClear">Effacer réponses</button>
  <button class="secondary" id="btnToggle">Afficher la solution</button>
</div>

<div class="wrap">
  <div class="card gridWrap">
    <strong>Grille</strong>
    <div class="hint" id="status"></div>
    <div id="grid"></div>
  </div>

  <div class="card">
    <strong>Banque de mots (réponses)</strong>
    <div class="words" id="wordBank"></div>

    <hr style="border:none;border-top:1px solid #e5e7eb;margin:12px 0;">

    <div class="clues">
      <div class="cols2">
        <div>
          <h3>Horizontaux</h3>
          <ul id="across"></ul>
        </div>
        <div>
          <h3>Verticaux</h3>
          <ul id="down"></ul>
        </div>
      </div>
      <div class="small">Astuce : pour un groupe très débutant, tu peux lire les questions à voix haute.</div>
    </div>
  </div>
</div>

<script>
/* ====== 25 mots (sans accents pour éviter les soucis clavier) ====== */
const WORDS = [
  "BUREAU","DOSSIER","FICHIER","ECRAN","SOURIS","CLAVIER","ICONE","FENETRE","MENU","BARRE",
  "COPIER","COLLER","COUPER","OUVRIR","FERMER","SUPPRIMER","RESTAURER","INTERNET","EMAIL","MOTDEPASSE",
  "SITE","TELECHARGER","IMAGE","DOCUMENT","WRITER"
];

/* ====== Questions / définitions (simples) ====== */
const CLUES = {
  BUREAU: "Espace principal de l’ordinateur où l’on voit les icônes.",
  DOSSIER: "Contenant pour ranger plusieurs fichiers.",
  FICHIER: "Un document enregistré sur l’ordinateur.",
  ECRAN: "Partie qui affiche l’image et le texte.",
  SOURIS: "Accessoire pour cliquer et déplacer le pointeur.",
  CLAVIER: "Accessoire pour taper des lettres et des chiffres.",
  ICONE: "Petite image sur laquelle on clique.",
  FENETRE: "Zone qui s’ouvre à l’écran pour une application.",
  MENU: "Liste d’options (Fichier, Édition…).",
  BARRE: "Ligne avec des boutons ou des outils.",
  COPIER: "Dupliquer un texte / un fichier (sans l’enlever).",
  COLLER: "Mettre ce qu’on a copié à un endroit.",
  COUPER: "Enlever d’un endroit pour mettre ailleurs.",
  OUVRIR: "Accéder à un fichier / une application.",
  FERMER: "Arrêter une fenêtre / un programme.",
  SUPPRIMER: "Mettre à la poubelle (effacer).",
  RESTAURER: "Récupérer ce qui a été effacé (revenir en arrière).",
  INTERNET: "Réseau mondial pour naviguer et chercher.",
  EMAIL: "Message envoyé par internet.",
  MOTDEPASSE: "Suite secrète pour se connecter.",
  SITE: "Page ou ensemble de pages sur internet.",
  TELECHARGER: "Mettre un fichier d’internet vers l’ordinateur.",
  IMAGE: "Photo ou dessin sur l’ordinateur.",
  DOCUMENT: "Texte (lettre, cours…) enregistré.",
  WRITER: "Logiciel pour écrire un texte (LibreOffice)."
};

const N = 25; // grille interne (on rogne ensuite)
let solutionVisible = false;
let current = null; // {trimGrid, numbers, rows, cols}

function shuffle(a){
  for(let i=a.length-1;i>0;i--){
    const j = Math.floor(Math.random()*(i+1));
    [a[i],a[j]]=[a[j],a[i]];
  }
  return a;
}

function makeEmptyGrid(){
  return Array.from({length:N}, ()=> Array.from({length:N}, ()=> " "));
}

function canPlace(grid, word, r, c, dir){
  const L = word.length;
  if(r<0 || c<0) return false;

  if(dir==="A"){
    if(c+L>N) return false;
    if(c-1>=0 && grid[r][c-1] !== " ") return false;
    if(c+L<N && grid[r][c+L] !== " ") return false;

    for(let i=0;i<L;i++){
      const rr=r, cc=c+i, ch=word[i];
      const cell=grid[rr][cc];
      if(cell!==" " && cell!==ch) return false;

      if(cell===" "){
        if(rr-1>=0 && grid[rr-1][cc] !== " ") return false;
        if(rr+1<N && grid[rr+1][cc] !== " ") return false;
      }
    }
    return true;
  } else {
    if(r+L>N) return false;
    if(r-1>=0 && grid[r-1][c] !== " ") return false;
    if(r+L<N && grid[r+L][c] !== " ") return false;

    for(let i=0;i<L;i++){
      const rr=r+i, cc=c, ch=word[i];
      const cell=grid[rr][cc];
      if(cell!==" " && cell!==ch) return false;

      if(cell===" "){
        if(cc-1>=0 && grid[rr][cc-1] !== " ") return false;
        if(cc+1<N && grid[rr][cc+1] !== " ") return false;
      }
    }
    return true;
  }
}

function place(grid, word, r, c, dir){
  for(let i=0;i<word.length;i++){
    if(dir==="A") grid[r][c+i]=word[i];
    else grid[r+i][c]=word[i];
  }
}

function findBestPosition(grid, word){
  let best=null, bestScore=-1;

  for(let r=0;r<N;r++){
    for(let c=0;c<N;c++){
      const g = grid[r][c];
      if(g===" ") continue;
      for(let i=0;i<word.length;i++){
        if(word[i]!==g) continue;

        // horizontal
        let sr=r, sc=c-i;
        if(canPlace(grid, word, sr, sc, "A")){
          let inter=0;
          for(let k=0;k<word.length;k++){
            if(grid[sr][sc+k]===word[k]) inter++;
          }
          if(inter>bestScore){
            bestScore=inter; best={r:sr,c:sc,dir:"A"};
          }
        }
        // vertical
        sr=r-i; sc=c;
        if(canPlace(grid, word, sr, sc, "D")){
          let inter=0;
          for(let k=0;k<word.length;k++){
            if(grid[sr+k][sc]===word[k]) inter++;
          }
          if(inter>bestScore){
            bestScore=inter; best={r:sr,c:sc,dir:"D"};
          }
        }
      }
    }
  }

  if(!best){
    for(const dir of ["A","D"]){
      for(let t=0;t<2500;t++){
        const r=Math.floor(Math.random()*N);
        const c=Math.floor(Math.random()*N);
        if(canPlace(grid, word, r, c, dir)) return {r,c,dir};
      }
    }
    return null;
  }
  return best;
}

function trimGrid(grid){
  let minR=N, maxR=0, minC=N, maxC=0, used=false;
  for(let r=0;r<N;r++){
    for(let c=0;c<N;c++){
      if(grid[r][c]!==" "){
        used=true;
        minR=Math.min(minR,r); maxR=Math.max(maxR,r);
        minC=Math.min(minC,c); maxC=Math.max(maxC,c);
      }
    }
  }
  if(!used) return null;

  const rows = maxR-minR+1;
  const cols = maxC-minC+1;
  const out = Array.from({length:rows}, (_,rr)=>
    Array.from({length:cols}, (_,cc)=> grid[minR+rr][minC+cc]===" " ? "#" : grid[minR+rr][minC+cc])
  );
  return {out, rows, cols};
}

function numberGrid(trim){
  const {out, rows, cols} = trim;
  const nums = Array.from({length:rows}, ()=> Array.from({length:cols}, ()=> 0));
  let num=1;
  for(let r=0;r<rows;r++){
    for(let c=0;c<cols;c++){
      if(out[r][c]==="#") continue;
      const startAcross = (c===0 || out[r][c-1]==="#") && (c+1<cols && out[r][c+1]!=="#");
      const startDown   = (r===0 || out[r-1][c]==="#") && (r+1<rows && out[r+1][c]!=="#");
      if(startAcross || startDown){
        nums[r][c]=num++;
      }
    }
  }
  return nums;
}

function generateCrossword(){
  for(let attempt=1; attempt<=60; attempt++){
    const grid = makeEmptyGrid();
    const words = shuffle([...WORDS].sort((a,b)=> b.length-a.length));

    const first = words[0];
    const r0 = Math.floor(N/2);
    const c0 = Math.floor((N-first.length)/2);
    if(!canPlace(grid, first, r0, c0, "A")) continue;
    place(grid, first, r0, c0, "A");

    let ok=true;
    for(let i=1;i<words.length;i++){
      const w = words[i];
      const pos = findBestPosition(grid, w);
      if(!pos){ ok=false; break; }
      place(grid, w, pos.r, pos.c, pos.dir);
    }
    if(!ok) continue;

    const t = trimGrid(grid);
    if(!t) continue;

    const nums = numberGrid(t);
    return {trimGrid:t.out, numbers:nums, rows:t.rows, cols:t.cols};
  }
  return null;
}

function renderWordBank(){
  const el=document.getElementById("wordBank");
  el.innerHTML = WORDS.map(w=> `<span class="pill">${w}</span>`).join("");
}

function renderGrid(data){
  const {trimGrid, numbers, rows, cols} = data;
  const container=document.getElementById("grid");
  container.innerHTML="";

  const table=document.createElement("table");
  table.setAttribute("aria-label","Grille de mots croisés");

  for(let r=0;r<rows;r++){
    const tr=document.createElement("tr");
    for(let c=0;c<cols;c++){
      const td=document.createElement("td");
      const cell=trimGrid[r][c];

      if(cell==="#"){
        td.className="block";
      } else {
        td.className="cell";
        const n = numbers[r][c];
        if(n){
          const sp=document.createElement("span");
          sp.className="num";
          sp.textContent=n;
          td.appendChild(sp);
        }

        const inp=document.createElement("input");
        inp.maxLength=1;
        inp.dataset.r=r;
        inp.dataset.c=c;
        inp.autocomplete="off";
        inp.spellcheck=false;

        inp.addEventListener("input", (e)=>{
          e.target.value = (e.target.value || "").toUpperCase().replace(/[^A-Z]/g,"");
        });

        td.appendChild(inp);

        if(solutionVisible){
          inp.value = cell;
          inp.disabled = true;
        }
      }
      tr.appendChild(td);
    }
    table.appendChild(tr);
  }

  container.appendChild(table);
}

function clearAnswers(){
  if(!current || solutionVisible) return;
  document.querySelectorAll("td.cell input").forEach(i=> i.value="");
}

function toggleSolution(){
  solutionVisible = !solutionVisible;
  document.getElementById("btnToggle").textContent = solutionVisible ? "Masquer la solution" : "Afficher la solution";
  if(current){
    renderGrid(current);
  }
}

/* ====== Extraction des entrées Horizontaux / Verticaux depuis la grille solution ====== */
function extractEntries(data){
  const {trimGrid, numbers, rows, cols} = data;
  const across=[], down=[];

  function readWord(r,c,dir){
    let w="";
    if(dir==="A"){
      while(c<cols && trimGrid[r][c] !== "#"){ w += trimGrid[r][c]; c++; }
    } else {
      while(r<rows && trimGrid[r][c] !== "#"){ w += trimGrid[r][c]; r++; }
    }
    return w;
  }

  for(let r=0;r<rows;r++){
    for(let c=0;c<cols;c++){
      if(trimGrid[r][c]==="#") continue;
      const n = numbers[r][c];
      if(!n) continue;

      const startAcross = (c===0 || trimGrid[r][c-1]==="#") && (c+1<cols && trimGrid[r][c+1]!=="#");
      const startDown   = (r===0 || trimGrid[r-1][c]==="#") && (r+1<rows && trimGrid[r+1][c]!=="#");

      if(startAcross){
        const ans = readWord(r,c,"A");
        across.push({n, ans});
      }
      if(startDown){
        const ans = readWord(r,c,"D");
        down.push({n, ans});
      }
    }
  }

  across.sort((a,b)=>a.n-b.n);
  down.sort((a,b)=>a.n-b.n);

  return {across, down};
}

function renderClues(data){
  const {across, down} = extractEntries(data);

  const elA=document.getElementById("across");
  const elD=document.getElementById("down");
  elA.innerHTML="";
  elD.innerHTML="";

  function liFor(entry){
    const li=document.createElement("li");
    const clue = CLUES[entry.ans] || "Mot informatique.";
    // &#x2705; plus de numérotation en double : on affiche seulement le numéro de grille
    li.innerHTML = `<strong>${entry.n}.</strong> ${clue}`;
    return li;
  }

  across.forEach(e=> elA.appendChild(liFor(e)));
  down.forEach(e=> elD.appendChild(liFor(e)));
}

function newGrid(){
  document.getElementById("status").textContent = "Génération de la grille…";
  const data = generateCrossword();
  if(!data){
    document.getElementById("status").textContent = "Impossible de générer une grille (réessaie).";
    return;
  }
  current = data;
  document.getElementById("status").textContent = `Grille générée : ${data.rows} lignes × ${data.cols} colonnes.`;
  renderGrid(current);
  renderClues(current);
}

document.getElementById("btnNew").addEventListener("click", ()=>{
  solutionVisible=false;
  document.getElementById("btnToggle").textContent="Afficher la solution";
  newGrid();
});
document.getElementById("btnClear").addEventListener("click", clearAnswers);
document.getElementById("btnToggle").addEventListener("click", toggleSolution);

renderWordBank();
newGrid();
</script>

</body>
</html>				</div>
				</div>
				</div>
				</div>
		<p>The post <a href="https://lenvolandenne.be/2026/03/05/25-mots-de-base-en-informatique/">25 mots de base en informatique</a> appeared first on <a href="https://lenvolandenne.be">CISP L&#039;ENVOL À ANDENNE ASBL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lenvolandenne.be/2026/03/05/25-mots-de-base-en-informatique/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
