Quelques raccourcis :

420-201-RE – Introduction à la programmation

Ceci est un petit site de support pour le cours 420-201-RE – Introduction à la programmation.

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.clg.qc.ca/. Portez une attention particulière à ../../../Sujets/Divers--cdiese/index.html.

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.

Cliquez sur cette cible pour les normes appliquées dans ce cours, en ce qui a trait au pseudocode

Détail des séances en classe

Date Séance Détails

24 août

S00

Au menu :

  • Présentation du cours et du plan de cours
  • Premiers pas avec les séquences et le pseudocode (et même une touche de code C#, pour le plaisir)

27 août

S01

Au menu :

  • Introduction à la conception logicielle (chapitre 01 des notes de cours)
  • Structures de contrôle (première partie) : la séquence
  • Suites de nos premiers contacts avec le pseudocode
  • Introduction plus formelle du type float, pour représenter des nombres à virgule flottante
  • Première mention formelle du type int, pour représenter des nombres entiers
  • Retour sur les règles de nomenclature applicables dans le cours :
    • comment exprimer un nom de variable
    • comment exprimer un nom de constante
    • pourquoi limiter les noms en majuscules aux constantes
    • comment séparer des mots dans un nom de variable?
    • comment séparer des mots dans un nom de constante?
  • Présentation du laboratoire 00 : remettre un document
  • Présentation du laboratoire 01 : conversion de volumes

Exercices en classe :

À faire pour S02 :

  • Laboratoire 00 : remettre un document

À faire pour S03 :

  • Laboratoire 01 : conversion de volumes (analyse, pseudocode, jeux d'essai)

31 août

S02

Au menu :

  • Introduction à la conception logicielle (chapitre 01 des notes de cours)
  • Quelques éléments de culture, incluant :
    • Une très brève mention d'Alan Turing, un personnage important pour nous, et diverses considérations historiques
    • J'ai glissé un mot sur Kurt Gödel et sur David Hilbert, entre autres
  • Quelques éléments de vocabulaire :
    • Mention de noms et de préfixes utilisés pour nommer des quantités, particulièrement en informatique : bit, byte, octet, de même que les préfixes kilo (considéré par certains comme valant 1000, et par la plupart des informaticien(ne)s comme valant 1024), méga, giga et téra
  • Retour sur le laboratoire 00
  • Algorithmes et codification (chapitre 02 des notes de cours)
  • Quelques exercices

À faire pour S03 :

  • Laboratoire 01 : conversion de volumes (analyse, pseudocode, jeux d'essai)

Nous avons fait un petit exemple d'utilisation du type string et d'affichage, avec formatage « de base », avec formatage positionnel comme avec formatage par interpolation. Les trois sont des manières distinctes d'avoir le même effet.

Pour l'affichage « de base », le code suit :

using System;

namespace z
{
   class Program
   {
      static void Main(string[] args)
      {
         string nom;
         int âge;
         Console.Write("Nom? ");
         nom = Console.ReadLine();
         Console.Write("Âge? ");
         âge = int.Parse(Console.ReadLine());
         Console.Write("Bonjour, ");
         Console.Write(nom);
         Console.Write(" qui a ");
         Console.Write(âge);
         Console.WriteLine(" ans");
      }
   }
}

Pour l'affichage avec formatage positionnel, le code suit :

using System;

namespace z
{
   class Program
   {
      static void Main(string[] args)
      {
         string nom;
         int âge;
         Console.Write("Nom? ");
         nom = Console.ReadLine();
         Console.Write("Âge? ");
         âge = int.Parse(Console.ReadLine());
         Console.WriteLine("Bonjour, {0} qui a {1} ans", nom, âge);
      }
   }
}

Pour l'affichage avec formatage par interpolation, le code suit :

using System;

namespace z
{
   class Program
   {
      static void Main(string[] args)
      {
         string nom;
         int âge;
         Console.Write("Nom? ");
         nom = Console.ReadLine();
         Console.Write("Âge? ");
         âge = int.Parse(Console.ReadLine());
         Console.WriteLine($"Bonjour, {nom} qui a {âge} ans");
      }
   }
}

3 sept.

S03

Au menu :

  • Remise du laboratoire 01 : conversion de volumes (analyse, pseudocode, jeux d'essai)
  • Discussions sur le laboratoire 01
  • Préciser ce qui constitue ou non un intrant (ou : que signifie la primitive Lire du pseudocode?)
  • Retour sur les règles de nomenclature applicables dans le cours :
    • comment exprimer un nom de variable
    • comment exprimer un nom de constante
    • pourquoi limiter les noms en majuscules aux constantes
    • comment séparer des mots dans un nom de variable?
    • comment séparer des mots dans un nom de constante?
  • Retour sur le fait que deux noms différents dénotent deux objets distincts
  • Nombres à virgule flottante : utiliser le '.' ou la ','?
  • Types string, int, float et double
  • Suites de la section Algorithmes et codification (chapitre 02 des notes de cours)
  • Présentation du laboratoire 02 : gazonnage de parc (analyse, pseudocode, code C#, jeux d'essai)

À remettre :

  • Laboratoire 01 : conversion de volumes (analyse, pseudocode, jeux d'essai)

À faire pour S05 :

  • Laboratoire 02 : gazonnage de parc (analyse, pseudocode, code C#, jeux d'essai)

7 sept.

S04

Au menu :

  • Bref regard sur le transtypage, ou comment forcer le compilateur transformer une valeur d'un type vers un autre type – nous n'avons pas exploré formellement la chose, cela dit; nous l'avons mentionné et utilisé, sans plus, mais nous y reviendrons
  • Expressions arithmétiques, séquences et fonctions (chapitre 03 des notes de cours)
  • Survol des fonctions mathématiques de C#
    • aujourd'hui, nous limiterons notre démarche à l'utilisation de fonctions; évidemment, dans quelques séances, nous rédigerons nos propres fonctions
  • Services des types de C#
    • méthode Parse()
    • méthode ToString()
    • certaines constantes telles que MinValue, MaxValue et (pour les nombres à virgule flottante) Epsilon
  • Survol de la structure interne des nombres entiers
  • Débordements et leur effet (en utilisant un bloc checked... ne faites pas ça à la maison!)

À faire pour S05 :

  • Laboratoire 02 : gazonnage de parc (analyse, pseudocode, code C#, jeux d'essai)

10 sept.

S05

Au menu :

  • Introduction à l'approche que l'on nomme le développement graduel (approche Top-Down), chapitre 04 des notes de cours
  • Fonctions en pseudocode
    • paramètres passés par valeur
    • variables locales
    • retour
  • Fonctions en C#
    • paramètres passés par valeur
    • variables locales
    • retour
  • Diagramme hiérarchique
  • Présentation du laboratoire 03 : APOO volet plongeon (analyse, pseudocode, code C#, jeux d'essai)

À remettre :

  • Laboratoire 02 : gazonnage de parc (analyse, pseudocode, code C#, jeux d'essai)

À faire :

  • Travail sur le laboratoire 03 : APOO volet plongeon (analyse, pseudocode, code C#, jeux d'essai)

14 sept.

S06

Au menu :

  • Retour sur le laboratoire 02 : gazonnage de parc (analyse, pseudocode, code C#, jeux d'essai)
    • Pourquoi mettre son nom dans le document est une bonne idée (indice : ça évite d'avoir zéro)
    • Pourquoi respecter le format demandé pour les noms de fichiers évite de perdre des points (surtout après trois remises!)
    • Quand le livrable se limite à un document Word ou à un PDF, pas besoin de le zipper avec moi
    • Les caractères gras ne sont pas une décoration
    • Les polices de caractères ne sont pas un artifice
    • Les nombres à virgule s'écrivent... avec une virgule, en pseudocode comme dans l'analyse
    • Attention aux erreurs lexicales, en particulier aux constantes et aux variables qui changent de nom et brisent votre code!
    • Quelle police utiliser pour le code (incluant le pseudocode)?
    • Rappel sur la disposition des lignes longues (visibilité)
    • En C#, une variable dont le nom est en majuscules demeure une variable
    • Même dans l'analyse, éviter la confusion est important (p. ex. : « un cm est un centimètre » ressemble tellement à un accident qu'on « cherche le bogue »... Idem pour celles et ceux qui parlent de « l'aire de la surface » ou de « l'aire en m^3 » (truc : relisez-vous... lentement... avant d'envoyer le document!)
    • Comment utiliser le paysage et le portrait
    • Évitez les « De / DeLa / Du / Un / Le / La... » dans les noms de variables
    • Configurez votre éditeur de texte pour qu'il utilise la bonne langue pour vos études (« canadien français »)
    • Une bonne habitude à prendre : une variable, une vocation
    • Vous êtes plusieurs à vous nommer Pierre Prud'homme ou à avoir un labo 02 dans un namespace nommé Laboratoire_01_exemple_A2021_ ce qui me dit que plusieurs d'entre vous gagneraient à se relire avec un peu plus d'attention avant de livrer un labo 🙂
  • Exercices avec les fonctions :
    • Écrire une fonction prenant en paramètre les coordonnées de deux points et sur le plan cartésien, et retournant la distance entre ces deux points, de même qu'un petit programme testant cette fonction (solutionnaire)
    • Écrire une fonction calculant la pente d'une droite non-verticale étant donné l'ordonnée à l'origine et un point par lequel passe cette droite, de même qu'un petit programme testant cette fonction (solutionnaire)
    • Écrire une fonction prenant en paramètre un poids exprimé en kilogrammes et retournant la valeur équivalente, mais exprimée en livres, de même qu'un petit programme testant cette fonction (solutionnaire)

À faire :

  • Travail sur le laboratoire 03 : APOO volet plongeon (analyse, pseudocode, code C#, jeux d'essai)

17 sept.

S07

Au menu :

  • Présentation du laboratoire 04 : APOO volet glisse (analyse, pseudocode, code C#, jeux d'essai)
  • Arrondir un nombre à virgule flottante avec C#
  • Premier contact sommaire avec les alternatives, chapitre 05 des notes de cours
  • Structures alternatives (bases)

À remettre :

  • Travail sur le laboratoire 03 : APOO volet plongeon (analyse, pseudocode, code C#, jeux d'essai)

À faire :

  • Travail sur le laboratoire 04 : APOO volet glisse (analyse, pseudocode, code C#, jeux d'essai)

21 sept.

S08

Au menu :

À faire :

  • Travail sur le laboratoire 04 : APOO volet glisse (analyse, pseudocode, code C#, jeux d'essai)

24 sept.

S09

Au menu :

  • Fonctions prédicats
  • Exercices
  • Présentation du laboratoire 05 : APOO volet cartésien
  • Soutien en classe

À remettre :

  • Travail sur le laboratoire 04 : APOO volet glisse (analyse, pseudocode, code C#, jeux d'essai)

À faire :

  • Travail sur le laboratoire 05 : APOO volet cartésien (analyse, pseudocode, code C#, jeux d'essai)

 

28 sept.

S10

À venir

1 oct.

S11

À venir

5 oct.

S12

À venir

8 oct.

S13

À venir

12 oct.

s/o

Pas de cours aujourd'hui (journée de mise à niveau)

15 oct.

s/o

Pas de cours aujourd'hui (journée de mise à niveau)

19 oct.

S14

À venir

22 oct.

S15

À venir

26 oct.

S16

Je serai absent cette semaine car je donne des conférences à CppCon. Vous pourrez suivre mes aventures sur (lien à venir)

29 oct.

S17

Je serai absent cette semaine car je donne des conférences à CppCon. Vous pourrez suivre mes aventures sur (lien à venir)

2 nov.

S18

À venir

5 nov.

S19

À venir

9 nov.

S20

À venir

12 nov.

S21

À venir

16 nov.

S22

À venir

19 nov.

S23

À venir

23 nov.

S24

À venir

26 nov.

S25

À venir

30 nov.

S26

À venir

3 déc.

S27

À venir

7 déc.

s/o

Journée d'examen de français, formation générale (cours suspendus)

10 déc.

S28

À venir

14 déc.

S29

À remettre :

  • La PFI de la session A2021

Chic examen final

Petits coups de pouces

Vous trouverez ici quelques documents, la plupart petits, qui peuvent vous donner un petit coup de pouce occasionnel.

Comment accéder à du code .NET à partir d'un client C++ natif.

Vous trouverez aussi des exemples de code C# dans la section Divers – C# du site, mais notez que je n'ai pas nécessairement harmonisé ces exemples (écrits pour des cours plus avancés, sous forme de survols) aux standards de programmation appliqués dans le présent cours. À lire avec prudence et discrimination, donc.

Solutionnaires

Quelques solutionnaires suivent. Référez-vous aux règles programmatiques pour plus de détails sur les normes de programmation appliquées dans ce cours.

Travail

À venir

À venir

À venir

Conversion °F à °C

Énoncé : écrivez le pseudocode de l'algorithme qui lit une valeur en degrés Fahrenheit, calcule la valeur équivalente exprimée en degrés Celsius, puis affiche cette dernière.

Intrant(s) :

Extrant(s) :

tempCelsius (température exprimée en °C)

Autres informations pertinentes :

Pseudocode :

SEUIL_GEL_EAU ← 32
Lire tempFahrenheit
tempCelsius ← (tempFahrenheit - SEUIL_GEL_EAU) * 5 / 9
Écrire tempCelsius

Code C# :

using System;
namespace ConversionFahrCels
{
   class Program
   {
      static void Main()
      {
         const int SEUIL_GEL_EAU = 32;
         float tempFahrenheit,
               tempCelsius;
         tempFahrenheit = float.Parse(Console.ReadLine());
         tempCelsius = (tempFahrenheit - SEUIL_GEL_EAU) * 5 / 9;
         Console.WriteLine(tempCelsius);
      }
   }
}

Permutation de deux valeurs

Énoncé : écrivez le pseudocode de l'algorithme qui lit deux entiers nb0 et nb1, permute leurs valeurs, puis affiche les valeurs permutées

Pseudocode (une variable temporaire) :

Lire nb0
Lire nb1
temp ← nb0
nb0 ← nb1
nb1 ← temp
Écrire nb0
Écrire nb1

Pseudocode (sans variable temporaire; attention, solution limitée aux variables numériques) :

Lire nb0
Lire nb1
nb0 ← nb0 + nb1
nb1 ← nb0 - nb1
nb0 ← nb0 - nb1
Écrire nb0
Écrire nb1

Calculer la distance entre deux points

Énoncé : écrire une fonction prenant en paramètre les coordonnées de deux points et sur le plan cartésien, et retournant la distance entre ces deux points, de même qu'un petit programme testant cette fonction .

Code C# :

using System;

namespace z
{
   class Program
   {
      static double CalculerDistance(float x0, float y0, float x1, float y1)
      {
         double distance;
         distance = Math.Sqrt(Math.Pow(x0 - x1, 2) +
                              Math.Pow(y0 - y1, 2));
         return distance;
      }
      static void Main(string[] args)
      {
         Console.WriteLine("distance entre (0,0) et (0,1) : {0}",
                            CalculerDistance(0, 0, 0, 1)); // 1
         Console.WriteLine("distance entre (1,0) et (3,0) : {0}",
                            CalculerDistance(1, 0, 3, 0)); // 2
         Console.WriteLine("distance entre (0,0) et (1,1) : {0}",
                            CalculerDistance(0,0,1,1)); // 1,41...
      }
   }
}

Calculer la pente d'une courbe non-verticale

Énoncé : écrire une fonction calculant la pente d'une droite non-verticale étant donné l'ordonnée à l'origine et un point par lequel passe cette droite, de même qu'un petit programme testant cette fonction.

Code C# :

using System;

namespace z
{
   class Program
   {
      static double CalculerPente(float b, float x, float y)
      {
         double pente;
         pente = (y - b) / x;
         return pente;
      }
      static void Main(string[] args)
      {
         Console.WriteLine(CalculerPente(2, 2, 0)); // -1
      }
   }
}

Convertir un poids de Kg en Lbs

Énoncé : écrire une fonction prenant en paramètre un poids exprimé en kilogrammes et retournant la valeur équivalente, mais exprimée en livres, de même qu'un petit programme testant cette fonction.

Code C# :

using System;

namespace z
{
   class Program
   {
      static float ConvertirKgLbs(float poidsKg)
      {
         const float FACTEUR_CONVERSION = 2.2f;
         float poidsLbs;
         poidsLbs = poidsKg * FACTEUR_CONVERSION;
         return poidsLbs;
      }
      static void Main(string[] args)
      {
         float poidsKg;
         Console.Write("Votre poids en Kg? ");
         poidsKg = float.Parse(Console.ReadLine());
         Console.WriteLine($"Cela équivaut à {ConvertirKgLbs(poidsKg)} lbs");
      }
   }
}

Valid XHTML 1.0 Transitional

CSS Valide !