Bon, il est tard, je vais m'arrêter là. J'ai parcouru toute la première partie du cours, et voici tout ce que j'ai pu relever. Notez bien que j'avais commencé à relever aussi l'orthographe et la typographie dans un bloc-notes différent, mais je me suis interrompu après le chapitre 1 parce que… fin, voyez vous-mêmes.
Remarque générale : vous mélangez allègrement guillemets droits simples et apostrophes typographiques ; il faudrait utiliser ces dernières dans tout le texte.
Autre remarque générale : il faut vous mettre d'accord pour savoir si vous vouvoyez un lecteur unique ou si vous vous adressez à un groupe de lecteurs. En effet, ces trois passages du chapitre 1 sont incohérents et il est impossible de trancher sans une décision de votre part.
Il vous faut donc être bien motivés
vous y serez confronté tôt ou tard
Si vous vous sentez prêts
Intro générale
de revoir un certains nombres de points
certain nombre
et qui nous ont aidé à faire
aidés
Conclusion générale
Pour continuer votre apprentissage, voici quelques derniers conseils
Dans la mesure où chacun des points de votre liste comporte un double point, et que deux d'entre eux contiennent un point de fin de phrase, il est indispensable de mettre un point à la fin de cette phrase, une majuscule au début de chaque item de la liste et un point (pas un point-virgule) à la fin de chaque.
etc
Un point à la fin de « etc. » (qui fusionne avec le point de fin de phrase si vous adoptez mon conseil précédent) et surtout pas d'italique.
ou façon de faire et progressez
façons
Vous pouvez par exemple commencez
commencer
visitant les forums de ce site
Pas d'italique à « forums ».
Chapitre 1 : Avant-propos
n’importe qu'elle personne intéressée
quelle
Les explications seront les plus claires possible
possibles
Toutefois, quelques qualités sont opportunes pour arriver au bout de ce cours
Même remarque que plus haut sur la typographie des listes.
comprendre, s’entrainer, faire des erreurs
« vous entraîner » passerait mieux
de cours, de forums et documentations
et de
suivre ce cours sans problèmes
problème
Allez plus loin
« Aller » passerait mieux.
Chapitre 1 : La programmation, qu’est-ce que c’est ?
Tout ce que vous possédez sur votre ordinateur sont des programmes
est un programme
on ne peut pas créer d’instructions
instruction
certaines instructions de bases
base
sauf cas particulier vraiment tordus
particuliers
spécialement conçu pour effectuer ces instructions
exécuter
sous la forme de chiffres binaire
binaires
forme de zéro ou de un
suites de zéro et de un (x3)
zéros, uns
des ordres à effectuer
exécuter
imaginez que vous devez communiquer
deviez (le subjonctif est plus naturel, et il est utilisé un peu plus bas dans le même contexte « imaginez que »)
une suite de zéro et de un
Quater repetita placent
Ce langage s’appelle : le langage machine.
Pas de double point.
évolué en une suite de zéro et de un
Quinquies repetita placent, mais je vous ai suggéré de supprimer la phrase qui contient celle-là, donc ça compte pas vraiment.
voici un code écrit en C (que nous apprendrons à connaître) :
Et le même en langage machine (plus précisémment pour un processeur de la famille x86-64) :
Un point à la place des doubles points.
Chapitre 1 : Le langage C
Son succès était tel auprès des informaticiens
fut
sans devoir changé ledit code
changer
vers d’autres langages comme le Python par exemple.
Une virgule après « langages ».
mais en contrepartie on voit moins bien le
Une virgule après « contrepartie ».
n’importe quel compilateur sans problèmes
problème
la norme officielle coûtant relativement chère
cher
Chapitre 1 : L’algorithmique
une liste de 10 nombres dans l'ordre croissant
dix
Voici un exemple de pseudo-code :
Un point à la place du double point.
Chapitre 1 : Conclusion
Souvenez-vous bien qu’il vous faudra
« Rappelez-vous que » ou « Souvenez-vous de ce que », mais pas de mélange.
Chapitre 1 : Avant-propos
Elle s’oppose à une autre plus fréquente et plus superficielle, qui permet certes d’acquérir des connaissances rapidement, mais qui s’avère bien souvent peu payante sur le long terme, beaucoup de programmeurs débutants se retrouvant ainsi perdus lorsqu’ils sont jetés dans la jungle de la programmation à la fin d’un cours, ceux-ci manquant souvent de connaissances techniques, de (bonnes) pratique(s) et de rigueur.
Cette phrase est trop longue, il faudrait la couper en deux. Par exemple, avec un « En effet, » entre « long terme » et « beaucoup de programmeurs ».
Toutefois, quelques qualités sont opportunes pour arriver au bout de ce cours :
Ce n'est pas très important, et un vrai lecteur ne s'en rendra sans doute pas compte, mais les conseils que vous donnez pour débuter recouvrent largement ceux que vous donnez pour continuer à apprendre dans la conclusion générale.
Chapitre 1 : La programmation, qu’est-ce que c’est ?
Notre ordinateur est conçu, câblé, et peut traiter certaines instructions de bases, précâblées dans ses circuits,
Le début de cette phrase (jusqu'à « câblé ») est assez obscur, et je ne peux vous proposer de correction, ne sachant pas ce que vous cherchez à dire.
Autant vous dire que créer des programmes de cette façon revient à se tirer une balle dans le pied.
N'hésitez surtout pas à mettre un lien vers mon cours sur l'assembleur, pour ceux qui voudraient se rendre compte à quel point cette affirmation est juste.
Il existe de nombreux langages de programmation, et le C est un de ces langages.
« est l'un d'entre eux » serait plus léger, ce paragraphe ayant déjà une certaine tendance à la répétition.
Autrement dit, le rôle du traducteur est de transformer un texte écrit dans un langage de programmation évolué en une suite de zéro et de un que le processeur peut comprendre. Il ne vous est ainsi plus nécessaire de connaître la langue de votre processeur.
Je sais que l'apprentissage est une longue répétition, mais là, ça fait vraiment trop : vous ne faites que paraphraser.
Malgré tous ces langages de programmation disponibles, nous allons dans ce tutoriel nous concentrer sur un seul langage : le langage C.
Le deuxième « langage » est vraiment lourd.
Chapitre 1 : Le langage C
La norme sert donc à officialiser tout un tas de règles pour que tous les interprètes (et donc les compilateurs) la suivent.
Idem, paraphrase.
Chapitre 2 : Windows
Ensuite, cliquez sur « paramètres systèmes avancés ». Dans la nouvelle fenêtre qui s'ouvre, allez dans « paramètres systèmes avancés »
Il y a donc un menu « paramètres systèmes avancés » dans une fenêtre qui porte déjà ce même nom ?
Pour le télécharger, rendez-vous simplement dans la rubrique « téléchargements ».
La rubrique « téléchargements » de quoi ?
Chapitre 2 : GNU/Linux, *BSD et autres Unixoïdes
Ceci dépend de votre interprétateur de commande.
Interpréteur.
Également, c'est un détail, mais pour Windows comme pour OS X, vous indiquez comment lancer le terminal, mais par pour les Unixoïdes. Or, quelqu'un qui a besoin qu'on lui apprenne cd
ou mkdir
ne saura pas nécessairement lancer un terminal voire n'en aura jamais entendu parler.
Chapitre 2 : Mac OS X
Référez-vous à l'introduction dédiée à GNU/Linux, *BSD et les autres Unixoïdes.
Il y a pas mal de redites entre les différentes sections, du coup, il serait peut-être plus judicieux de regrouper les trois OS ensemble et de ne donner les différences que point par point. Ce qui permettrait de donner quelques explications supplémentaires, comme le fait que c'est toujours GCC qui est utilisé en sous-main, mais comme il vient de GNU/Linux, il est emballé sous les autres OS ; ou encore, expliquer vite fait les commandes ésotériques de configuration, qui sont globalement les mêmes sur les 3 OS.
Chapitre 2 : Notre cible
Vous en connaissez énormément, peut-être sans le savoir : le lecteur de musique, le navigateur Internet, le logiciel de discussion instantanée, la suite bureautique, les jeux vidéos, ce sont tous des programmes graphiques, ou programmes GUI.
Je trouve que vous vous répétez par rapport à votre explication sur ce que sont des programmes, dans le chapitre 1.
Voici un exemple de programme en console :
Comme exemple de programme GUI, vous prenez un vrai logiciel complet de la vraie vie, et comme exemple de programme en ligne de commande, vous prenez un jeu de bas étage qu'on n'utilise même pas en vrai mais uniquement comme exercice de cours : ce faisant, vous donnez une mauvaise image des programmes en ligne de commande, et vous risquez que votre lecteur se demande si ça vaut la peine de se fader 22 chapitres (que vous avez annoncés comme difficiles) pour en arriver juste là. Du coup, vous devriez prendre comme exemple de vrais logiciels complets tels qu'on peut en utiliser : parted, zip et unzip, voire ssh ou un navigateur en mode texte. Ça permettrait de montrer qu'on peut faire des choses fantastiques juste en ligne de commande.
Chapitre 2 : Première rencontre
zcc main.c
Sous Windows, c'est zcc.bat
qu'il s'appelle, vous n'avez pas créé d'alias (si c'est seulement possible).
Chapitre 2 : Les commentaires
J'insisterais un peu plus sur la nécessité et l'utilité des commentaires, mais je suis un grand commentateur, et on a pu voir que ce n'est pas forcément le cas de tout le monde, donc peut-être êtes-vous plus dans le camp des sceptiques.
Chapitre 3 : Qu'est-ce qu'une variable
Comme en témoigne cette citation des années 1940, provenant des concepteurs d'un des tout premiers ordinateurs
Y'a pas de citation.
Je trouve tout le passage sur la mémoire beaucoup trop détaillé pour vos besoins, même si je me doute que mewtwo a dû se faire plaisir là-dessus. Quel besoin a-t-on de connaître les registres ? Un programmeur C ne les utilisera jamais. Quel besoin aussi d'insister sur la différence entre RAM et HDD ? Les OS modernes virtualisent tellement la mémoire que même à un niveau aussi bas que le C on ne peut jamais savoir où se situe physiquement la mémoire qu'on utilise. Tout le passage sur les adresses et les références paraît déplacé à ce stade, il ne sera guère utile qu'au moment de parler des pointeurs : à ce niveau de connaissance, l'explication de l'étiquette est amplement suffisante. Et moins rébarbative pour votre lecteur novice total.
Chapitre 3 : Déclarer une variable
Le lien vers une image de PDP-11 est mort.
Peut-être mettre un paragraphe sur l'utilité du typage statique ? Je sais que quand j'ai commencé le C, je trouvais que ce système était une contrainte inutile par rapport à un typage dynamique à la PHP, et je ne doute pas que d'autres débutants auront la même réaction.
const long abc = 3141596;
Vu que juste après, dans le bloc info, vous parlez de const
avec l'exemple de pi, ne vouliez-vous pas donner à abc
la valeur 31415926 plutôt ?
Chapitre 4 : Introduction
Comme sur la question de la mémoire, je trouve cette présentation des choses très proche du matériel plus contre-productive qu'autre chose. Les OS ont la main-mise totale sur la communication avec le matériel, et le programmeur C ne sera guère amené à communiquer qu'avec des abstractions fournies par son OS : vos lecteurs n'enverront jamais la moindre information à leur écran, dans le meilleur des cas, ils écriront dans STDOUT. D'ailleurs vous revenez dessus en fin d'intro : on va écrire quelque chose dans la console, et pas ailleurs !
Chapitre 5 : Les opérations mathématiques de base
Division et modulo
Y'a des fois où le diviseur est 6, d'autres ou c'est 4 (comme si vous aviez changé en cours de route), et le tout est incohérent, genre printf("15 / 4 = %d\n", 15 / 6);
: il faut choisir l'un ou l'autre.
Chapitre 6 : Les opérateurs logiques
En effet, comme pour les opérateurs mathématiques, les opérateurs logiques ont une priorité (revoyez le chapitre 6 si cela ne vous dit rien)
C'est dans le chapitre 5 que cette question est abordée.
Chapitre 7 : La structure if
Si la condition n'est pas vérifiée, le bloc d'instruction est passé et le programme recommence immédiatement à la suite du bloc d'instruction délimité par l'instruction if
.
Paraphrase de l'explication suivante donnée trois lignes plus haut.
L'instruction if permet d'exécuter un bloc d'instructions si une condition est vérifiée ou de le passer si ce n'est pas le cas.
.
Dès lors, hors d'une instruction if suivie de plusieurs instructions else if (le tout éventuellement terminé par une instruction else), un seul bloc d'instruction sera exécuté.
Le « hors » paraît hors de propos.
else if (heure >= 7 && heure <= 12)
Il faut mettre 11, sinon, le else if (heure == 12)
ne pourra jamais s'exécuter.
- si le score est supérieur ou égal à 5000 et que le score est inférieur à 9000, afficherz : « tu es sur la bonne voie ! » ;
- sinon, affichez : «
IT'S OVER NINE… (pardon, je me suis emporté… )
Chapitre 7 : L'instruction switch
printf("Quelle note as-tu obtenue ? ");
(première occurrence)
C'est un détail, mais précisez « sur 5 » : les notes sont usuellement sur 20, donc vous avez 3 chances sur 4 que l'utilisateur entre une note improbable.
Chapitre 8 : Correction
| if (an > 1582)
{
njours += ((an - 1) / 4);
njours -= ((an - 1) / 100);
njours += ((an - 1) / 400);
njours += 2;
}
else
njours += ((an - 1) / 4);
|
Dans la mesure où njours += ((an - 1) / 4);
est présent dans les deux possibilités, il serait plus élégant de le sortir du bloc conditionnel. En outre, ça rappellerait qu'un else
n'est pas toujours nécessaire.
En outre, le calcul du nombre de jours à ajouter en fonction du mois où l'on est est assez fastidieux et long. Il s'agit sans doute de la méthode la plus évidente, je le reconnais volontiers. Je me permets cependant de vous proposer cette solution alternative, qui fait usage de deux autres notions abordées en cours, l'opérateur ternaire et le cast de type.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | float jourssup = (mois - 1) * 30.5;
int estbisextile = (an > 1582) ? (an % 4 == 0 && (an % 100 != 0 || an % 400 == 0)) : (an % 4 == 0);
if ((mois - 1) % 2 == 0)
jourssup -= 0.5;
if (mois - 1 == 1)
jourssup++;
if ((mois - 1) % 2 == 1 && (mois - 1) < 7)
jourssup--;
if ((mois - 1) != 1 && !estbisextile)
jourssup--;
if (mois - 1 == 0)
jourssup = 0;
njours += (int) jourssup;
|
Pour vous convaincre de l'efficacité de la méthode, voici un tableau du nombre de jours cumulés à la fin de chaque mois.
Valeur moyenne |
30,5 |
61,0 |
91,5 |
122,0 |
152,5 |
183,0 |
213,5 |
244,0 |
274,5 |
305,0 |
335,5 |
366,0 |
Année ordinaire |
31 |
59 |
90 |
120 |
151 |
181 |
212 |
243 |
273 |
304 |
334 |
365 |
Année bissextile |
31 |
60 |
91 |
121 |
152 |
182 |
213 |
244 |
274 |
305 |
335 |
366 |
Chapitre 9 : La boucle while
puts("nombre = ");
La fonction puts
est inconnue du lecteur à ce stade du cours.
Chapitre 9 : La boucle do-while
Il me semble important que vous métiez un exemple concret de cas où la boucle do-while apporte vraiment quelque chose et n'est pas une facétie du langage, parce qu'un débutant a de fortes chances de se demander à quoi elle sert en pratique.
Chapitre 9 : Exercices
| km += 5;
printf("%u %u\n", km, km * 8 / 5);
} while(km < 30);
|
Ça me paraît peu élégant. J'aurais plutôt fait comme ça.
| km++;
printf("%u %u\n", km * 5, km * 8);
} while(km * 5 < 30);
|
Mais bon, c'est un détail.
| puts("Veuillez entrez un nombre : ");
|
Cf. supra.
| if (c == 'e' || c == 'E')
|
Vous ne comptez donc pas les -e- accentués ? Un mot comme « répétition » va passer entre les mailles du filet.
Chapitre 10 : L'instruction continue
Afin d'améliorer un peu l'exemple précédent, nous pourrions passer les cas où le diviseur testé est un multiple de deux (puisque si un des deux nombres n'est pas divisible par deux, il ne peut pas l'être par quatre, par exemple).
Tel que votre code est écrit, la divisibilité commune par 2 n'est jamais testée, donc avec 112 et 568 en entrée, le résultat sera faux.
Chapitre 11
J'ai vu que vous essayez d'être assez exhaustifs sur les sujets que vous abordez dans chaque chapitre, du coup, je m'étonne que vous ne parliez pas des fonctions inline. Ou est-ce que cela n'existe pas en C89 ?
Chapitre 12 : Préparation
Les puissances
Il est assez simple de se passer de la fonction pow
, à condition de n'accepter que les exposants entiers : la fonction puissance devient alors une boucle contenant des multiplications de la base par elle-même. C'est d'ailleurs comme ça (enfin, par une fonction récursive, mais c'est l'idée) qu'elle est définie dans la bibliothèque standard du Haskell.
La factorielle
Ne pas oublier que par convention, $0! = 1$.
Chapitre 12 : Correction
Si l'opérateur utilisé est q, alors nous quittons la boucle et par la même occasion le programme. Notez que nous n'avons pas pu effectuer cette vérification dans le corps de l'instruction switch qui suit puisque l'instruction break nous aurait fait quitter celui-ci et non la boucle.
Cela étant, vous auriez très bien pu l'intégrer au switch et sortir du tout grâce à un return, puisque le programme ne fait rien après la boucle infinie. Mais c'est un détail.
Chapitre 13 : Introduction
Ce chapitre est la suite directe du précédent
Du chapitre 11, vu que le TP est venu s'intercaler.
Chapitre 13 : Portée et masquage
Au niveau d'un fichier
Dans le chapitre sur les fonctions, vous avez déjà abondamment parlé des variables globales : il faudrait rappeler que c'est strictement la même chose dont vous parlez ici, pour ne pas donner l'impression qu'il y a deux phénomènes distincts.
Chapitre 13 : Diviser pour mieux régner
Dans le chapitre précédent, nous avions, entre autres, créé une fonction triple() que nous avons placée dans le même fichier que la fonction main().
C'était dans l'extrait précédent.