From fcb164684c9ce681683e6f46c7e3454647ccfd52 Mon Sep 17 00:00:00 2001 From: Mathieu Date: Sat, 20 Jul 2019 18:08:55 +0200 Subject: [PATCH 1/2] Beautify js + remove html comment --- index.html | 14 +-- main.js | 34 +++-- source.js | 223 ++++++++++++++++---------------- ui.js | 363 ++++++++++++++++++++++++++--------------------------- 4 files changed, 304 insertions(+), 330 deletions(-) diff --git a/index.html b/index.html index 6e8b0ad..c86d86e 100644 --- a/index.html +++ b/index.html @@ -10,18 +10,8 @@ -
- -
-
-
+
+
diff --git a/main.js b/main.js index 0c58c56..e0d817c 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,6 @@ // TODO: position item dans une semaine ? // TODO: load from template -// TODO: infobulle/popup avec liste des semaines où l'élément est utilisé ? +// TODO: infobulle/popup avec liste des semaines où l'élément est utilisé ? // TODO: espace blanc au début d'une ligne ? // TODO: gestion des erreurs dans la source ? // TODO: Bouton ajouter jour férié / vacances @@ -11,34 +11,33 @@ var Themes, Timeline, currentTheme, currentChapter, debut, lastWeek, lines, pSou var firstLoad = true; - var Utils = { - getDate: function(date){ - return date.getDate().toString().padStart(2,'0') + '/' + (date.getMonth()+1).toString().padStart(2,'0'); + getDate: function (date) { + return date.getDate().toString().padStart(2, '0') + '/' + (date.getMonth() + 1).toString().padStart(2, '0'); }, - downloadText: function(filename, txt) { - let el = document.createElement('a'); - el.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(txt)); - el.setAttribute('download', filename); + downloadText: function (filename, txt) { + let el = document.createElement('a'); + el.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(txt)); + el.setAttribute('download', filename); - el.style.display = 'none'; - document.body.appendChild(el); + el.style.display = 'none'; + document.body.appendChild(el); - el.click(); + el.click(); - document.body.removeChild(el); + document.body.removeChild(el); }, - openText: function(file, f) { + openText: function (file, f) { let reader = new FileReader(); - reader.onload = function() { - f(reader.result); + reader.onload = function () { + f(reader.result); } reader.readAsText(file); } - + } //////////////////////////////////// @@ -47,7 +46,6 @@ var Utils = { Source.load(); - /////////////////////////////////////// // ETAPE 2 : CREATION DE L'INTERFACE // /////////////////////////////////////// @@ -57,4 +55,4 @@ UI.create(); UI.createItemsSortable(); -firstLoad = false; \ No newline at end of file +firstLoad = false; diff --git a/source.js b/source.js index 4995f48..1e5487a 100644 --- a/source.js +++ b/source.js @@ -1,41 +1,40 @@ -const DSTSHIFT = 1000*60*60*4; // décallage de 4h pour éviter l'influence des changements d'heure +const DSTSHIFT = 1000 * 60 * 60 * 4; // décallage de 4h pour éviter l'influence des changements d'heure // Remarque : avant l'ajout du DSTSHIFT, on soustrayait 1ms à la date de fin afin que le jour de fin de période soit distinct de jour de début de la période suivante. // On soustrait maintenant à la place deux fois DSTSHIFT ce qui permet d'abord de compensé l'ajout du DSTSHIFT au début, d'éviter l'influence du changement d'heure. // La soustraction de 1ms est devenu inutile donc on ne l'effectue plus var Source = { - updateTimelineItems: function(j, diff) { - + updateTimelineItems: function (j, diff) { + // Permet de mettre à jour dans la source la {{semaine}} de début des items de la timeline j après modifications des périodes - + // Il faut ensuite mettre à jour le textarea - - - Timeline[j].items.forEach(function(i){ + + Timeline[j].items.forEach(function (i) { let line = lines[i]; let m = line.match(/{{([0-9,]+)}}\s*$/); - if(m) { + if (m) { let week = m[1].split(','); - week.forEach(function(w, k){ - if(w == Timeline[j].s - diff) { // si le numéro de semaine correspond à l'ancienne valeur et doit être mis à jour + week.forEach(function (w, k) { + if (w == Timeline[j].s - diff) { // si le numéro de semaine correspond à l'ancienne valeur et doit être mis à jour week[k] = Timeline[j].s; - } + } }); week.sort(); lines[i] = line.replace(/{{([0-9,]+)}}\s*$/, '{{' + week.join(',') + '}}'); } else { lines[i] += '{{' + Timeline[j].s + '}}'; } - }); + }); }, - updateItemAdded: function(i, s) { + updateItemAdded: function (i, s)  { let line = lines[i]; let m = line.match(/{{([0-9,]+)}}\s*$/); - if(m) { + if (m) { let week = m[1].split(','); - if(week.indexOf(s.toString()) != -1) { + if (week.indexOf(s.toString()) != -1) { return false; } week.push(s); @@ -46,28 +45,28 @@ var Source = { } return true; }, - updateItemMoved: function(l, o, n){ // l = line, o = oldIndex, n = newIndex + updateItemMoved: function (l, o, n) { // l = line, o = oldIndex, n = newIndex let line = lines[l]; let m = line.match(/{{([0-9,]+)}}\s*$/); let week = m[1].split(','); - if(week.indexOf(Timeline[n].s.toString()) != -1) { // l'item est déjà présent dans la nouvelle période + if (week.indexOf(Timeline[n].s.toString()) != -1) { // l'item est déjà présent dans la nouvelle période week.splice(week.indexOf(Timeline[o].s.toString()), 1); week.sort(); lines[l] = line.replace(/{{([0-9,]+)}}\s*$/, '{{' + week.join(',') + '}}'); return false; } - week[week.indexOf(Timeline[o].s.toString())] = Timeline[n].s; + week[week.indexOf(Timeline[o].s.toString())] = Timeline[n].s; week.sort(); lines[l] = line.replace(/{{([0-9,]+)}}\s*$/, '{{' + week.join(',') + '}}'); - + return true; }, - removeItem: function(i, l) { + removeItem: function (i, l) { let line = lines[l]; let m = line.match(/{{([0-9,]+)}}\s*$/); let week = m[1].split(','); week.splice(week.indexOf(Timeline[i].s.toString()), 1); - if(week.length) { + if (week.length) { week.sort(); lines[l] = line.replace(/{{([0-9,]+)}}\s*$/, '{{' + week.join(',') + '}}'); return true; @@ -76,65 +75,62 @@ var Source = { return false; } }, - updateLastWeek: function() { - lastWeek = Timeline[Timeline.length - 1].s + Timeline[Timeline.length - 1].duration - 1; - if(lines[lines.length - 1].match(/^\s*{{([0-9]+)}}\s*$/)) { - lines[lines.length-1] = lines[lines.length-1].replace(/^\s*{{([0-9]+)}}\s*$/, '{{' + lastWeek + '}}'); + updateLastWeek: function () { + lastWeek = Timeline[Timeline.length - 1].s + Timeline[Timeline.length - 1].duration - 1; + if (lines[lines.length - 1].match(/^\s*{{([0-9]+)}}\s*$/)) { + lines[lines.length - 1] = lines[lines.length - 1].replace(/^\s*{{([0-9]+)}}\s*$/, '{{' + lastWeek + '}}'); } else { lines.push("{{" + lastWeek + "}}"); } }, - save: function() { + save: function () { pSource = lines.join('\n'); $("#programme textarea").val(pSource); }, - load: function() { + load: function () { Themes = [/*{ name:'', // Thème Chapters:[{ - name:'', // Chapitre - Items: [{ // Items - name: '' - }] + name:'', // Chapitre + Items: [{ // Items + name: '' + }] }] - }*/]; + }*/ + ]; - - Timeline = [ /* - { - s: 1, - duration: 5, - items: [3,5] - }, - { - s: 5, - duration: 2, - items: [7] + Timeline = [/*{ + s: 1, + duration: 5, + items: [3,5] + },{ + s: 5, + duration: 2, + items: [7] }*/ - + /* - { - s:, - items: [], - duration: + { + s:, + items: [], + duration: } - */ - + */ + ]; - + Holidays = [ /* - 58664654, 65465456465, ... - */ + 58664654, 65465456465, ... + */ ]; - + WeekHolidays = [ - /* - { - time: 12345, - duration: 2 + /*{ + time: 12345, + duration: 2 } - */ + */ ]; currentTheme = -1; @@ -142,133 +138,128 @@ var Source = { debut = new Date(); lastWeek = false; - lines = pSource.trim().split(/[\r\n]+/); - // need to add a fail safe in case item added before Chapter !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // failsafe line change // mettre les items parsés dans un array ? // duration last week - lines.forEach(function(line, i) { + lines.forEach(function (line, i) { if (line[0] == '@') { // début d'année - let d = line.substr(line[1]==' ' ? 2 : 1); + let d = line.substr(line[1] == ' ' ? 2 : 1); let m = d.match(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,4})/); if (m) { - debut = new Date(m[2]+"/"+m[1]+"/"+m[3]); + debut = new Date(m[2] + "/" + m[1] + "/" + m[3]); } else { debut = new Date(d); - if(debut == "Invalid Date") { + if (debut == "Invalid Date") { debut = new Date(); } } debut.setTime(debut.getTime() + DSTSHIFT); - } - else if (line[0]=='#') { // Thème + } else if (line[0] == '#') { // Thème Themes.push({ - name: line.substr(line[1]==' ' ? 2 : 1), - Chapters:[] + name: line.substr(line[1] == ' ' ? 2 : 1), + Chapters: [] }); currentTheme++; currentChapter = -1; - } - else if (line[0]=='=') { // Chapitre - if(currentTheme==-1) { + } else if (line[0] == '=') { // Chapitre + if (currentTheme == -1) { Themes.push({ name: '', - Chapters:[] + Chapters: [] }); currentTheme++; currentChapter = -1; } Themes[currentTheme].Chapters.push({ - name: line.substr(line[1]==' ' ? 2 : 1), - Items: [] // Items + name: line.substr(line[1] == ' ' ? 2 : 1), + Items: []// Items }); currentChapter++; - } - else if (line[0]=='-') { // Items - if(currentTheme==-1) { + } else if (line[0] == '-') { // Items + if (currentTheme == -1) { Themes.push({ name: '', - Chapters:[] + Chapters: [] }); currentTheme++; currentChapter = -1; } - if(currentChapter==-1) { + if (currentChapter == -1) { Themes[currentTheme].Chapters.push({ - name: line.substr(line[1]==' ' ? 2 : 1), - Items: [] // Items + name: line.substr(line[1] == ' ' ? 2 : 1), + Items: []// Items }); currentChapter++; } let m = line.match(/{{([0-9,]+)}}\s*$/); - if(m) { + if (m) { var week = m[1]; } else { var week = false; } Themes[currentTheme].Chapters[currentChapter].Items.push({ - name: line.substr(line[1]==' ' ? 2 : 1).slice(0, m ? -m[0].length : undefined), // null ne fonctionne pas, il faut à tout pris undefined + name: line.substr(line[1] == ' ' ? 2 : 1).slice(0, m ? -m[0].length : undefined), // null ne fonctionne pas, il faut à tout pris undefined line: i //week: week }); - if(week) { + if (week) { week = week.split(','); - week.forEach(function(w) { + week.forEach(function (w) { w = parseInt(w); var timeline = Timeline.find(v => v.s == w); // Timeline est un tableau d'objet, find renvoie ici une référence et non pas une valeur - if(!timeline) { + if (!timeline) { var timeline = { s: w, duration: 1, - items:[] + items: [] }; - Timeline.push(timeline); + Timeline.push(timeline); } timeline.items.push(i); }); } } else if (i == lines.length - 1 && (m = line.match(/^\s*{{([0-9]+)}}\s*$/))) { lastWeek = m[1]; - } else if (line[0]=='%') { // Vacances - let d = line.substr(line[1]==' ' ? 2 : 1); + } else if (line[0] == '%') { // Vacances + let d = line.substr(line[1] == ' ' ? 2 : 1); let m = d.match(/(?:([0-9]+)\s%\s)?([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,4})/); let vd; if (m) { - if(m[1]) { - vd = new Date(m[3]+"/"+m[2]+"/"+m[4]); + if (m[1]) { + vd = new Date(m[3] + "/" + m[2] + "/" + m[4]); WeekHolidays.push({ time: vd.getTime(), duration: parseInt(m[1]) }); } else { - vd = new Date(m[3]+"/"+m[2]+"/"+m[4]); + vd = new Date(m[3] + "/" + m[2] + "/" + m[4]); Holidays.push(vd.getTime()); } - } + } /* else { - vd = new Date(d); - if(debut == "Invalid Date") { - // vd = new Date(); - return; - } + vd = new Date(d); + if(debut == "Invalid Date") { + // vd = new Date(); + return; + } }*/ - } else { // simple text - if(currentTheme==-1) { + } else { // simple text + if (currentTheme == -1) { Themes.push({ name: '', - Chapters:[] + Chapters: [] }); currentTheme++; currentChapter = -1; } - if(currentChapter==-1) { + if (currentChapter == -1) { Themes[currentTheme].Chapters.push({ - name: line.substr(line[1]==' ' ? 2 : 1), - Items: [] // Items + name: line.substr(line[1] == ' ' ? 2 : 1), + Items: []// Items }); currentChapter++; } @@ -279,29 +270,27 @@ var Source = { } }); + Timeline.sort((a, b) => a.s - b.s); // on trie la progression par ordre chronologique - Timeline.sort((a,b) => a.s - b.s); // on trie la progression par ordre chronologique - - - if(Timeline.length) { + if (Timeline.length) { if (lastWeek === false) { lastWeek = Timeline[Timeline.length - 1].s; } else { - if(lastWeek < Timeline[Timeline.length - 1].s) { + if (lastWeek < Timeline[Timeline.length - 1].s) { lastWeek = Timeline[Timeline.length - 1].s; - lines[lines.length-1] = lines[lines.length-1].replace(/^\s*{{([0-9]+)}}\s*$/, '{{' + lastWeek + '}}'); // TODO: Use source lib ? + lines[lines.length - 1] = lines[lines.length - 1].replace(/^\s*{{([0-9]+)}}\s*$/, '{{' + lastWeek + '}}'); // TODO: Use source lib ? } } - Timeline[Timeline.length-1].duration = lastWeek - Timeline[Timeline.length-1].s + 1; + Timeline[Timeline.length - 1].duration = lastWeek - Timeline[Timeline.length - 1].s + 1; } - Timeline.forEach(function(timeline, i){ + Timeline.forEach(function (timeline, i) { if (i < Timeline.length - 1) { - timeline.duration = Timeline[i+1].s - timeline.s; + timeline.duration = Timeline[i + 1].s - timeline.s; } }); - + } -} \ No newline at end of file +} diff --git a/ui.js b/ui.js index 7a2b93e..40e8229 100644 --- a/ui.js +++ b/ui.js @@ -1,54 +1,64 @@ var UI = { - updateDate: function(i) { + updateDate: function (i) { let block = $("#timeline>div").eq(i); let start = new Date(); let end = new Date(); - start.setTime(debut.getTime()+1000*60*60*24*7*(Timeline[i].s-1)); - end.setTime(debut.getTime()+1000*60*60*24*7*((Timeline[i].s-1)+Timeline[i].duration) - 2 * DSTSHIFT); + start.setTime(debut.getTime() + 1000 * 60 * 60 * 24 * 7 * (Timeline[i].s - 1)); + end.setTime(debut.getTime() + 1000 * 60 * 60 * 24 * 7 * ((Timeline[i].s - 1) + Timeline[i].duration) - 2 * DSTSHIFT); block.find('h3>span:eq(0)').text(Utils.getDate(start) + ' → ' + Utils.getDate(end)); }, - updateDuration: function(i) { + updateDuration: function (i)  { let block = $("#timeline>div").eq(i); block.find('.weekMenu span:eq(0)').text((Timeline[i].duration > 1 ? Timeline[i].duration + ' semaines' : '1 semaine')); }, - updateWeek: function(i) { + updateWeek: function (i) { let block = $("#timeline>div").eq(i); block.find('.weeknumber span:eq(0)').text(Timeline[i].s); - block.find('.weeknumber span:eq(1)').text(Timeline[i].s+Timeline[i].duration - 1); + block.find('.weeknumber span:eq(1)').text(Timeline[i].s + Timeline[i].duration - 1); }, - updateHolidays: function(i) { + updateHolidays: function (i) { let block = $("#timeline>div").eq(i); - let start = debut.getTime()+1000*60*60*24*7*(Timeline[i].s-1); - let end = debut.getTime()+1000*60*60*24*7*((Timeline[i].s-1)+Timeline[i].duration) - 2 * DSTSHIFT ; + let start = debut.getTime() + 1000 * 60 * 60 * 24 * 7 * (Timeline[i].s - 1); + let end = debut.getTime() + 1000 * 60 * 60 * 24 * 7 * ((Timeline[i].s - 1) + Timeline[i].duration) - 2 * DSTSHIFT; block.find('.holydays').remove(); - Holidays.forEach(function(h){ - if(start <= h && h <= end) { + Holidays.forEach(function (h) { + if (start <= h && h <= end) { let d = new Date(); d.setTime(h); - block.find('.items').prepend('' + d.toLocaleDateString('default',{weekday:'long', day:'2-digit',month:'long'}) + ''); + block.find('.items').prepend('' + d.toLocaleDateString('default', { + weekday: 'long', + day: '2-digit', + month: 'long' + }) + ''); } }); }, - updateWeekHolidays: function() { + updateWeekHolidays: function () { let shiftWeekHolidays = 0; - if(WeekHolidays.length) { - Timeline.forEach(function(timeline, i){ + if (WeekHolidays.length) { + Timeline.forEach(function (timeline, i) { let block = $("#timeline>div").eq(i); block.find('.weekholydays').remove(); - let start = debut.getTime()+1000*60*60*24*7*(Timeline[i].s-1) + shiftWeekHolidays; - let end = debut.getTime()+1000*60*60*24*7*((Timeline[i].s-1)+Timeline[i].duration) - 2 * DSTSHIFT + shiftWeekHolidays; - WeekHolidays.forEach(function(h){ - if(start < h.time && h.time < end) { - shiftWeekHolidays += h.duration*1000*60*60*24*7; - end += h.duration*1000*60*60*24*7; - block.find('.items').prepend('' + new Date(h.time).toLocaleDateString('default',{day:'2-digit',month:'long'}) + ' → ' + new Date(h.time+h.duration*1000*60*60*24*7).toLocaleDateString('default',{day:'2-digit',month:'long'}) + ' (' + h.duration + (h.duration > 1 ? ' semaines' : ' semaine') + ')'); + let start = debut.getTime() + 1000 * 60 * 60 * 24 * 7 * (Timeline[i].s - 1) + shiftWeekHolidays; + let end = debut.getTime() + 1000 * 60 * 60 * 24 * 7 * ((Timeline[i].s - 1) + Timeline[i].duration) - 2 * DSTSHIFT + shiftWeekHolidays; + WeekHolidays.forEach(function (h) { + if (start < h.time && h.time < end) { + shiftWeekHolidays += h.duration * 1000 * 60 * 60 * 24 * 7; + end += h.duration * 1000 * 60 * 60 * 24 * 7; + block.find('.items').prepend('' + new Date(h.time).toLocaleDateString('default', { + day: '2-digit', + month: 'long' + }) + ' → ' + new Date(h.time + h.duration * 1000 * 60 * 60 * 24 * 7).toLocaleDateString('default', { + day: '2-digit', + month: 'long' + }) + ' (' + h.duration + (h.duration > 1 ? ' semaines' : ' semaine') + ')'); } }); block.find('h3>span:eq(0)').text(Utils.getDate(new Date(start)) + ' → ' + Utils.getDate(new Date(end))); - }); + }); } }, - createTimelineBlock: function(timeline) { + createTimelineBlock: function (timeline) { var block = $("
").html(`

@@ -68,35 +78,35 @@ var UI = { `); var start = new Date(); var end = new Date(); - start.setTime(debut.getTime()+1000*60*60*24*7*(timeline.s-1)); - end.setTime(debut.getTime()+1000*60*60*24*7*((timeline.s-1)+timeline.duration) - 2 * DSTSHIFT); + start.setTime(debut.getTime() + 1000 * 60 * 60 * 24 * 7 * (timeline.s - 1)); + end.setTime(debut.getTime() + 1000 * 60 * 60 * 24 * 7 * ((timeline.s - 1) + timeline.duration) - 2 * DSTSHIFT); block.find('h3>span:eq(0)').text(Utils.getDate(start) + ' → ' + Utils.getDate(end)); block.find('.weekMenu span:eq(0)').text((timeline.duration > 1 ? timeline.duration + ' semaines' : '1 semaine')); - if(timeline.duration == 1) { - block.find('.weekMenu span:eq(2)').css('opacity','0.25'); + if (timeline.duration == 1) { + block.find('.weekMenu span:eq(2)').css('opacity', '0.25'); } block.find('.weeknumber span:eq(0)').text(timeline.s); - block.find('.weeknumber span:eq(1)').text(timeline.s+timeline.duration - 1); - timeline.items.forEach(function(l){ + block.find('.weeknumber span:eq(1)').text(timeline.s + timeline.duration - 1); + timeline.items.forEach(function (l) { var m = lines[l].match(/{{([0-9,]+)}}\s*$/); var spanItem = $('').attr({ - 'class':'item', - line: l - }).text(lines[l].substr(lines[l][1]==' ' ? 2 : 1).slice(0, m ? -m[0].length : undefined)); + 'class': 'item', + line: l + }).text(lines[l].substr(lines[l][1] == ' ' ? 2 : 1).slice(0, m ? -m[0].length : undefined)); block.find('.items').append(spanItem); $('#programme .item[line=' + l + ']').addClass('item-used'); }); block.insertBefore($('.tools')); UI.updateHolidays(block.index()); }, - create: function() { - + create: function ()  { + //////////////////////////////////////////////////////////////////////////////// // Création de l'accordion contenant le éléments du programme (partie droite) // //////////////////////////////////////////////////////////////////////////////// $("#programme").empty(); - + $("#programme").append(`

Source

@@ -107,55 +117,55 @@ var UI = {
`); - - $("#programme textarea").val(pSource).blur(function(){ + + $("#programme textarea").val(pSource).blur(function () { pSource = $(this).val(); Source.load(); UI.create(); }); - $("#programme button:eq(0)").button().click(function(){ - Utils.downloadText('profgramme.txt', pSource.replace(/([^\r])\n/g,'$1\n')); // On rajoute \r pour windows si il n'y est pas + $("#programme button:eq(0)").button().click(function () { + Utils.downloadText('profgramme.txt', pSource.replace(/([^\r])\n/g, '$1\n')); // On rajoute \r pour windows si il n'y est pas }); - $("#programme button:eq(1)").button().click(function(){ - $('#programme input.ouvrir').change(function(){ + $("#programme button:eq(1)").button().click(function () { + $('#programme input.ouvrir').change(function () { let files = $('.ouvrir')[0].files; - if(files.length) { - Utils.openText(files[0], function(r){ + if (files.length) { + Utils.openText(files[0], function (r) { $("#programme textarea").val(r); pSource = r; Source.load(); UI.create(); }); - } + } }).click(); - + }); - + let selectExample = $("#programme select")[0]; - - for(let v in examples) { + + for (let v in examples) { let op = document.createElement('option'); op.textContent = v; selectExample.appendChild(op); }; - + $("#programme select").selectmenu({ - change: function(){ + change: function () { pSource = examples[$(this).val()]; $("#programme textarea").val(pSource); Source.load(); UI.create(); } }); - - Themes.forEach(function(theme, i) { - theme.Chapters.forEach(function(chapter) { + + Themes.forEach(function (theme, i) { + theme.Chapters.forEach(function (chapter) { var title = $('

').text(chapter.name); - var btheme = $('').text(theme.name).css('color','hsl(' + parseInt(i/Themes.length*360) + ',50%,50%)'); + var btheme = $('').text(theme.name).css('color', 'hsl(' + parseInt(i / Themes.length * 360) + ',50%,50%)'); title.prepend(btheme); $("#programme").append(title); var divitems = $('
'); - chapter.Items.forEach(function(item) { + chapter.Items.forEach(function (item) { var spanitem = $('').text(item.name); if (!item.text) { spanitem.addClass('item'); @@ -168,15 +178,14 @@ var UI = { $("#programme").append(divitems); }); }); - - $("#programme .item").hover(function(){ - $('#timeline .item[line='+$(this).attr('line')+']').addClass('item-hover'); - },function(){ - $('#timeline .item[line='+$(this).attr('line')+']').removeClass('item-hover'); - }); - - - if(firstLoad) { + + $("#programme .item").hover(function () { + $('#timeline .item[line=' + $(this).attr('line') + ']').addClass('item-hover'); + }, function () { + $('#timeline .item[line=' + $(this).attr('line') + ']').removeClass('item-hover'); + }); + + if (firstLoad) { $("#programme").accordion({ collapsible: true, heightStyle: 'content' @@ -184,17 +193,17 @@ var UI = { } else { $("#programme").accordion('option', 'animate', false).accordion('refresh').accordion('option', 'animate', {}); // on désactive les animations le temps d'actualiser l'accordion } - + $("#programme span.item").draggable({ - helper: function(e,item){ // fix width issue - return $(this).clone().width($(this).width()).attr('data-newelement','1'); + helper: function (e, item) { // fix width issue + return $(this).clone().width($(this).width()).attr('data-newelement', '1'); }, - cursorAt:{ // fix append first issue - top:0, - left:0 + cursorAt: { // fix append first issue + top: 0, + left: 0 }, - revert:'invalid', - connectToSortable:'.items' + revert: 'invalid', + connectToSortable: '.items' }); //////////////////////////////////////////////////////////////////// @@ -211,8 +220,8 @@ var UI = {
Supprimer un élément (glissez déposer ici)
`).addClass('tools').appendTo($('#timeline')); - - $('.tools button.ajouter').button().click(function(){ + + $('.tools button.ajouter').button().click(function () { let timeline = { s: Timeline.length ? Timeline[Timeline.length - 1].s + Timeline[Timeline.length - 1].duration : 1, duration: 1, @@ -223,13 +232,13 @@ var UI = { Source.save(); UI.createTimelineBlock(timeline); UI.createItemsSortable(); - }); + }); - $('.tools button.supprimer').button().click(function(){ - if(Timeline.length) { - Timeline[Timeline.length - 1].items.forEach(function(i){ + $('.tools button.supprimer').button().click(function () { + if (Timeline.length) { + Timeline[Timeline.length - 1].items.forEach(function (i) { Source.removeItem(Timeline.length - 1, i); - }); + }); Timeline.pop(); Source.updateLastWeek(); Source.save(); @@ -237,110 +246,102 @@ var UI = { } }); - Timeline.forEach(function(timeline, i){ + Timeline.forEach(function (timeline, i) { UI.createTimelineBlock(timeline); }); - + UI.updateWeekHolidays(); UI.createItemsSortable(); - + $('.deletearea').sortable({ - over: function(e, ui){ - $(this).css('background','red'); + over: function (e, ui) { + $(this).css('background', 'red'); }, - out: function(e, ui){ + out: function (e, ui) { $(this).css('background', ''); }, - receive: function(e, ui) { + receive: function (e, ui) { let oldIndex = parseInt($(ui.item).attr('data-oldindex')); Timeline[oldIndex].items.slice(Timeline[oldIndex].items.indexOf(parseInt($(ui.item).attr('line'))), 1); - if(!Source.removeItem(oldIndex, parseInt($(ui.item).attr('line')))) { // si l'item n'est plus utilisé - $('#programme .item[line='+parseInt($(ui.item).attr('line'))+']').removeClass('item-used'); + if (!Source.removeItem(oldIndex, parseInt($(ui.item).attr('line')))) { // si l'item n'est plus utilisé + $('#programme .item[line=' + parseInt($(ui.item).attr('line')) + ']').removeClass('item-used'); } Source.save(); $(ui.item).remove(); } - }); - - if(firstLoad) { - + }); + + if (firstLoad) { + UI.firstLoad(); - + } }, - firstLoad: function() { + firstLoad: function () { // Appuis sur le bouton (+) du nombre de semaines - $("#timeline").on("click", ".weekMenu span:nth-child(2)", function(){ + $("#timeline").on("click", ".weekMenu span:nth-child(2)", function () { var block = $(this).closest('h3').parent(); // var i = block.parent().children().index(block); var i = block.index(); - if (Timeline[i].duration==1) { - block.find('.weekMenu span:eq(2)').css('opacity',''); + if (Timeline[i].duration == 1) { + block.find('.weekMenu span:eq(2)').css('opacity', ''); } - + Timeline[i].duration++; - + UI.updateDate(i); UI.updateWeek(i); UI.updateDuration(i); UI.updateHolidays(i); - - for(var j = i + 1 ; j < Timeline.length ; j++) { + for (var j = i + 1; j < Timeline.length; j++) { Timeline[j].s++; - + UI.updateDate(j); UI.updateWeek(j); UI.updateHolidays(j); - - + // On met à jour les {{semaines}} dans la source - + Source.updateTimelineItems(j, 1); - - + } - + Source.updateLastWeek(); - + Source.save(); - + UI.updateWeekHolidays(); - - - + }); // Appuis sur le bouton (-) du nombre de semaines - $("#timeline").on("click", ".weekMenu span:nth-child(3)", function(){ + $("#timeline").on("click", ".weekMenu span:nth-child(3)", function () { var block = $(this).closest('h3').parent(); var i = block.index(); - if (Timeline[i].duration>1) { + if (Timeline[i].duration > 1) { Timeline[i].duration--; - + if (Timeline[i].duration == 1) { - block.find('.weekMenu span:eq(2)').css('opacity','0.25'); + block.find('.weekMenu span:eq(2)').css('opacity', '0.25'); } - + UI.updateDate(i); UI.updateWeek(i); UI.updateDuration(i); UI.updateHolidays(i); - - - - - // if(Timeline.length > i + 1) { - - for(var j = i + 1 ; j < Timeline.length ; j++) { - + + // if(Timeline.length > i + 1) { + + for (var j = i + 1; j < Timeline.length; j++) { + Timeline[j].s--; - + UI.updateDate(j); UI.updateWeek(j); UI.updateHolidays(j); @@ -350,51 +351,49 @@ var UI = { Source.updateTimelineItems(j, -1); } - + Source.updateLastWeek(); - + Source.save(); - + UI.updateWeekHolidays(); - + } - + }); $("#timeline").sortable({ - axis:'y', - items:'>*:not(:last)', - cancel:'.items, .weekMenu .ui-icon', // or handle + axis: 'y', + items: '>*:not(:last)', + cancel: '.items, .weekMenu .ui-icon', // or handle revert: 100, - start: function(e, ui) { + start: function (e, ui) { $(this).attr('data-oldindex', ui.item.index()); }, - update: function(e, ui) { + update: function (e, ui) { var oldIndex = parseInt($(this).attr('data-oldindex')); - var newIndex = ui.item.index(); - $(this).attr('data-oldindex',''); - + var newIndex = ui.item.index(); + $(this).attr('data-oldindex', ''); + /* - Si on décalle dans le passé un bloc, on décalle vers le futur tous les blocs entre le début et l'arrivée d'autant que la durée du bloc décallé - Si on décalle dans le futur un bloc, on décalle vers le passé tous les blocs entre le début et l'arrivée d'autant que la durée du bloc décallé - */ - + Si on décalle dans le passé un bloc, on décalle vers le futur tous les blocs entre le début et l'arrivée d'autant que la durée du bloc décallé + Si on décalle dans le futur un bloc, on décalle vers le passé tous les blocs entre le début et l'arrivée d'autant que la durée du bloc décallé + */ // On déplace dans l'array le bloc déplacé Timeline.splice(newIndex, 0, Timeline.splice(oldIndex, 1)[0]); - - + if (newIndex < oldIndex) { - + // On met à jour la semaine de départ du bloc déplacé - Timeline[newIndex].s = Timeline[newIndex+1].s; - + Timeline[newIndex].s = Timeline[newIndex + 1].s; + UI.updateDate(newIndex); UI.updateWeek(newIndex); UI.updateHolidays(i); - + // On met à jour la semaine de départ des blocs intermédiaires - for(let i = newIndex + 1 ; i <= oldIndex ; i++) { + for (let i = newIndex + 1; i <= oldIndex; i++) { Timeline[i].s += Timeline[newIndex].duration; UI.updateDate(i); UI.updateWeek(i); @@ -402,52 +401,50 @@ var UI = { } } else { - + // On met à jour la semaine de départ des blocs intermédiaires - for(let i = newIndex - 1 ; i >= oldIndex ; i--) { + for (let i = newIndex - 1; i >= oldIndex; i--) { Timeline[i].s -= Timeline[newIndex].duration; UI.updateDate(i); UI.updateWeek(i); UI.updateHolidays(i); } - + // On met à jour la semaine de départ du bloc déplacé - Timeline[newIndex].s = Timeline[newIndex-1].s + Timeline[newIndex-1].duration; - + Timeline[newIndex].s = Timeline[newIndex - 1].s + Timeline[newIndex - 1].duration; + UI.updateDate(newIndex); UI.updateWeek(newIndex); UI.updateHolidays(i); - + } - - - + } }); }, - createItemsSortable: function() { + createItemsSortable: function () { $(".items").sortable({ - axis:'y', - items:'>.item', + axis: 'y', + items: '>.item', revert: 100, connectWith: '.items, .deletearea', - receive: function(e,ui) { + receive: function (e, ui) { /*if(ui.sender.parents('#programme').length) { // ajout d'un élément depuis le programme (panel de droite) - $('#programme .item[line='+$(ui.item).attr('line')+']').addClass('item-used'); - Timeline[$(this).parent().parent().index()].items.push(parseInt($(ui.item).attr('line'))); + $('#programme .item[line='+$(ui.item).attr('line')+']').addClass('item-used'); + Timeline[$(this).parent().parent().index()].items.push(parseInt($(ui.item).attr('line'))); }*/ }, - start: function(e, ui) { + start: function (e, ui) { $(ui.item).attr('data-oldindex', $(ui.item).parent().parent().parent().index()); // will not be deleted if sorting cancelled but it's not an issue }, - update: function(e, ui) { - if(!$(ui.item).parent().hasClass('deletearea')) { + update: function (e, ui) { + if (!$(ui.item).parent().hasClass('deletearea')) { let l = parseInt($(ui.item).attr('line')); - if(ui.item.attr('data-newelement')) { // ajout d'un élément depuis le programme (panel de droite) - $(ui.item).attr('data-newelement',''); - $('#programme .item[line='+l+']').addClass('item-used'); - if(Source.updateItemAdded(l, Timeline[$(this).parent().parent().index()].s)) { // renvoi false si item est déjà présent + if (ui.item.attr('data-newelement')) { // ajout d'un élément depuis le programme (panel de droite) + $(ui.item).attr('data-newelement', ''); + $('#programme .item[line=' + l + ']').addClass('item-used'); + if (Source.updateItemAdded(l, Timeline[$(this).parent().parent().index()].s)) { // renvoi false si item est déjà présent Timeline[$(this).parent().parent().index()].items.push(l); Source.save(); } else { @@ -455,24 +452,24 @@ var UI = { } } else { // déplacement d'un élément var oldIndex = parseInt($(ui.item).attr('data-oldindex')); - if(!isNaN(oldIndex)) { + if (!isNaN(oldIndex)) { let newIndex = $(ui.item).parent().parent().parent().index(); - if(oldIndex != newIndex) { - Timeline[oldIndex].items.splice(Timeline[oldIndex].items.indexOf(l), 1); // On enlève l'item de l'ancienne timeline - if(Source.updateItemMoved(l, oldIndex, newIndex)) { // On met à jours la semaine de début dans la source - Timeline[newIndex].items.push(l); // On ajoute l'item dans la nouvelle timeline + if (oldIndex != newIndex) { + Timeline[oldIndex].items.splice(Timeline[oldIndex].items.indexOf(l), 1); // On enlève l'item de l'ancienne timeline + if (Source.updateItemMoved(l, oldIndex, newIndex)) { // On met à jours la semaine de début dans la source + Timeline[newIndex].items.push(l); // On ajoute l'item dans la nouvelle timeline } else { - $(ui.item).remove(); // on supprime l'item en cas de doublon + $(ui.item).remove(); // on supprime l'item en cas de doublon } - Source.save(); + Source.save(); } } else { // On ne fait rien : il s'agit d'un simple "echo" lors du déplacement d'une semaine à l'autre } } - $(ui.item).attr('data-oldindex',''); + $(ui.item).attr('data-oldindex', ''); } } }); } -} \ No newline at end of file +} From 70f8aa2efa8dfa8b9022d3f7bb3f1366a8a50c9e Mon Sep 17 00:00:00 2001 From: DegrangeM <53106394+DegrangeM@users.noreply.github.com> Date: Sun, 21 Jul 2019 07:16:46 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Ajout=20du=20programme=20de=20sp=C3=A9=20ma?= =?UTF-8?q?ths=201=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example.js | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 171 insertions(+), 1 deletion(-) diff --git a/example.js b/example.js index 6513c7a..20751ed 100644 --- a/example.js +++ b/example.js @@ -229,7 +229,177 @@ Fonctions à un ou plusieurs arguments. Capacités associées - Écrire des fonctions simples ; lire, comprendre, modifier, compléter des fonctions plus complexes. Appeler une fonction. - Lire et comprendre une fonction renvoyant une moyenne, un écart type. Aucune connaissance sur les listes n’est exigée. -- Écrire des fonctions renvoyant le résultat numérique d’une expérience aléatoire, d’une répétition d’expériences aléatoires indépendantes.` +- Écrire des fonctions renvoyant le résultat numérique d’une expérience aléatoire, d’une répétition d’expériences aléatoires indépendantes.`, + 'Mathématiquees 1spé 2019': `${exampleShared.start} +# Algèbre += Suites numériques, modèles discrets +Contenus +- Exemples de modes de génération d’une suite : explicite un = ƒ(n), par une relation de récurrence un+1 = ƒ(un), par un algorithme, par des motifs géométriques. Notations : u(n), un, (u(n)), (un). +- Suites arithmétiques : exemples, définition, calcul du terme général. Lien avec l’étude d’évolutions successives à accroissements constants. Lien avec les fonctions affines. Calcul de 1 + 2 + … + n. +- Suites géométriques : exemples, définition, calcul du terme général. Lien avec l’étude d’évolutions successives à taux constant. Lien avec la fonction exponentielle. Calcul de 1 + q + … + q^n. +- Sens de variation d’une suite. +- Sur des exemples, introduction intuitive de la notion de limite, finie ou infinie, d’une suite. +Capacités attendues +- Dans le cadre de l’étude d’une suite, utiliser le registre de la langue naturelle, le registre algébrique, le registre graphique, et passer de l’un à l’autre. +- Proposer, modéliser une situation permettant de générer une suite de nombres. Déterminer une relation explicite ou une relation de récurrence pour une suite définie par un motif géométrique, par une question de dénombrement. +- Calculer des termes d’une suite définie explicitement, par récurrence ou par un algorithme. +- Pour une suite arithmétique ou géométrique, calculer le terme général, la somme de termes consécutifs, déterminer le sens de variation. +- Modéliser un phénomène discret à croissance linéaire par une suite arithmétique, un phénomène discret à croissance exponentielle par une suite géométrique. +- Conjecturer, dans des cas simples, la limite éventuelle d’une suite. +Démonstrations +- Calcul du terme général d’une suite arithmétique, d’une suite géométrique. +- Calcul de 1 + 2 + … + n. +- Calcul de 1 + q + … + q^n. +Exemples d’algorithme +- Calcul de termes d’une suite, de sommes de termes, de seuil. +- Calcul de factorielle. +- Liste des premiers termes d’une suite : suites de Syracuse, suite de Fibonacci. += Équations, fonctions polynômes du second degré +Contenus +- Fonction polynôme du second degré donnée sous forme factorisée. Racines, signe, expression de la somme et du produit des racines. +- Forme canonique d’une fonction polynôme du second degré. Discriminant. Factorisation éventuelle. Résolution d’une équation du second degré. Signe. +Capacités attendues +- Étudier le signe d’une fonction polynôme du second degré donnée sous forme factorisée. +- Déterminer les fonctions polynômes du second degré s’annulant en deux nombres réels distincts. +- Factoriser une fonction polynôme du second degré, en diversifiant les stratégies : racine évidente, détection des racines par leur somme et leur produit, identité remarquable, application des formules générales. +- Choisir une forme adaptée (développée réduite, canonique, factorisée) d’une fonction polynôme du second degré dans le cadre de la résolution d’un problème (équation, inéquation, optimisation, variations). +Démonstration +- Résolution de l’équation du second degré. +# Analyse += Dérivation +Contenus +Point de vue local +- Taux de variation. Sécantes à la courbe représentative d’une fonction en un point donné. +- Nombre dérivé d’une fonction en un point, comme limite du taux de variation. Notation ƒ’(a). +- Tangente à la courbe représentative d’une fonction en un point, comme « limite des sécantes ». Pente. Équation : la tangente à la courbe représentative de ƒ au point d’abscisse a est la droite d’équation y = ƒ(a) + ƒ’(a)(x - a). +Point de vue global +- Fonction dérivable sur un intervalle. Fonction dérivée. +- Fonction dérivée des fonctions carré, cube, inverse, racine carrée. +- Opérations sur les fonctions dérivables : somme, produit, inverse, quotient, fonction dérivée de x ↦ g(ax + b) +- Pour n dans Z, fonction dérivée de la fonction x ↦ x^n. +- Fonction valeur absolue : courbe représentative, étude de la dérivabilité en 0. +Capacités attendues +- Calculer un taux de variation, la pente d’une sécante. +- Interpréter le nombre dérivé en contexte : pente d’une tangente, vitesse instantanée, coût marginal… +- Déterminer graphiquement un nombre dérivé par la pente de la tangente. Construire la tangente en un point à une courbe représentative connaissant le nombre dérivé. +- Déterminer l’équation de la tangente en un point à la courbe représentative d’une fonction. +- À partir de la définition, calculer le nombre dérivé en un point ou la fonction dérivée de la fonction carré, de la fonction inverse. +- Dans des cas simples, calculer une fonction dérivée en utilisant les propriétés des opérations sur les fonctions dérivables. +Démonstrations +- Équation de la tangente en un point à une courbe représentative. +- La fonction racine carrée n’est pas dérivable en 0. +- Fonction dérivée de la fonction carrée, de la fonction inverse. +- Fonction dérivée d’un produit. +Exemple d’algorithme +- Écrire la liste des coefficients directeurs des sécantes pour un pas donné. += Variations et courbes représentatives des fonctions +Contenus +- Lien entre le sens de variation d’une fonction dérivable sur un intervalle et signe de sa fonction dérivée ; caractérisation des fonctions constantes. +- Nombre dérivé en un extremum, tangente à la courbe représentative. +Capacités attendues +- Étudier les variations d’une fonction. Déterminer les extremums. +- Résoudre un problème d’optimisation. +- Exploiter les variations d’une fonction pour établir une inégalité. Étudier la position relative de deux courbes représentatives. +- Étudier, en lien avec la dérivation, une fonction polynôme du second degré : variations, extremum, allure selon le signe du coefficient de x². +Exemple d’algorithme +- Méthode de Newton, en se limitant à des cas favorables. += Fonction exponentielle +Contenus +- Définition de la fonction exponentielle, comme unique fonction dérivable sur R vérifiant ƒ’ = ƒ et ƒ(0) = 1. L’existence et l’unicité sont admises. Notation exp(x). +- Pour tous réels x et y, exp(x + y) = exp(x) exp(y) et exp(x) exp(-x) = 1. Nombre e. Notation e^x. +- Pour tout réel a, la suite (ena) est une suite géométrique. +- Signe, sens de variation et courbe représentative de la fonction exponentielle. +Capacités attendues +- Transformer une expression en utilisant les propriétés algébriques de la fonction exponentielle. +- Pour une valeur numérique strictement positive de k, représenter graphiquement les fonctions t ↦ e^(-kt) et t ↦ e^(kt). +- Modéliser une situation par une croissance, une décroissance exponentielle (par exemple évolution d’un capital à taux fixe, décroissance radioactive). +Exemple d’algorithme +- Construction de l’exponentielle par la méthode d’Euler. Détermination d’une valeur approchée de e à l’aide de la suite (1+1/n)^n. += Fonctions trigonométriques +Contenus +- Cercle trigonométrique. Longueur d’arc. Radian. +- Enroulement de la droite sur le cercle trigonométrique. Image d’un nombre réel. +- Cosinus et sinus d’un nombre réel. Lien avec le sinus et le cosinus dans un triangle rectangle. Valeurs remarquables. +- Fonctions cosinus et sinus. Parité, périodicité. Courbes représentatives. +Capacités attendues +- Placer un point sur le cercle trigonométrique. +- Lier la représentation graphique des fonctions cosinus et sinus et le cercle trigonométrique. +- Traduire graphiquement la parité et la périodicité des fonctions trigonométriques. +- Par lecture du cercle trigonométrique, déterminer, pour des valeurs remarquables de x, les cosinus et sinus d’angles associés à x. +Démonstration +- Calcul de sin(π/4), cos(π/3), sin(π/3). +Exemple d’algorithme +- Approximation de π par la méthode d’Archimède +# Géométrie += Calcul vectoriel et produit scalaire +Contenus +- Produit scalaire à partir de la projection orthogonale et de la formule avec le cosinus. Caractérisation de l’orthogonalité. +- Bilinéarité, symétrie. En base orthonormée, expression du produit scalaire et de la norme, critère d’orthogonalité. +- Développement de ||→u+→v||². Formule d’Al-Kashi. +- Transformation de l’expression →MA→MB. +Capacités attendues +- Utiliser le produit scalaire pour démontrer une orthogonalité, pour calculer un angle, une longueur dans le plan ou dans l’espace. +- En vue de la résolution d’un problème, calculer le produit scalaire de deux vecteurs en choisissant une méthode adaptée (en utilisant la projection orthogonale, à l’aide des coordonnées, à l’aide des normes et d’un angle, à l’aide de normes). +- Utiliser le produit scalaire pour résoudre un problème géométrique. +Démonstrations +- Formule d’Al-Kashi (démonstration avec le produit scalaire). +- Ensemble des points M tels que →MA→MB = 0 (démonstration avec le produit scalaire) += Géométrie repérée +Dans cette section, le plan est rapporté à un repère orthonormé. +Contenus +- Vecteur normal à une droite. Le vecteur de coordonnées (a,b) est normal à la droite d’équation ax + by + c =0. Le vecteur (-b,a) en est un vecteur directeur. +- Équation de cercle. +- Parabole représentative d’une fonction polynôme du second degré. Axe de symétrie, sommet. +Capacités attendues +- Déterminer une équation cartésienne d’une droite connaissant un point et un vecteur normal. +- Déterminer les coordonnées du projeté orthogonal d’un point sur une droite. +- Déterminer et utiliser l’équation d’un cercle donné par son centre et son rayon. +- Reconnaître une équation de cercle, déterminer centre et rayon. +- Déterminer l’axe de symétrie et le sommet d’une parabole d’équation y = ax² + bx + c. +- Utiliser un repère pour étudier une configuration. +# Probabilités et statistiques += Probabilités conditionnelles et indépendance +Contenus +- Probabilité conditionnelle d’un événement B sachant un événement A de probabilité non nulle. Notation PA(B). Indépendance de deux événements. +- Arbres pondérés et calcul de probabilités : règle du produit, de la somme. +- Partition de l’univers (systèmes complets d’événements). Formule des probabilités totales. +- Succession de deux épreuves indépendantes. Représentation par un arbre ou un tableau. +Capacités attendues +- Construire un arbre pondéré ou un tableau en lien avec une situation donnée. Passer du registre de la langue naturelle au registre symbolique et inversement. +- Utiliser un arbre pondéré ou un tableau pour calculer une probabilité. +- Calculer des probabilités conditionnelles lorsque les événements sont présentés sous forme de tableau croisé d’effectifs (tirage au sort avec équiprobabilité d’un individu dans une population). +- Dans des cas simples, calculer une probabilité à l’aide de la formule des probabilités totales. +- Distinguer en situation PA(B) et PB(A), par exemple dans des situations de type « faux positifs ». +- Représenter une répétition de deux épreuves indépendantes par un arbre ou un tableau. +Exemple d’algorithme +- Méthode de Monte-Carlo : estimation de l’aire sous la parabole, estimation du nombre π. += Variables aléatoires réelles +Le programme ne considère que des univers finis et des variables aléatoires réelles. +Contenus +- Variable aléatoire réelle : modélisation du résultat numérique d’une expérience aléatoire ; formalisation comme fonction définie sur l’univers et à valeurs réelles. +- Loi d’une variable aléatoire. +- Espérance, variance, écart type d’une variable aléatoire. +Capacités attendues +- Interpréter en situation et utiliser les notations {X = a}, {X ⩽ a}, P(X = a), P(X ⩽ a). Passer du registre de la langue naturelle au registre symbolique et inversement. +- Modéliser une situation à l’aide d’une variable aléatoire. +- Déterminer la loi de probabilité d’une variable aléatoire. +- Calculer une espérance, une variance, un écart type. +- Utiliser la notion d’espérance dans une résolution de problème (mise pour un jeu équitable…). +Exemples d’algorithmes +- Algorithme renvoyant l’espérance, la variance ou l‘écart type d’une variable aléatoire. +- Fréquence d’apparition des lettres d’un texte donné, en français, en anglais. +Expérimentations +- Simuler une variable aléatoire avec Python. +- Lire, comprendre et écrire une fonction Python renvoyant la moyenne d’un échantillon de taille n d’une variable aléatoire. +- Étudier sur des exemples la distance entre la moyenne d’un échantillon simulé de taille n d’une variable aléatoire et l’espérance de cette variable aléatoire. +- Simuler, avec Python ou un tableur, N échantillons de taille n d’une variable aléatoire, d’espérance μ et d’écart type σ. Si m désigne la moyenne d’un échantillon, calculer la proportion des cas où l’écart entre m et μ est inférieur ou égal à 2σ / n . +# Algorithmique et programmation += Notion de liste +Capacités attendues +- Générer une liste (en extension, par ajouts successifs ou en compréhension). +- Manipuler des éléments d’une liste (ajouter, supprimer…) et leurs indices. +- Parcourir une liste. +- Itérer sur les éléments d’une liste.` } var pSource = examples['Mathématiquees 2nd 2019']; \ No newline at end of file