Quel langage en option info?

Bonjour à toutes et à tous, :smiley:

Je viens d’être pris au lycée Pierre de Fermat à Toulouse (31) en MPSI. Comme sûrement beaucoup de futurs élèves des CPGE j’essaie de mettre à profit une partie de mes vacances à m’avancer sur ce que je pourrai rencontrer l’année prochaine en cours. Je me suis beaucoup intéressé à l’informatique depuis longtemps : j’ai commencé en quatrième avec de l’impératif non structuré, puis j’ai fait de l’objet (VB6, VB.NET), et enfin des langages tournés vers l’algorithmique (principalement C).

L’algorithmique m’intéresse beaucoup et je prends plaisir et réaliser différents types d’algo (tris, recherches, évaluateur de lignes d’expressions mathématiques, calculs sur des réels « infinis »…). Je me doute qu’il faudrait que je choisisse l’option informatique l’année prochaine. Mais je ne sais pas si ces connaissances que j’ai acquis en algorithmique me serviront !

J’ai donc regardé un peu les programmes d’informatique et je me suis aperçu que la programmation en Pascal revenait souvent. Je m’y suis mis un peu mais j’avoue largement préférer C sur de nombreux points (et puis quand on a l’habitude :wink:). Est-ce que le langage est imposé en cours d’informatique en prépa ou je pourrai garder mon C ?

J’ai aussi vu que la programmation en Caml était présente, or c’est de la programmation fonctionnelle et c’est très abstrait pour moi qui n’ai que fait de la programmation impérative. Le Caml représente t’il une grande partie du programme d’informatique sur les deux années de prépa ?

Merci beaucoup d’avance pour vos éclaircissements !
Léo.

À Fermat on utilise uniquement du Caml.

J’ai aussi vu que la programmation en Caml était présente, or c’est de la programmation fonctionnelle et c’est très abstrait pour moi qui n’ai que fait de la programmation impérative. Le Caml représente t’il une grande partie du programme d’informatique sur les deux années de prépa ?
Oublie ton C ou ton .net.
L’info en prépa, ce sont des maths.
On prouve des choses.
Ces maths s’expriment naturellement en caml car c’est un langage fonctionnel.
Tu vas par exemple prouver sous certaines hypothèses qu’un algo qui trie N données ne peut pas le faire en moins de O(N log(N)) …et tu vas apprendre ce qu’est un 0 (« grand O » (comme la lettre O)).
Tu vas prouver des trucs sur des langage composés seulement de ‹ a › et de ‹ b ›.

Si tu as déjà l’habitude de réfléchir à des algo ça devrait t’aider.

fakbill a écrit:

Tu vas par exemple prouver sous certaines hypothèses qu’un algo qui trie N données ne peut pas le faire en moins de O(N log(N)) …et tu vas apprendre ce qu’est un 0 (« grand O » (comme la lettre O)).
Bof ! Moi je n’ai pas fait ça en prépa, même si ça m’aurait sûrement plu.

Comme dit par VictorVVV, le langage le plus utilisé (apparemment à Fermat) pour la prépa est Caml ; si tu veux t’y mettre, autant prendre Objective Caml (et non Caml Light, légèrement obsolète…), et bienvenue dans la confrérie des « This expression is of type 'a vect * 'a vect * 'b vect but it used with type 'a vect * 'a vect * 'b » :grin:

Le Caml représente t-il une grande partie du programme d’informatique ?
Si tu sais déjà ce qu’est un algorithme, la programmation impérative/fonctionnelle, et que tu as un petit peu de pratique, apprendre la syntaxe Caml va te prendre un temps tout à fait négligeable.

Le programme d’info reste très léger au vue des autres matières. Tu peux y jeter un oeil tant qu’à faire : prepas.org/ProgrammesCPGE/OptionInfo.pdf

Ok merci pour vos conseils et indications. Vous orientez mes recherches vers Caml durant des vacances !
Je vais regarder ces tutos : siteduzero.com/tutoriel-2-35 … ocaml.html

Si apparemment vous connaissez précisément les coutumes à Fermat,
Savez-vous si on se sert de Maple, Mathematica ?
Il n’y a donc aucun langage impératif ?

Merci. :wink:

Skynyrd777 a écrit:

Savez-vous si on se sert de Maple, Mathematica ?
Un peu de Maple.

Skynyrd777 a écrit:

Il n’y a donc aucun langage impératif ?
Euh… on peut citer par exemple Caml et Maple.
Caml est multiparadigme, pas fonctionnel, je n’avais pas corrigé avant mais si tu insistes. :grin:

Bon, j’avoue que la programmation impérative sous caml a une sale tête et est plutôt utilisée par défaut il me semble. D’ailleurs, je ne sais même pas si ça existe un langage uniquement fonctionnel (un langage utilisé en pratique je veux dire).

Haskell est probablement ce qui se fait de plus « pur » dans les langages fonctionnels…mais bon c’est un joueur pédagogique…rien de plus.
ocalm a qlqs applications « dans la vraie vie »…mais pas beaucoup.

Le maple en prépa est fait mon montrer ce qu’on peut faire avec un CAS (du moins ça devrait) et pour faire faire un tout petit peu de prog à ceux qui ne font pas d’info.
La synstaxe de prog en maple est moche.

Dans qlqs prépa, je crois qu’ils font du mathematica…ce qui est une bonne idée car on peut coder dans le style qu’on veut avec mathematica :slight_smile: mais je le redis, le principal intéret des CAS en prépa est de faire des caluls symbolique et non de coder.

Skynyrd777:
L’info en prépa (au sens de l’option en MP) en de l’info. On se tape presque du langage.
Tout ce qu’on veut c’est pouvoir manipuler les objets qu’on étudie de façon théorique en cours (lists,arbres et autres).

Ragoudvo :
ha? Aurais tu un bon exemple pour faire comprendre un peu ce qu’est l’info théotique à qlqn qui débute?

fakbill a écrit:

Ragoudvo :
ha? Aurais tu un bon exemple pour faire comprendre un peu ce qu’est l’info théotique à qlqn qui débute?
On va étudier les objets fondateurs de la science informatique (déjà cités par toi) sans trop se soucier des moches problèmes d’implantation pratique, on va plutôt étudier les types abstraits.
Sinon ton exemple est bon hein, je le reprends juste parce que je pense pas que ce soit dans n’importe quel cours de prépa. J’en ai même une preuve constructive :grin:

Ocaml permet de faire des compilateurs.

J’ai téléchargé Maple et j’ai un peu commencé à coder dessus… c’est vrai que j’aime pas trop la programmation dessus.
J’ai fais les premiers TP présentés ici : c.caignaert.free.fr/maple.html (jusqu’au 5)

@ Fakbill, Qu’est-ce que tu appelles le « calcul symbolique » ? Bon d’après ce que j’ai compris, avec Maple, à part à coder on peu dessiner des fonctions 2D, 3D, cartésiennes, polaires etc… etc… faire du calcul formel, des matrices et tout… c’est ça ou il y a une application fondamentale qui m’échappe ! :slight_smile:

J’ai lu un tuto pas mal sur la notation O (Landau) et comment l’appliquer à la complexité de différents algo. Il faut donc que je me mette au OCaml et que je familiarise avec ces notions !

L’intéret principal de maple c’est que quand tu lui demande l’intégrale de 1/x entre a et b, il sait te repondre avec des log. C’est ca que de faire du calcul symbolique… on manipule des symbole et non des nombres.
Si je te comprends bien tu appelles ça écalcul formel" est c’est la même chose :wink:

Le calcul numérique, c’est quand on manipule des nombres :grin: (et c’est pas plus simple / moins noble).

Oui oui c’est bien ce que j’appelais le calcul formel ! :slight_smile:
Ben si pour un programmeur il est excessivement facile de faire un programme qui donne une approximation numérique (calcul numérique) d’une intégrale ça doit être bien plus dur de programmer un logiciel de calcul formel. Maple c’est comme une calculatrice qui gère le calcul formel finalement..

Skynyrd777 a écrit:

pour un programmeur il est excessivement facile de faire un programme qui donne une approximation numérique (calcul numérique) d’une intégrale
Héhé, tu es bien optimiste (ou naïf). :smiley:

Niveau intégrales, on peut faire plus difficile que ce qu’une calculatrice peut tracer tu sais. Et puis des fois on a envie d’avoir les résultats de son calcul avant de partir à la retraite.

Sinon, oui, Malple c’est une calculatrice, mais une solide…

Ah oui.. mon faible niveau de terminale m’a fait oublier les intégrales sur un ensemble infini. Je suppose que tu parles de l’intégrale de 1/x sur 1 à +inf par exemple ! :wink:

Ben si pour un programmeur il est excessivement facile de faire un programme qui donne une approximation numérique
Quand je pense que j’ai un pote qui a fait toute sa thèse là dessus…

Donc non, c’est dur. C’est dur de le faire en garantissant une erreur maximale.
Le faire en gros en sommant des trapèze ok…mais la précision de ton résultat c’est quoi??

Sinon, jeune padawan, tu apprendras aussi que le fait que les ordi ne calculent qu’en précision finie posent des pbs énormes
hal.archives-ouvertes.fr/hal-00128124_v5/
Meme intégrer sin(x) entre 0 et 1 en certifiant la précision et sans faire trop de calculs inutiles c’est dur.
Pas la peine d’aller chercher des intégrales sur un inter non bornées (qui peuvent (et parfois on le fait) se ramené en des intégrales sur [a,b] juste avec un changement de variables bien senti…)

bref, non non et NON, l’analyse numérique c’est tout sauf simple (non pas que l’algo pour trouver des primitives soit, lui, simple…c’est même limite pas un algo mais c’est une autre histoire).

welcome on board! :smiley:

Ok ok ! J’ai donc le temps de voir des méthodes plus complexes que mes trapèzes ! :wink:
Merci pour tes infos en tout cas !

Si tu sais déjà ce qu’est un algorithme, la programmation impérative/fonctionnelle, et que tu as un petit peu de pratique, apprendre la syntaxe Caml va te prendre un temps tout à fait négligeable.
Ben justement, mes connaissances en algo me permettent facilement d’apprendre un nouveau langage impératif ; genre, j’ai fais du C et du .Net, j’apprends le Pascal en 2h ! Par contre pour Caml c’est une tout autre affaire ! Plein de choses changent : programmation fonctionnelle, exécution interactive, pas de boucles (structures itératives), beaucoup de récursivité, pas du tout la même gestion des variables qu’en C, pas vraiment en dialogue entre programme et utilisateur mais plus entre programme et programmeur…

Enfin bon c’est en y passant du temps et en pratiquant qu’on finit par y arriver ! Mais y a quand même des concepts un peu bizarres (curryfication par exemple).

non mais c’est pire que ca :wink:

1/2. ok en float ca fait pile poil 0.5
MAIS
1/5 ca ne fait pas pile poil 0.2 (je te laisse voir pourquoi…)

Toutes des égalités sont fausses avec des floats:
1/33=1
0.2
5=1
1.1-0.1=1

La methode elle meme a une certaine erreur mais le fait de faire les calculs avec un precision finie rajoute une source d’erreur assez délicate à maitriser.

Le langage on s’en tape un peu. Ce qui compte c’est algo.

exemple:
Donne moi 3 facons fondamentalement différentes de coder la fonction factorielle (d’un entier)
(pour ceux qui savent, la troisième facon c’est la verison « terminale » qui je trouve est fondamentalement différente de la version pas terminale…enfin voila un commentaire qui en dit juste assez mais pas trop :=))

J’avais essayé de programmer une « bistromathique » (c’est comme ça que j’avais vu que ça s’appelait sur internet), c’est à dire une classe de calcul sur des nombres « infinis ». Je stockais dans une structure les nombres sous forme scientifique, une significande (mantisse) de type string qui contenait la liste des chiffres du nombre, un grand entier qui stockait l’exposant et un booléen pour le signe. En essayant (en vain) de programmer la division de deux de ces réels « infinis », je suis tombé sur une erreur dans le genre de celles dont tu parles :

En base 2, les irrationnels ne sont pas les mêmes et par exemple si 1/5 en base 10 donne théoriquement un nombre fini (0.2), il est possible (j’ai pas testé) qu’en base 2, cette division donne un irrationnel et que lors du changement de base (vers la base 10) on induise une erreur ? C’est ça ?

Quand je fais : # 12.4 +. 3.14;; en Caml j’obtiens :

  • : float = 15.54000000000001
    Le 1 est une erreur, elle vient peut-être des changements de base.

Pour les façons de programmer une factorielle je ferais ça : (j’ai écris ça sans tester dans un IDE)

  • Méthode itérative (en C) :
int factorielle(int n)
{
   if(n==0){return 1;}
   int fact=1;
   int i; for(i=1;i<=n;i++)
   {
      fact*=i;
   }
   return fact;
}
  • Méthode récursive (en Caml) :
let rec factorielle n=
  if n=0 then 1
  else n * factorielle (n-1);;

Pour la troisième je vois pas trop.. :confused: