420-KBK-LG – Veille technologique
Ceci est un petit site de support pour le cours 420-KBK-LG
– Veille technologique. Ce cours est donné par plusieurs
enseignant(e)s, et comporte plusieurs volets. Le volet qui nous concerne ici est
celui de « programmation avancée ».
Vous trouverez aussi des
liens sur divers langages (dont C#,
notre outil de prédilection dans ce cours) un peu partout dans http://h-deb.ca/
Les diverses sections de cette page (en fonction desquelles vous trouverez
quelques liens dans l'encadré à droite) vous mèneront elles-aussi sur des pistes
qui vous permettront d'explorer un peu plus par vous-mêmes, de valider vos
acquis et d'enrichir votre apprentissage
 |
Cliquez sur cette cible pour le plan de cours, sous forme
électronique
|
Pratiques de correction
 |
Je corrige les programmes en appliquant des codes de correction. Vous
trouverez ici la liste des codes les plus fréquents.
|
 |
Ma stratégie de correction en tant que telle (pour le code, à
tout le moins) est résumée ici.
|
 |
Cliquez sur cette cible pour un résumé des principales règles de
programmatique en vigueur dans ce cours.
|
Détail des séances en classe
Pour le groupe 01,
les séances sont de 8 h à 11 h 35. Pour le groupe
02, les séances sont de 12 h 35 à 16 h 10.
| Date |
Séance |
Détails |
|
13 mars |
S00 |
Au menu :
- Présentation du cours et du plan
de cours, du moins le volet qui nous concerne
- Nos thèmes pour ces trois séances seront (dans le désordre!) :
- Petit exercice de remise en forme :
- Implémentons une liste simplement chaînée d'éléments d'un certain
type T
- Comment la représenterons-nous?
- Quelle serait une bonne interface d'utilisation pour ce type?
- Quels sont les coûts des principales opérations associées à ce
type?
- Si vous souhaitez poursuivre le plaisir, à titre d'exercice
(répétez la réflexion de design dans chaque cas) :
- Transformez la liste simplement chaînée de T
en liste doublement chaînée de T
- Écrivez un TableauDynamique<T>
inspiré, dans son interface, par le (très mal nommé) type
List<T> de la
plateforme .NET
- Rappel sur :
L'activité de cette semaine vous sera présentée au cours de la séance.
- Présentation de l'activité pour cette semaine. Attention :
les activités sont cumulatives, alors ne prenez pas de retard!
- Cette semaine, votre activité sera (à venir)
boites-v0.html
- Notez que le code proposé est en C# 9. Vous pouvez le
« simplifier » (légèrement) avec une version plus récente du
langage.
Pour un exemple d'énumérateurs sur des entiers pairs, voir
https://dotnetfiddle.net/EZ9jFR :
using System;
using System.Collections;
using System.Collections.Generic;
foreach (int n in new Pairs(1, 10))
Console.Write($"{n} "); // 2 4 6 8 10
class Pairs : IEnumerable<int>
{
int Min { get; init; }
int Max { get; init; }
public Pairs(int min, int max)
{
Min = min;
Max = max;
// valider que Min <= Max si vous voulez
}
class ÉnumPairs : IEnumerator<int>
{
int Cur { get; set; }
Pairs Source { get; init; }
public ÉnumPairs(Pairs source)
{
Source = source;
// en C# comme en Java, faut se placer avant le premier élément à parcourir
Cur = Source.Min % 2 == 0 ? Source.Min - 2 : Source.Min - 1;
}
public bool MoveNext()
{
if (Cur + 2 > Source.Max) return false;
Cur += 2;
return true;
}
public int Current => Cur;
object IEnumerator.Current => throw new NotImplementedException();
// Vous devez aussi coder quelques trucs sans intérêt, que vous pouvez faire générer par Visual Studio
public void Reset() { }
public void Dispose() { }
}
// GetEnumerator doit retourner un IEnumerable capable de parcourir les éléments de la séquence
public IEnumerator<int> GetEnumerator() => new ÉnumPairs(this);
// Vous devez aussi coder un autre truc sans intérêt, que vous pouvez faire générer par Visual Studio
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() =>
throw new NotImplementedException();
}
Pour l'exemple de Liste<T> avec énumérateur
(et un peu plus),
voir
https://dotnetfiddle.net/aK9oxz :
using System;
using System.Collections;
using System.Collections.Generic;
var lst = new Liste<string>();
lst.AjouterIntervalle(new []{ "J'aime", "mon", "prof" });
foreach (var s in lst)
Console.Write($"{s} ");
class ListeVideException : Exception { }
class Liste<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator() =>
new Énumérateur(Tête);
IEnumerator IEnumerable.GetEnumerator() =>
new Énumérateur(Tête);
// un énumérateur de C# / un itérateur de Java, modélise
// une séquence à demi ouverte (debut, fin]
class Énumérateur : IEnumerator<T>
{
Noeud Cur { get; set; }
public Énumérateur(Noeud tête)
{
Cur = new (default);
Cur.Succ = tête;
}
public bool MoveNext()
{
if (Cur.Succ == null)
return false;
Cur = Cur.Succ;
return true;
}
public void Reset() => throw new NotImplementedException();
public void Dispose() { }
public T Current => Cur.Valeur;
object IEnumerator.Current => Cur.Valeur;
}
class Noeud
{
public T Valeur { get; init; }
public Noeud Succ { get; set; } = null;
public Noeud(T val)
{
Valeur = val;
}
}
Noeud Tête { get; set; } = null;
Noeud Queue { get; set; } = null;
public bool EstVide => Tête == null;
public void AjouterDébut(T val)
{
var noeud = new Noeud(val);
if (EstVide)
Tête = Queue = noeud;
else
{
noeud.Succ = Tête;
Tête = noeud;
}
}
public void AjouterFin(T val)
{
Noeud noeud = new (val);
if (EstVide)
Tête = Queue = noeud;
else
{
Queue.Succ = noeud;
Queue = noeud;
}
}
public void SupprimerDébut()
{
if (EstVide)
throw new ListeVideException();
Tête = Tête.Succ;
if (Tête == null)
Queue = null;
}
public T PeekDébut() =>
EstVide? throw new ListeVideException(): Tête.Valeur;
public T PeekFin()
{
if (EstVide)
throw new ListeVideException();
return Queue.Valeur;
}
//public static Liste<T> Dupliquer(Liste<T> src)
//{
// Liste<T> dest = new();
// for (Noeud p = src.Tête; p != null; p = p.Succ)
// dest.AjouterFin(p.Valeur);
// return dest;
//}
public Liste<T> Dupliquer()
{
Liste<T> dest = new();
for (Noeud p = Tête; p != null; p = p.Succ)
dest.AjouterFin(p.Valeur);
return dest;
}
public void AjouterIntervalle(IEnumerable<T> src)
{
foreach(T e in src)
AjouterFin(e);
}
}
|
|
20 mars |
S01 |
Au menu :
À venir
|
|
27 mars |
S02 |
Au menu :
À venir
|
Petits coups de pouces
Vous trouverez ici quelques documents, la plupart petits, qui peuvent vous
donner un petit coup de pouce occasionnel.
Vous trouverez aussi des exemples de code C#
dans la section Divers – C#
du site.
Solutionnaires et exemples
Quelques solutionnaires suivent. En espérant que ça vous aide à organiser vos idées!
| Exemple | Séance |
À venir | |
À venir | |