Notes diverses

Michel Billaud (michel.billaud@laposte.net)

22 juillet 2022

1 Licence

Cette collection de notes est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 France.

2 Une vieille conjecture

Il y a très longtemps (vers 88 je crois) je m’étais posé une question que je n’avais pas résolue. Ce n’était pas du tout mon domaine, et ça me paraissait plus dur que prévu. Apparemment ça a intéressé des gens (combinatoire des mots) et c’est toujours une question ouverte.

Si vous voulez tenter votre chance…

Document: conjecture.html

En cours: biblio des articles qui en causent.

3 Génération en Verilog

Dans un épisode précédent on a vu comment obtenir un additionneur 2 x 4 bits + retenues à partir de 4 additionneurs 2 x 1 bit + retenues, en les listant explicitement.

Avec l’instruction generate de Verilog, nous allons éviter de construire ce type de code grâce à une boucle de génération, au lieu de faire du copier-coller-modifier.

4 Description structurelle d’un additionneur en Verilog

On montre comment

Exemples :

Document : additionneur-verilog

5 Vérifier le résultat des élections

Sur les réseaux sociaux, on trouve régulièrement des messages promouvant l’usage des machines à voter, ou du vote en ligne.

Pour faire bref, je suis contre les deux, mais ce n’est pas le point. L’objet de cette note c’est de réfuter l’affirmation à propos du vote “papier” :

Ok, on peut surveiller le vote et le dépouillement (en étant présent dans les bureaux) , mais pour la totalisation nationale, on ne peut pas faire faire confiance.

en montrant

sur l’exemple du premier tour de la présidentielle 2022.

Pour ça, on verra comment

Pourquoi Python ? Parce que c’est un langage de programmation

Document : calculs-elections.html

6 Permutation qui ordonne un tableau, en C

On veut trouver la permutation qui ordonne un tableau.

Exemple : pour le tableau

int array[9] = { 66, 11, 44, 22, 88, 55, 77, 99, 33};

la suite d’indices {1, 3, 8, 2, 5, 0, 6, 4, 7}

parce que array[1]=11, array[3]=22, array[8]=33, etc.

  1. C’est facile à faire avec qsort_r qui est une extension GNU.
  2. Un bricolage permet de le faire avec qsort, mais ça donne du code non réentrant.
  3. On montre comment adapter un algo de tri en fonction de tri “réentrante” paramétrée par une fonction de comparaison.

Document : calculs-elections.html

7 Bibliothèque dynamique sous Linux, CodeBlocks

Dans de nombreux cours de programmation en C on demande aux élèves

Je montre comment

Document : bib-dynamique-linux.html

8 Corrigé sujet 7 épreuves pratiques NSI

Sujet dans https://eduscol.education.fr/document/33193/download :

Document : corrige-22-NSI-07.html

9 Corrigé sujet 7 épreuves pratiques NSI

Sujet dans https://eduscol.education.fr/document/33202/download :

Document : corrige-22-NSI-08.html

10 Corrigé sujet 6 épreuves pratiques NSI

Sujet dans https://eduscol.education.fr/document/33193/download :

Document : corrige-22-NSI-06.html

11 Corrigé sujet 5 épreuves pratiques NSI

Sujet dans https://eduscol.education.fr/document/33190/download :

Document : corrige-22-NSI-05.html

12 Corrigé sujet 4 épreuves pratiques NSI

Sujet dans https://eduscol.education.fr/document/33187/download :

Document : corrige-22-NSI-04.html

13 Corrigé sujet 3 épreuves pratiques NSI

Sujet dans https://eduscol.education.fr/document/33184/download :

Document : corrige-22-NSI-03.html

14 Corrigé second sujet épreuves pratiques NSI

Janvier 2022.

Sujet dans https://eduscol.education.fr/document/33181/download :

Document : corrige-22-NSI-02.html

15 Corrigé du premier sujet d’épreuves pratiques NSI

Le sujet se trouve sur la page https://eduscol.education.fr/2661/banque-des-epreuves-pratiques-de-specialite-nsi, dans https://eduscol.education.fr/document/33178/download

Questions :

Document : corrige-22-NSI-01.html

16 Configurer CodeBlocks

Sur le Web, certains cours recommandent aux débutants en C/C++ d’utiliser l’IDE CodeBlocks pour leurs premiers pas en C ou C++

Cette note n’est pas là pour critiquer ce choix, ni les cours en question - malgré le mal que j’en pense - mais pour aider à le configurer correctement pour débuter. Ici on montre comment faire pour que le compilateur

Document: configurer-codeblocks.html

17 Makefiles pour un projet en C avec un sous-projet

Quand un projet atteint une certaine taille, il arrive qu’on puisse en isoler une “bibliothèque” (sous-projet) qu’on espère réutiliser dans d’autres projets. Ici on montre comment organiser et compiler un projet (en C) qui contient un sous-projet. Et surtout, on explique les Makefiles qui vont avec.

Document : makefile-sous-projet.html

18 Sockets IPv4 et IPv6 en C

Janvier 2022. Les cours de programmation réseau/C utilisent obstinément une vieille API, en ignorant complètement IPv6, et les améliorations apportées au langage C depuis sa première normalisation en 1989.

On essaie de faire un peu mieux.

Document : sockets-ipv6.html

19 “Lambdas” en C

Novembre 2021. Comment simuler des “lambdas” en C dans un programme d’énumération des mots de Dyck (systèmes de parenthèses bien formés), qui se base sur un algorithme récursif, fondé sur la grammaire SϵaSbSS \rightarrow \epsilon \| a S b S.

Document : enumeration-mots-dyck-en-c.html

20 “Factory” en C

Novembre 2021. On montre comment mettre en oeuvre en C le patron de conception “factory”, dans lequel une fonction est utilisée pour fabriquer des objets de types distincts.

Document : factory-en-c.html

C’est une continuation de celui sur le polymorphisme en C

21 À propos des Makefiles

Novembre 2021. Récupération de quelques notes d’explication sur l’utilisation des Makefiles sur des projets de petite taille en C. Ces notes ont été écrite pour un cours C/Système en 2018.

Documents

22 Polymorphisme en C

Novembre 2021. On montre sur un exemple détaillé comment réaliser du polymorphisme en C

Le code suivant :

    Animal * animals[] = {
        (Animal *) new_Dog("Medor"),
        (Animal *) new_Fish("Yellow"),
        (Animal *) new_Dog("Rex")
    };

    for (int i = 0; i < 3; i++) {
        Animal_Talk(animals[i]);
        Animal_Feed(animals[i], "the kibbles"); // croquettes
    }

exécute, lors des appels d’Animal_Talk et Animal_Feed, du code différent, qui dépend du type effectif (Dog ou Fish) des objets. C’est réalisé grâce à une “table de fonctions virtuelles” propres à chaque type.

Document : polymorphisme-en-c.html

23 Génération des permutations

Novembre 2021. Cette note explique en détail un algorithme classique pour passer d’une permutation, par exemple (3,5,2,4,1)(3, 5, 2, 4, 1) à la suivante dans l’ordre lexicographique (3,5,4,1,2)(3, 5, 4, 1, 2).

La technique présentée peut se généraliser à des énumérations d’autres types (note à venir).

Le code est fourni en Fortran 95 (ça m’amusait de l’apprendre, j’en étais resté à la version 77) et en C.

Document : permutation-suivante.html

24 Vi, comment s’en sortir ? (et l’utiliser un peu)

L’éditeur de textes vi est apparu en 1976, il est présent sur la majorité des systèmes Unix (vim, version améliorée). C’est parfois le seul éditeur installé au départ, et souvent l’éditeur de textes par défaut. On peut en préférer d’autres, mais il est important de savoir en sortir si on est tombé dedans, et de connaître quelques commandes de bases pour l’utiliser, même si on référerait autre chose.

Document : vi-utilisation-basique.html

25 Les tris

D’où viennent les idées sur les algorithmes de tri “naïfs” qu’on présente souvent aux débutants : tri par sélection, tri par insertion, tri à bulles ?

Document : idees-tris-naifs.html

26 Réseau

Document : reseau-local.html

Document : routage.html

27 Développer à partir des tests

Quand on programme, on se trompe souvent. Il est intéressant de prévoir des tests automatisés dès le début.

Illustration avec C.

Document : dev-tests-c.html

28 Exercices “somme et moyenne d’un tableau”

Exercices très simples qu’on donne souvent à écrire aux débutants. Le problème est qu’ils sont souvent mal posés, sur le plan pédagogique.

On présente une formulation de ces exercices (pour C), et on explique les problèmes courants avec les autres formulations.

Document : exo-somme-tableau.html

29 Bases markdown

Le strict minimum, pour les débutants.

Document : bases-markdown.html