allez, en ajoutant juste avant tant que l'instruction suivante :
patte <--- mélange de 300 g de farine trois oeux, 100 g de sucre et 100 g de beurre fondu
un ecrit d'informatique devrait a mon avis etre independant d'un langage de programmation trop precis,
Le plus petit dénominateur commun me parait plus réaliste.
sinon on obeit a des effets de mode (pourquoi python plus que javascript, C++, Pascal, et j'en passe), on favorise la creation de monopoles dans un secteur qui a deja une tres forte tendance a en creer par effet reseau, empechant ou ralentissant l'emergence d'autres langages.
Ce qui empêche l'émergence c'est le java ou le PHP...
A une époque il y avait le CAML complètement déconnecté de la réalité (indépendamment de ses qualités) c'était pire.
Aucun langage ne sera enseigné éternellement, il est normal de réévaluer l'usage régulièrement.
En plus, l'absence de delimiteurs de bloc explicites de Python me semble mal adapte a un ecrit, et certaines caracteristiques de Python me semblent trop specifique, comme les boucles for (mal adapte pour etudier la complexite en espace), ou un certain masquage du passage par valeur ou par reference. Le langage algorithmique (tel qu'utilise dans les publications scientifiques mais aussi bien sur dans d'excellents bouquins comme celui de theorie des nombres de Cohen) ne presente pas ces defauts.
Bof, le risque de mal écrire diminue avec le nombre de copies que l'on rédige, cela avantage ceux qui travail sur le long terme (il y a toujours un risque du coté correcteur cependant :-D ).
Je ne vois pas a priori pourquoi les sujets porteraient sur les points délicats, ce n'est pas le sens des sujets de concours...
Quant au masquage, on peut le trouver regrettable mais comme c'est un concours moyen il n'y a pas de besoins objectifs de tester des "pièges" des langages de programmation.
et surtout n'exige pas de déclaration de variable (pour un prof de math qui exige des étudiants de définir chaque objet introduit dans un énoncé mathématique c'est dérangeant...)
Swift qui monte aussi, fait la même chose.
Là encore vous confondez (avec @parisse) ces langages ont été pensés pour simplifier le code, pas pour satisfaire un besoin de précision d'untel.
Le ruby on rails https://fr.wikipedia.org/wiki/Ruby_on_Rails a pour devise "Convention plutôt que configuration".
Après, il est clair que le tout python devrait être compensé par d'autres langages.
L'optimisation*, c'est des maths (et même de la recherche difficile en général). Et ça n'a rien à voir. Tu confonds théorie et pratique.
* l'art de faire des programmes qui tournent sur de vrais ordinateurs ultralimités comme on en vend dans le commerce et non sur des ordinateurs "magiques" qui exécutent toute instruction élémentaire en 0 seconde et dispose d'une mémoire infinie.
Dans la réalité, il coute moins cher de mettre beaucoup de ram et un disque dur supplémentaire dans un serveur puis d'attendre un ou deux ans la prochaine version d'un programme que de perdre deux mois et payer une fortune un développeur à corriger un logiciel mal foutu.
Souvent on utilise une bibliothèque ou un framework, si ils sont optimisés de version en version le coup d'adaptation d'un logiciel existant est minime et les performances augmentent "par magie"!
Un compilateur comme gcc est connu pour ses faibles optimisations du code, swift est de plus en plus rapide à chaque version.
A part optimiser les algorithmes mathématiques, le reste du code sera gérer par le compilateur/machine virtuelle et n'est plus du ressort du développeur.
@ gerard : Je ferai attention à l'orthographe !
Mon intention de poster cet algorithme (celui d'ev est encore meilleur et intéressant) est de montrer que l'algorithmique et la machine ne sont pas amis tout le temps, parfois ils sont en désaccord et parfois pas du tout amis.
L'algorithmique est une science qui a existé depuis très très longtemps (l’algorithme d’[size=large]E[/size]uclide en est la preuve) même avant "les fonctions". cryptage, théorie des langages, théorie des codes et j'en passe ont existé depuis longtemps aussi. Mais à l'époque il n'y avait pas de machine (calculateur "computer" (je n'aime pas le mot ordinateur)).
A l'heure actuelle néenait science qui s'appelle l'informatique et qui va exploiter toutes les théories et concepts qui vont dans le même sens que l'esprit de cette science "algorithmique entre autres" et qui est basée sur le fameux calculateur.
Une question tout à fait légitime : Pourquoi l'algorithmique n'existait pas auparavant dans les programmes scolaires ?
Bien sûr que non.
Si tu veux planter des carottes, avant tout tu dois analyser la terre et savoir si elle est riche ou non par exemple. Implémentation d'un programme fonctionne de la même façon. On programme en fonction de ce qu'on a comme environnement (terre riche, humidité ou pas ... etc).
cc: "talk is cheap" comme on dit. J'espere que les lecteurs du forum seront eclaires par la confirmation de votre mepris pour mon travail. Je n'en suis guere etonne, et cela confirme qu'il est parfaitement inutile pour moi de debattre avec vous, ce que je vais fermement faire a partir de ce message.
Aux habitues du forum : est-il possible de parametrer la lecture de ce forum pour ne pas afficher les posts d'une personne donnee ?
vincent83: j'ai oublie une particularite de Python, c'est un langage non type, un peu en contradiction avec un des attendus du programme du capes.
Je ne pense pas qu'il faille definir un langage unique dans les programmes du capes, ni des cgpe. Il n'y a de toutes facons pas de langage ideal, et un candidat maitrisant bien un autre langage que Python saura mieux l'enseigner qu'un langage impose mais moins bien maitrise. De plus pour les eleves/etudiants, c'est formatteur d'apprendre plusieurs langages au fil des annees. Pour eviter une trop grande dispersion, on pourrait definir une liste de langages autorises aux concours une annee donnee, liste modifiable chaque annee, avec un preavis suffisant pour les suppressions. La liste actuelle de l'option D de l'agreg pourrait servir pour commencer, avec peut-etre aussi le chouchou d'alea (Julia) qui semble en effet gagner en popularite dans la communaute scientifique et javascript qui est quand meme le langage du web...
Parisse, c'est un point que mes profs à l'IUT avaient , c'est à dire de la nécessité d'écrire un pseudo-code bien français pour exprimer un algorithme.
Déjà python, malgré l'absence de délimiteurs, est bien lisible. Il suffit d'écrire l'indentation comme il se doit et c'est normalement plus lisible qu'un code avec délimiteurs.
Si on veut utiliser un langage « propre » du point de vue des mathématiques (c'est à dire sans plein d'effets de bord), on devrait pouvoir utiliser ocaml non ?
Ceci dit il me semble que c'est peine perdu que de vouloir faire de l'informatique pratique de manière mathématiquement rigoureuse.
rd : on peut très bien spécifier ce qui est utilisable sans se limiter à un langage trop précis. Par exemple, les langages de script courant proposent tous un type de tableau unidimensionnel de taille ajustée dynamiquement (et dont les éléments sont en général non typés). Par contre, c'est vrai que ça peut être différent si deux variables pointent vers ce tableau et si on modifie une cellule du tableau (a=[1,2,3]; b=a; a[1]=5; b en Python a:=[1,2,3]; b:=a; a[1]:=5 [ou a[1]=<5;] b; en Xcas). Or ce type de comportement a une influence considérable sur la complexité des opérations. Mais on peut alors très bien spécifier que l'affectation est en O(1).
Un langage trop précis a aussi l’inconvénient d'imposer une syntaxe précise, invérifiable pour le candidat à l’écrit car il n'a pas à sa disposition les outils de l’environnement de programmation. Quel est l’intérêt d'attendre du candidat à l’écrit un
int somme(int n){
int s=0;
for (int j=1;j<=n;j++) s=s+j;
return s;
}
(C++)
plutôt que quelque chose ressemblant à
fonction somme(n)
initialiser s a 0
boucle: pour j variant de 1 jusque n faire s<-s+j
renvoyer s
On n'impose pas une syntaxe ultra=précise pour rédiger des maths, pourquoi le faire en informatique ?
A contrario, une épreuve avec matériel informatique à disposition devrait demander au candidat une implémentation dans un langage parmi une liste.
nicolas patrois: je veux bien sur dire que les variables Python sont non typees (de meme que dans d'autres langages du meme type). L'interpreteur ne peut donc pas detecter des erreurs qu'un compilateur comme par exemple C/C++ detecte. Ca n'est sans doute pas tres genant pour des petits programmes qui font une dizaine de lignes, par contre pour de grands projets, le typage des variables permet d'eviter pas mal d'erreurs. De meme la non-declaration des variables locales empeche la detection avant execution de certaines erreurs de frappe dans les noms de variable.
parisse : les objets ont tous des types en python, en particulier float et int sont des types à part entière. On n'a juste pas besoin de le déclarer.
Je pense que ce n'est pas un mal, déclarer toutes ses variables fait perdre beaucoup de concision à l'écriture d'un programme sans gain significatif sur la clarté et la lisibilité.
albertine: bien sur que les objets sont types en Python, comment faire autrement? Mais on ne declare pas de type pour une variable, ca parait peut-etre plus facile au premier abord (et c'est certainement la raison qui fait que les langages de script sont en general non types) mais cela se paie ensuite parce qu'il n'y a pas de controle de type fait automatiquement par l'interpreteur.
Ensuite, d'un point de vue pedagogique, je pense que c'est bien de declarer une variable meme dans un langage non type, ca peut d'ailleurs eviter d'oublier de l'initialiser, de meme que je suis favorable a l'utilisation de delimiteurs de bloc explicites, avec des noms variables en fin (par exemple fpour, ftantque, fsi et pas juste end). Concernant la concision, il y a la bonne et la mauvaise. Par exemple la bonne concision a mon avis consiste a utiliser les instructions de rupture de boucle (return et break) ou de continuation immediate (continue) pour eviter des tests booleens compliques ou des forets d'if imbriques. La mauvaise a mon avis consiste par exemple a reutiliser un meme nom de variable pour deux usages completement differents ou a jongler avec affectation et post-incrementation.
En Python, le type est implicite. Si tu écris a=0, a est un entier. Si tu écris a=0.0, a est un flottant. [1,2,3] est une liste, (1,2,3) est un tuple, {1,2,3} est un ensemble. Il est inutile de le préciser, c’est redondant.
Algebraic symbols are used when you do not know what you are talking about. -- Schnoebelen, Philippe
Oui, le type est implicite lors de l'affectation, comme dans tous les langages non types, il ne peut pas en etre autrement de toutes facons. L'interet de preciser le type d'une variable, ce sont les tests automatiquement faits par le compilateur qu'on appelle des fonctions avec les arguments du bon type et qu'on affecte un objet de type compatible. S'y ajoute aussi le modificateur de type constant (const en C++), qui assure qu'on ne modifiera pas la valeur d'une variable par erreur. Tout ca est tres utile au programmeur, mais aussi au compilateur pour optimiser l'executable.
christophe c écrivait:
> programmation théorique de base. C'est la
> même différence qu'entre (avec $b:=\sqrt{2}$)
> $\exists a\in \{ b; b^b \}$ tel que $a$ est
> irrationnel et $a^b$ ne l'est pas (théorème
> théorique évident / programmation théorique) et
> la recherche duquel des deux marche (dont la
> réponse n'est peut-être pas connue à l'heure
> actuelle, je n'en sais rien)
Ben alors Christophe, tu ne connais pas le théorème de Gelfond-Schneider ? Il montre directement que sqrt(2)^sqrt(2) est transcendant (donc irrationnel).
Je recommande l'utilisation de spyder pour pour programmer en python . Il corrige en allant les fautes de syntaxe , de programmation . Je suppose que vous connaissez spyder . Pour moi le gaffeur cet ide est très pratique . A+
J'ai lu les posts sur les maths et l' informatique au lycée .
Sans faire de la création algorithmes avec python j'ai pu faire un peu d'algèbre avec les bibliothèques de sympy ( calcul symbolique avec python ) . On est pas toujours obligé de faire de ALGO .... a+
La Société Informatique de France a mis en ligne une page consacrée à l'option informatique du capes de maths. On y trouvera notamment des diaporamas présentés par Laurent Chéno (IG en charge de l'informatique), Loïc Fouassy (futur président du jury du CAPES) et Luc Bougé (en charge de la mise en place de l'option).
Réponses
patte <--- mélange de 300 g de farine trois oeux, 100 g de sucre et 100 g de beurre fondu
œufs, pas oeux.
Si on se trompe d'une lettre dans l'utilisation d'un langage, on rate le programme.
Cordialement.
Le plus petit dénominateur commun me parait plus réaliste.
Ce qui empêche l'émergence c'est le java ou le PHP...
A une époque il y avait le CAML complètement déconnecté de la réalité (indépendamment de ses qualités) c'était pire.
Aucun langage ne sera enseigné éternellement, il est normal de réévaluer l'usage régulièrement.
Bof, le risque de mal écrire diminue avec le nombre de copies que l'on rédige, cela avantage ceux qui travail sur le long terme (il y a toujours un risque du coté correcteur cependant :-D ).
Je ne vois pas a priori pourquoi les sujets porteraient sur les points délicats, ce n'est pas le sens des sujets de concours...
Quant au masquage, on peut le trouver regrettable mais comme c'est un concours moyen il n'y a pas de besoins objectifs de tester des "pièges" des langages de programmation.
Swift qui monte aussi, fait la même chose.
Là encore vous confondez (avec @parisse) ces langages ont été pensés pour simplifier le code, pas pour satisfaire un besoin de précision d'untel.
Le ruby on rails https://fr.wikipedia.org/wiki/Ruby_on_Rails a pour devise "Convention plutôt que configuration".
Après, il est clair que le tout python devrait être compensé par d'autres langages.
Dans la réalité, il coute moins cher de mettre beaucoup de ram et un disque dur supplémentaire dans un serveur puis d'attendre un ou deux ans la prochaine version d'un programme que de perdre deux mois et payer une fortune un développeur à corriger un logiciel mal foutu.
Souvent on utilise une bibliothèque ou un framework, si ils sont optimisés de version en version le coup d'adaptation d'un logiciel existant est minime et les performances augmentent "par magie"!
Un compilateur comme gcc est connu pour ses faibles optimisations du code, swift est de plus en plus rapide à chaque version.
A part optimiser les algorithmes mathématiques, le reste du code sera gérer par le compilateur/machine virtuelle et n'est plus du ressort du développeur.
Mon intention de poster cet algorithme (celui d'ev est encore meilleur et intéressant) est de montrer que l'algorithmique et la machine ne sont pas amis tout le temps, parfois ils sont en désaccord et parfois pas du tout amis.
L'algorithmique est une science qui a existé depuis très très longtemps (l’algorithme d’[size=large]E[/size]uclide en est la preuve) même avant "les fonctions". cryptage, théorie des langages, théorie des codes et j'en passe ont existé depuis longtemps aussi. Mais à l'époque il n'y avait pas de machine (calculateur "computer" (je n'aime pas le mot ordinateur)).
A l'heure actuelle née nait science qui s'appelle l'informatique et qui va exploiter toutes les théories et concepts qui vont dans le même sens que l'esprit de cette science "algorithmique entre autres" et qui est basée sur le fameux calculateur.
Une question tout à fait légitime : Pourquoi l'algorithmique n'existait pas auparavant dans les programmes scolaires ? Bien sûr que non.
Si tu veux planter des carottes, avant tout tu dois analyser la terre et savoir si elle est riche ou non par exemple. Implémentation d'un programme fonctionne de la même façon. On programme en fonction de ce qu'on a comme environnement (terre riche, humidité ou pas ... etc).
Aux habitues du forum : est-il possible de parametrer la lecture de ce forum pour ne pas afficher les posts d'une personne donnee ?
vincent83: j'ai oublie une particularite de Python, c'est un langage non type, un peu en contradiction avec un des attendus du programme du capes.
Je ne pense pas qu'il faille definir un langage unique dans les programmes du capes, ni des cgpe. Il n'y a de toutes facons pas de langage ideal, et un candidat maitrisant bien un autre langage que Python saura mieux l'enseigner qu'un langage impose mais moins bien maitrise. De plus pour les eleves/etudiants, c'est formatteur d'apprendre plusieurs langages au fil des annees. Pour eviter une trop grande dispersion, on pourrait definir une liste de langages autorises aux concours une annee donnee, liste modifiable chaque annee, avec un preavis suffisant pour les suppressions. La liste actuelle de l'option D de l'agreg pourrait servir pour commencer, avec peut-etre aussi le chouchou d'alea (Julia) qui semble en effet gagner en popularite dans la communaute scientifique et javascript qui est quand meme le langage du web...
-- Schnoebelen, Philippe
J'en profite pour te remercier et te féliciter une fois encore pour le développement de xCas, qui m'a de nombreuses fois rendu de fiers services.
Parisse, c'est un point que mes profs à l'IUT avaient , c'est à dire de la nécessité d'écrire un pseudo-code bien français pour exprimer un algorithme.
Déjà python, malgré l'absence de délimiteurs, est bien lisible. Il suffit d'écrire l'indentation comme il se doit et c'est normalement plus lisible qu'un code avec délimiteurs.
Si on veut utiliser un langage « propre » du point de vue des mathématiques (c'est à dire sans plein d'effets de bord), on devrait pouvoir utiliser ocaml non ?
Ceci dit il me semble que c'est peine perdu que de vouloir faire de l'informatique pratique de manière mathématiquement rigoureuse.
Un langage trop précis a aussi l’inconvénient d'imposer une syntaxe précise, invérifiable pour le candidat à l’écrit car il n'a pas à sa disposition les outils de l’environnement de programmation. Quel est l’intérêt d'attendre du candidat à l’écrit un (C++)
plutôt que quelque chose ressemblant à On n'impose pas une syntaxe ultra=précise pour rédiger des maths, pourquoi le faire en informatique ?
A contrario, une épreuve avec matériel informatique à disposition devrait demander au candidat une implémentation dans un langage parmi une liste.
Je pense que ce n'est pas un mal, déclarer toutes ses variables fait perdre beaucoup de concision à l'écriture d'un programme sans gain significatif sur la clarté et la lisibilité.
je crois que ce que vous cherchez est dans ce fil.
S
albertine: bien sur que les objets sont types en Python, comment faire autrement? Mais on ne declare pas de type pour une variable, ca parait peut-etre plus facile au premier abord (et c'est certainement la raison qui fait que les langages de script sont en general non types) mais cela se paie ensuite parce qu'il n'y a pas de controle de type fait automatiquement par l'interpreteur.
Ensuite, d'un point de vue pedagogique, je pense que c'est bien de declarer une variable meme dans un langage non type, ca peut d'ailleurs eviter d'oublier de l'initialiser, de meme que je suis favorable a l'utilisation de delimiteurs de bloc explicites, avec des noms variables en fin (par exemple fpour, ftantque, fsi et pas juste end). Concernant la concision, il y a la bonne et la mauvaise. Par exemple la bonne concision a mon avis consiste a utiliser les instructions de rupture de boucle (return et break) ou de continuation immediate (continue) pour eviter des tests booleens compliques ou des forets d'if imbriques. La mauvaise a mon avis consiste par exemple a reutiliser un meme nom de variable pour deux usages completement differents ou a jongler avec affectation et post-incrementation.
-- Schnoebelen, Philippe
> programmation théorique de base. C'est la
> même différence qu'entre (avec $b:=\sqrt{2}$)
> $\exists a\in \{ b; b^b \}$ tel que $a$ est
> irrationnel et $a^b$ ne l'est pas (théorème
> théorique évident / programmation théorique) et
> la recherche duquel des deux marche (dont la
> réponse n'est peut-être pas connue à l'heure
> actuelle, je n'en sais rien)
Ben alors Christophe, tu ne connais pas le théorème de Gelfond-Schneider ? Il montre directement que sqrt(2)^sqrt(2) est transcendant (donc irrationnel).
Je recommande l'utilisation de spyder pour pour programmer en python . Il corrige en allant les fautes de syntaxe , de programmation . Je suppose que vous connaissez spyder . Pour moi le gaffeur cet ide est très pratique . A+
J'ai lu les posts sur les maths et l' informatique au lycée .
Sans faire de la création algorithmes avec python j'ai pu faire un peu d'algèbre avec les bibliothèques de sympy ( calcul symbolique avec python ) . On est pas toujours obligé de faire de ALGO .... a+