Elliot S.

Elliot S.

Pas Encore D'avis

Free session Premier Cours Gratuit

Présentation

Étudiant Ingénieur INSA et Stagiaire Microsoft

Passionné par les mathématiques et l'informatique, je propose des cours particuliers à des étudiants de tous niveaux depuis plusieurs années.

Après avoir obtenu mon Baccalauréat Scientifique (spé. maths) mention Bien en 2011; j'ai effectué 4 années d'études à l'INSA de Rouen et une année en échange à l'École Polytechnique de Montréal.

Je me suis spécialisé en Génie mathématiques à l'INSA et en Génie Logiciel à Polytechnique Montréal. Je serais en stage de fin d'étude chez Microsoft France à partir du 6 juin 2016, dernière étape avant l'obtention de mon diplôme d'ingénieur.

J'ai participé à plusieurs hackatons et compétitions en informatique. Je me suis classé premier à un concours Google à Polytechnique Montréal, troisième à une compétition d'intelligence artificielle à San Francisco. En mathématiques et en informatique, mes notes oscillent entre 15 et 20.

J'ai commencé à donner des cours de mathématiques à des collégiens alors que j'étais encore au lycée. J'ai ensuite suivi plusieurs étudiants pour les aider à obtenir leur baccalauréat; en les aidant notamment en physique-chimie et en mathématiques. Ce n'est que récemment que j'ai commencé à aider les prépas HEC, littéraires et 1ères années de prépas scientifiques en mathématiques et en informatique.

Ayant eu la chance de beaucoup voyager et de travailler dans des milieux anglophones (stages aux États-unis, en Finlande…), je peux aussi donner mes cours en anglais.

Très proche de mes élèves, je consacre beaucoup d'énergie à les faire progresser. Mes horaires sont très flexibles le week-end, je suis majoritairement disponible en fin d'après-midi et en soirée la semaine. Ma première heure de cours est toujours gratuite.

N'hésitez pas à me contacter pour plus d'informations ou si vous souhaitez prendre un cours.

Cursus académique

  • étudie à INSA
  • étudie à Polytechnique Montréal
  • Bac S mention Bien

Questions et Réponses

Comment initialiser un membre static ?

C++ / Les classes en C++

Une variable static est une variable qui est propre à toute la classe (et donc toutes ses instances). Ainsi, il n'est pas nécessaire d'instancier un objet pour accéder à la valeur de cette variable. Il est donc très important de comprendre que l'on ne peut pas initialiser cette variable dans le constructeur de la classe, étant donnée qu'elle n'est propre à aucun objet ! Soit C la classe dans laquelle on veut déclarer le membre static x. Soit T le type de x. Pour initialiser x, il suffit d'écrire T C::x = valeur_initiale; (de préférence dans le fichier .cpp de la classe C, si on programme de manière modulaire). La variable globale sera donc initialisé dans tout le programme, et on pourra y accéder de la manière suivante : C::x (à condition, bien sûr, qu'elle soit accessible publiquement). On peut aussi y accéder via un objet o de la classe C, par la l'expression suivante : o.x. Encore une fois, il est bien important de comprendre que cette variable n'est pas associée à l'objet o, mais bien à la classe tout entière.

Comment obtenir le code Ascii ou Unicode d'un caractère ?

Python / Le type de données en Python

Soit c le caractère à convertir en ASCII. Le morceau de code Python3 suivant donne le nombre associé en ASCII ou Unicode à c : ord(c). Le code binaire de ce caractère s'obtient donc de la manière suivante : bin(ord(c))[2:].

Comment convertir un nombre entier en binaire ?

Python / Le type de données en Python

Soit n la variable contenant le nombre entier à convertir. On considère que ce nombre est exprimé en base 10. Le morceau de code Python3 suivant : bin(n)[2:] donne le même nombre exprimé en base 2, sous la forme d'une string (chaîne de caractères). Toutefois, il s'agit là de l'utilisation d'une fonctionnalité déjà implémentée par le langage; nous avons profité du travail de quelqu'un d'autre sans comprendre ce qu'il se passe vraiment lors de la conversion. Supposons que, pour une raison quelconque, cette fonctionnalité soit changée ou bien supprimée lors de la prochaine mise à jour du langage… Comment pouvons nous réaliser cette opération ? Il faut pour cela revenir à la définition de d'un nombre en base 2; il s'agit du même nombre sauf que l'on ne s'autorise qu'à utiliser deux symboles pour le représenter : le "0" et le "1". Notre nombre en base 10, s'autorise lui à utiliser 10 symboles : "0", "1", "2", …, "8" et "9". Pour bien comprendre ce qu'il se passe, évoquons une situation tout à fait improbable. Vous êtes emprisonné dans une maison verrouillée de l'extérieur par un code à 4 chiffres que vous connaissez. Le seul moyen pour vous de sortir est de faire en sorte que votre ami, qui se trouve en dehors de la maison, tape le code. Votre ami ne peut pas vous entendre car la porte est très épaisse, mais vous avez un bouton qui fait sonner une clochette qui se trouve dehors. Si vous voulez communiquer le code "2429" à votre ami, vous pourriez, par exemple, faire sonner la cloche 2429 fois jusqu'à ce que vous vous arrêtiez. Cela marquerait la fin de votre boucan, et votre ami pourrait vous libérer. Mais seulement, cela est très long : c'est équivalent à traduire votre nombre en base 1, le seul symbole que vous utilisez est le son de la clochette. Pour faire plus rapide, vous pourriez utiliser un son court en pressant le bouton de la clochette très rapidement, et un son long en restant appuyé sur le bouton plus longuement (exactement comme en code morse). Vous auriez ainsi deux "symboles" à votre disposition : le code pourrait être converti en base 2. Pour éviter de réveiller vos voisins, vous voulez faire sonner la clochette un nombre minimal de fois. La meilleure façon de faire cela est de remarquer que n'importe quel nombre peut s'écrire comme une somme de puissance de 2. On pourrait par exemple écrire "1 = 2 puissance 0", "2 = 2 puissance 1", "3 = 2 puissance 0 + 2 puissance 1", … Maintenant, on peut simplement transmettre le code de la manière suivante : Puissance de 2 : | 3 | 2 | 1 | 0 | Utilisé dans la somme ? | 1 | 1 | 0 | 1 | Nombre en question = 1 * (2 puissance 3) + 1 * (2 puissance 2) + 0 * (2 puissance 1) + 1 * (2 puissance 0) = 1*8 + 1*4 + 0*2 + 1*1 = 13 Si on fait un son court pour traduire un "1" et un son long pour traduire un "0", on aura alors à sonner la clochette que 4 fois pour traduire le code "0013". Pour "2429", on aura besoin de la faire sonner que 12 fois (au lieu de 2429 fois, c'est beaucoup de moins de bruit pour nos voisins !). La question est donc : comment faire pour traduire notre code en somme de puissance de 2 ? Pour cela, nous allons avoir besoin d'utiliser la division euclidienne; c'est celle que l'on voit en primaire. Lorsque l'on fait une division euclidienne, cela revient à diviser normalement mais en conservant un reste plutôt que d'avoir un nombre à virgule. Plutôt que d'écrire "7/2 = 3,5 * 2" on écrira, "7/2 = 3 * 2 + 1". En Python3, l'opération de division euclidienne est "//" et retourne le quotient (ici, 3). L'opération "%" est le modulo et retourne le reste (ici, 1). On a n le code à transmettre. Si je divise un nombre pair par deux, il me reste 0 (car il est pair). À l'inverse, en divisant un nombre impair par deux il reste 1. Donc, si je divise n par deux, il me restera 0 ou 1. Si il me reste 0 : "n = (n//2) * 2 + 0 = (n//2)*2 + 0 * (2 puissance 0)", autrement dit il y a un "0" pour 2 puissance 0. Si il me reste 1 : "n = (n//2) * 2 + 1 = (n//2)*2 + 1 * (2 puissance 0)", autrement dit il y a un "1" pour 2 puissance 0. Posons q = n//2. Faisons la même chose pour q maintenant : Si il me reste 0 : "q = (q//2) * 2 + 0 = (q//2)*2 + 0 * (2 puissance 0)", autrement dit il y a un "0" pour 2 puissance 0 dans q. Si il me reste 1 : "q = (q//2) * 2 + 1 = (q//2)*2 + 1 * (2 puissance 0)", autrement dit il y a un "1" pour 2 puissance 0 dans q. Mais, comme n = 2 * q. Si il y a un "0" pour 2 puissance 0 dans q, cela veut dire qu'il y a un "0" pour 2 * (2 puissance 0) = 2 puissance 1 dans n. Si il y a un "1" pour 2 puissance 0 dans q, cela veut dire qu'il y a un "1" pour 2 * (2 puissance 0) = 2 puissance 1 dans n. On peut maintenant faire la même chose pour q//2 = (n//2)//2 = n//4, ce qui nous dira si il y a un "1" ou un "0" pour 2 puissance 2. Et ainsi de suite, jusqu'à ce que l'on arrive plus à diviser par deux. def traduire_en_binaire(n): # cas où le nombre vaut 0 if (n == 0): return '0' # cas général nombre_en_binaire = '' # tant que l'on arrive à diviser n par deux while (n > 0): # ajout du signal au début de la chaîne de caractère (la puissance de 2 augmente) nombre_en_binaire = str(n%2) + nombre_en_binaire n = n//2 return nombre_en_binaire Reste un petit détail à régler : notre algorithme ne fonctionne que pour les nombre positifs. Pour les nombres négatifs, il faudrait simplement ajouter un "bit de signe" à notre solution, permettant ainsi de définir si oui ou non le nombre est positif. Autrement dit, il s'agirait d'un signal envoyé avant le nombre, destiné à prévenir le récipient si le nombre que l'on envoie est positif ou négatif.

Dériver la fonction suivante : f(x)=ln(x-1)/x-1

Mathématiques niveau Lycée / La fonction logarithme népérien

On sait que la fonction qui à x dans R associe x-1, a pour dérivée 1 (dérivées usuelles). Soit E, F et G trois intervalles de R (l'ensemble des réels). Soit g : E -> G et f : G -> F deux fonctions, toutes deux dérivables sur E et g(E) respectivement. Alors de la fonction composée f o g est dérivable sur E et a pour expression (f o g)' (x) = g'(x) * f'(g(x)). Ainsi, la fonction qui à x dans ]1, +inf[ associe ln(x-1) est dérivable sur cet ensemble et a pour expression 1/x. De même, la fonction qui à x dans R\{1} associe 1/(x-1) est dérivable sur cet ensemble et s'exprime -1/(x-1)^2. On sait aussi que pour deux fonctions u et v définies et dérivables sur des intervalles U et V, la dérivée du produit de u et v s'exprime pour tout x dans U inter V : (u.v)'(x) = u'(x).v(x) + u(x).v'(x). On a, pour tout x dans ]1, +inf[, f(x) = ln(x-1)/(x-1) = ln(x-1) . 1/(x-1). Ainsi, pour tout x dans ]1, +inf[, f'(x) = 1/(x-1) * 1/(x-1) + ln(x-1) * -1/(x-1)^2 = (1 - ln(x-1))/(x-1)^2.

Combien vaut cos2(x)+sin2(x) ?

Mathématiques niveau Lycée / La trigonométrie

Si le 2 représente un carré, cos^2(x) + sin^2(x) = 1 pour tout x dans R. Cette formule dérive directement du théorème de pythagore. La réciproque est vrai aussi, pour tout x, y dans R tel que x^2 + y^2 = 1, il existe un unique angle theta modulo 2pi tel que cos(theta) = x et sin(theta) = y.

Matières enseignées et méthodologie

Mathématiques niveau Collège

Revue des notions essentielles du cours.

Exercices à la maison et préparation pour contrôle.

Physique-Chimie niveau Collège

Revue des notions essentielles du cours.

Exercices à la maison et préparation pour contrôle.

SVT niveau Collège

Revue des notions essentielles du cours.

Exercices à la maison et préparation pour contrôle.

Mathématiques niveau Lycée

Revue des notions essentielles du cours.

Exercices à la maison et préparation pour contrôle.

Possibilité de sortir du programme pour une préparation approfondie avec un élève motivé.

Physique-Chimie niveau Lycée

Revue des notions essentielles du cours.

Exercices à la maison et préparation pour contrôle.

Possibilité de sortir du programme pour une préparation approfondie avec un élève motivé.

Mathématiques ECE niveau Prépa HEC

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques ECS niveau Prépa HEC

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques ECT niveau Prépa HEC

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Informatique pour tous niveau Prépas Scientifiques

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, fonctions…), algorithmes usuels, structures de données usuelles.

Algorithmes numériques, optimisation.

Langage utilisé : python2/3, C/c++, Matlab… (possibilité de travailler avec d'autres langages si prévenu à l'avance).

Mathématiques MPSI/MP niveau Prépas Scientifiques

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques PCSI/PC niveau Prépas Scientifiques

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques PSI niveau Prépas Scientifiques

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques PTSI/PT niveau Prépas Scientifiques

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Option informatique - MP niveau Prépas Scientifiques

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, fonctions…), algorithmes usuels, structures de données usuelles.

Algorithmes numériques, optimisation.

Langage utilisé : python2/3, C/c++, Matlab… (possibilité de travailler avec d'autres langages si prévenu à l'avance).

C niveau Formation Professionnelle

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, allocation mémoire, fonctions…), algorithmes usuels, structures de données usuelles en C.

C++ niveau Formation Professionnelle

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, allocation mémoire, fonctions…), algorithmes usuels, structures de données usuelles en c++.

Bases de la programmation orientée objet (classes, héritage, polymorphisme, généricité, …) en c++.

Bases de la STL (algorithmes, structures de données…), exceptions.

programmation événementielle avec QT.

Python niveau Formation Professionnelle

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, fonctions…), algorithmes usuels, structures de données usuelles en python.

Bases de la programmation orientée objet en python.

Informatique niveau BCPST

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, fonctions…), algorithmes usuels, structures de données usuelles.

Langage utilisé : python2/3, C/c++, Matlab… (possibilité de travailler avec d'autres langages si prévenu à l'avance).

Informatique niveau Cours universitaires généraux et Grandes Écoles

Bases de la programmation impérative (variables, structures conditionnelles, boucles, tableaux, fonctions…), algorithmes usuels, structures de données usuelles.

Langage utilisé : python2/3, C/c++, Matlab… (possibilité de travailler avec d'autres langages si prévenu à l'avance).

Mathématiques niveau Prépas Littéraires B/L

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques niveau BCPST

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Mathématiques - Licence niveau Cours universitaires généraux et Grandes Écoles

Aide aux devoirs à la maison, préparation aux concours et revue détaillée du cours.

Me faire parvenir le sujet étudié avant le cours.

Collège

Lycée

Prépa HEC

Prépas Scientifiques

Formation Professionnelle

BCPST

Cours universitaires généraux et Grandes Écoles

Prépas Littéraires B/L