- VinZTDoyen
Plus je vous lis, plus je me dis qu'il est vital que je n'enseigne pas la future spécialité informatique …
- MathadorEmpereur
e1654d a écrit:Et justement, dans les vieilles versions de C (jusqu'au début des années 1990 je crois mais qui sont restées les références pendant longtemps après), on ne pouvait pas déclarer une variable n'importe où, pour la même raison qu'en Pascal : les compilos ne savaient pas faire. Il est probable que cet extrait de code, même s'il est plus récent, a été écrit en voulant respecter la norme C de 1989, ou tout simplement que l'habitude ancienne a été conservée.
Plus précisément, le C89 impose de faire les déclarations au début des blocs. Ce n'est donc pas forcément au début de la fonction, comme le montre l'exemple suivant:
- Code:
int main ()
{
int a = 5;
a += 1;
{
int b = 8;
a += b;
}
return a;
}
- Code:
$ gcc -Wall -std=c89 -pedantic test.c
$ ./a.out
$ echo $?
14
Les compilos étaient donc capable de mélanger déclarations et instructions, c'est simplement que l'on peut réduire le nombre de passes pour compiler si l'on met les déclarations en premier: le compilateur peut alors lire les déclarations, et en déduire la disposition de l'enregistrement d'activation du bloc avant de compiler le reste. Cela permet d'écrire la version compilée de la fonction de façon séquentielle: dès le début de la compilation de la partie instructions, le décrément à apporter au pointeur de pile est connu, et chaque variable locale est directement traduisible en un décalage connu par rapport au frame pointer.
Pour ce qui est du noyau Linux, c'est effectivement une politique des développeurs.
_________________
"There are three kinds of lies: lies, damned lies, and statistics." (cité par Mark Twain)
« Vulnerasti cor meum, soror mea, sponsa; vulnerasti cor meum in uno oculorum tuorum, et in uno crine colli tui.
Quam pulchrae sunt mammae tuae, soror mea sponsa! pulchriora sunt ubera tua vino, et odor unguentorum tuorum super omnia aromata. » (Canticum Canticorum 4:9-10)
- Not a PandaHabitué du forum
AmyR a écrit:Bonjour,
quelle progression allez-vous adopter cette année pour la partie algo/programmation ?
J'aimerais pouvoir illustrer certaines partie du cours avec de la programmation mais du coup j'ai la tentation de faire toutes les bases d'un coup ce qui fait qu'au final je ne sais pas par où commencer :/.
Faites-vous écrire du cours ? (définition d'algorithmes, de variables, ...) ?
Surement pas !
J'en fais le minimum possible : affectation, test if, quelques exemples simples sur la calculatrice et basta. Je ne suis pas professeur d'informatique.
- e1654dNiveau 7
Tout à fait, c'était au début de la portée où existe la variable : dans l'exemple, la variable b n'existe pas en dehors de la paire d'accolades qui l'entoure (on ne pourrait pas faire return b à la place de return a).
Pour en revenir à Python et peut-être clore cette discussion, il ne faut pas oublier que, contrairement à C, il est impossible de simplement déclarer une variable (dire son nom et son type) : on est obligé de la définir (lui donner une première valeur). Ce qui à mon sens renforce l'intérêt de n'introduire les variables que quand elles deviennent utiles : dans le cas contraire on est obligé de les (pré)définir avec une valeur qui n'a pas forcément de sens au moment où on le fait.
Maintenant oui ; dans les années 1980 je n'en suis pas certain, en tout cas de façon concrète. Aujourd'hui le non-respect de cette règle de C89 n'est qu'un avertissement parce qu'on n'est pas en train d'utiliser un compilateur de l'époque.Les compilos étaient donc capable de mélanger déclarations et instructions,
Pour en revenir à Python et peut-être clore cette discussion, il ne faut pas oublier que, contrairement à C, il est impossible de simplement déclarer une variable (dire son nom et son type) : on est obligé de la définir (lui donner une première valeur). Ce qui à mon sens renforce l'intérêt de n'introduire les variables que quand elles deviennent utiles : dans le cas contraire on est obligé de les (pré)définir avec une valeur qui n'a pas forcément de sens au moment où on le fait.
- Badiste75Habitué du forum
Je ne fais pas écrire de cours mais leur donne des polys qu’on lit et commente en classe. Je leur dis que ce n’est pas à connaître par cœur, mais qu’il faut comprendre les grandes lignes.
- InvitéInvité
ben2510 a écrit:En seconde ?
* d'abord des algos de calcul, du genre DNB, et leur traduction sur calculatrice avec des variables pour stocker les étapes de calcul (en mode interactif) et enfin sous forme de programme (sur calcu, et sur pythontutor) : o travaille la notion de variable, l'affectation, et en maths image/antécédents, résolutions d'équations avec une forme canonique
* en octobre, code.org/hoc en demi-groupes : notion de boucle, d'alternative
* quand les formules pour déterminer une équation de droite m=dy/dx et p=y-mx sont sues, je les fait "programmer sur calcu avec autorisation de s'en servir en DS (bon évidemment quand il y a des mélanges de racines, de décimaux et de fractions dans les coordonnées des deux points, ça ne sert à rien)
* en novembre, des exos python et tortue (après avoir fait la géo ana en octobre), du genre chat orange ; l'aspect mathématique est essentiellement du calcul d'angles, et ça débouche sur Al-Kashi et la loi des sinus
* fin novembre, de l'arithmétique : décomposition en produits de facteurs premiers, algo d'Euclide : notion de liste (Python et sur TI), boucle indéfinie (while, quoi), critère d'arrêt, preuve de terminaison, preuve de correction ; mathématiquement, je retravaille les règles de calcul sur les puissances (genre DEFP de 325 ? puis DEFP de 325^100 ?)
* dichotomie (sur tableur d'abord, avec des =SI(), puis pythontutor et TI),
* en février, on a programmé en Processing un escargot de Pythagore
* en mars pendant les probas je fais simuler une loi géométrique et une loi binomiale
* sur tableur je fais en avril mai un travail sur variation absolue constante/variation relative constante (suite arithmétique vs suite géométrique, quoi), qui débouche sur un algo de seuil "temps de doublement" qui prend un taux et renvoie le nombre (entier) d'augmentations successives nécessaires pour doubler une grandeur
* en mai, je travaille à nouveau la simulation pour illustrer la notion d'IF, en Python avec des listes et une visualisation en diagrammes en barres (on simule 1000 fois 100 tirages, p.ex ; sur calcu c'est long...)
* l'année dernière on a eu le temps en fin d'année de programmer une courbe du chien
* par contre on n'a pas eu le temps de calculer la longueur d'un arc de parabole en utilisant une subdivision ; on l'a juste fait sur tableur
Une dernière remarque : je ne fais pas du tout de géo ana genre formule des milieux/de la distance/ d'appartenance à un cercle, pour éviter les problèmes liés à la représentation des réels
Merci pour cette réponse très complète !
Not a Panda a écrit:AmyR a écrit:Bonjour,
quelle progression allez-vous adopter cette année pour la partie algo/programmation ?
J'aimerais pouvoir illustrer certaines partie du cours avec de la programmation mais du coup j'ai la tentation de faire toutes les bases d'un coup ce qui fait qu'au final je ne sais pas par où commencer :/.
Faites-vous écrire du cours ? (définition d'algorithmes, de variables, ...) ?
Surement pas !
J'en fais le minimum possible : affectation, test if, quelques exemples simples sur la calculatrice et basta. Je ne suis pas professeur d'informatique.
Badiste75 a écrit:Je ne fais pas écrire de cours mais leur donne des polys qu’on lit et commente en classe. Je leur dis que ce n’est pas à connaître par cœur, mais qu’il faut comprendre les grandes lignes.
Merci. Je vais surement distribuer un poly "aide mémoire en python". En fait, j'aimerais pouvoir me servir de python pour illustrer des choses en classes comme on le fait avec geogebra.
- ben2510Expert spécialisé
En première et terminale, je donne souvent une liste de programmes (plutôt que d'algos) à entrer dans la calculatrice, même si le modèle examen remet un peu en cause ce fonctionnement.
En première et terminale également, le meilleur moyen pédagogique que j'ai trouvé est de balancer un exo au début de chaqee séance pendant trois semaines, voir par exemple les PJ.
https://framadrop.org/r/3UQpzrXqYD#6GlUCPNZlEoDbOdamHbC0UQKTF+Ym3vuutCFVLHhGVs=
https://framadrop.org/r/2jSCKGy0Iy#5NNVMydC3Rybwp7hOE8Nb20RNJpJKQUGcfurvlZawvo=
Pas de cours non plus, mais je fais noter quelques constructions utiles, en ce qui concerne Python.
En première et terminale également, le meilleur moyen pédagogique que j'ai trouvé est de balancer un exo au début de chaqee séance pendant trois semaines, voir par exemple les PJ.
https://framadrop.org/r/3UQpzrXqYD#6GlUCPNZlEoDbOdamHbC0UQKTF+Ym3vuutCFVLHhGVs=
https://framadrop.org/r/2jSCKGy0Iy#5NNVMydC3Rybwp7hOE8Nb20RNJpJKQUGcfurvlZawvo=
Pas de cours non plus, mais je fais noter quelques constructions utiles, en ce qui concerne Python.
_________________
On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison. Henri Poincaré La notion d'équation différentielle est le pivot de la conception scientifique du monde. Vladimir Arnold
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum