test
unknown
latex
2 years ago
8.1 kB
4
Indexable
Never
% !TXS template \documentclass[french]{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{lmodern} \usepackage{amsmath} %\usepackage{unicode-math} \usepackage[a4paper]{geometry} \usepackage{pifont} \usepackage{amsfonts} \usepackage{lmodern} \usepackage{babel} \usepackage{stmaryrd} \usepackage{fancyhdr} \usepackage[T1]{fontenc} %\usepackage{minted} %\usepackage{titlesec} \usepackage{lipsum} \author{Théo DIEDA} \date{2021 - 2022} \title{Cours d'Informatique PCSI} \pagestyle{fancy} \renewcommand\headrulewidth{1pt} \fancyhead[L]{Théo DIEDA} \fancyhead[R]{PCSI 1 - Lycée Kléber} \fancyfoot[C]{Page \thepage} \fancyfoot[R]{2021/2022} \usepackage{xcolor} \definecolor{rouge}{HTML}{ff0000} \definecolor{bleu}{HTML}{0000ff} \definecolor{vert}{HTML}{00ff00} \usepackage{titlesec} % ----- CUT HERE ----- % % Supplement to titlesec providing the \addtotitleformat %+ command for appending instead of overwriting the current style. \makeatletter \newcommand*\@secondofsix[6]{#2} \newcommand{\addtotitleformat}{% \@ifstar{\addtotitleformat@star}{\addtotitleformat@nostar}} \newcommand\addtotitleformat@nostar[2]{% \PackageError{titlesec}{non starred form of \string\addtotitleformat\space not supported}{}} \newcommand\addtotitleformat@star[2]{% \edef\@currentsection@font{% \unexpanded\expandafter\expandafter\expandafter {\expandafter\expandafter\expandafter\@secondofsix \csname ttlf@\expandafter\@gobble\string#1\endcsname}}% \titleformat*{#1}{\@currentsection@font#2}% } \makeatother % ----- CUT HERE ----- % \renewcommand{\thesection}{\color{rouge}\huge\Roman{section})} \addtotitleformat*{\section}{\color{rouge}\huge} \renewcommand{\thesubsection}{\color{bleu}\Large\arabic{subsection})} \addtotitleformat*{\subsection}{\color{bleu}\Large} \renewcommand{\thesubsubsection}{\color{vert}\large\alph{subsubsection})} \addtotitleformat*{\subsubsection}{\color{vert}\large} \setlength{\parindent}{0pt} \renewcommand{\Frlabelitemi}{\textbullet} %%% %\renewcommand{\thesection}{\Roman{section}/} %\renewcommand{\thesubsection}{\arabic{subsection}/} %\renewcommand{\thesubsubsection}{\alph{subsubsection})} %%% \usepackage{listings} %%%------------------------ %New colors defined below \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codegray}{rgb}{0.5,0.5,0.5} \definecolor{codepurple}{rgb}{0.58,0,0.82} \definecolor{backcolour}{rgb}{0.95,0.95,0.92} %Code listing style named "mystyle" \lstdefinestyle{mystyle}{ backgroundcolor=\color{backcolour}, commentstyle=\color{codegreen}, keywordstyle=\color{magenta}, numberstyle=\tiny\color{codegray}, stringstyle=\color{codepurple}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=2 } %"mystyle" code listing set \lstset{style=mystyle} %%%------------------------- \begin{document} %\tableofcontents \newpage \part{Méthode de programmation et analyse des algorithmes} \section{Organisation générale du code} \subsection{Rappels} \textbf{Notion de variable :} c'est une petite boite qui peut contenir notre valeur\\ Instruction conditionnelles : If, elif, else (si on arrive ici c'est que les conditions d'avant n'ont pas été vérifiée)\\ \textbf{Boucles :} \begin{itemize} \item For : on fait $N$ action dans notre boucle (on peut modifier la valeur de i dans la boucle étant donné qu'il reprendra sa valeur à $i+1$) \item While : tant que "condition" est vraie, on fait ....\\ \end{itemize} La notion d'instruction : ce que l'on demande à l'ordi \\ Notion d'expression : ce qui se calcule\\ \textit{NB : le fait que l'assignation soit une instruction $\Rightarrow$ choix du langage}\\ On peut stocker l'évaluation d'une condition dans une variable : \begin{itemize} \item while $x<18$ : ... \item condition = $(x<18)$, while condition: ....\\ \end{itemize} \textbf{Notion d'effet de bord :} Normalement quand on définit une fonction, elle doit renvoyer une valeur mais parfois, on ne veut rien renvoyer mais juste changer quelque chose : \begin{itemize} \item Tri "en place" d'une liste $\rightarrow$ modification de la liste visible à l'extérieur d'une fonction \item print() $\rightarrow$ affiche à l'écran mais ne renvoi rien \item L.append(x) $\rightarrow$ modifie L mais ne renvoi rien $\Rightarrow$ NE JAMAIS ÉCRIRE : \texttt{L= L.append(x)} \end{itemize} \subsection{Spécification des données / d'une fonction} Règles de bonne conduite lors de l'écriture d'une fonction : On dit ce qu'on attend en entrée et ce que fournit la fonction en sortie $\Rightarrow$ le mettre en docstrings (on met les objets d'entrée $\rightarrow$ objets de sorties puis on décrit la fonction) \subsection{Préconditions, postconditions, invariants} \subsubsection{Préconditions} Lors de l'écriture d'une fonction, on a souvent besoin de contraintes supplémentaires sur les données $\rightarrow$ On les signale en commentaire ou en docstring\\ \textit{Exemple : "($n$:int)$\rightarrow$ int \vspace{0.2cm} $n$ est un entier positif ou nul"}\\ On peut avoir une précondition à l'entrée d'une boucle plus loin dans la fonction\\ \textit{Exemple : avant de distribuer les petits pois, on doit avoir la + gde fact < nbre de petit pois}\\ \textbf{But :} Ces préconditions à une partie de code servent de jalons qu'on pourra donc vérifier au fur et à mesure de l'éxécution du programme $\rightarrow$ mettre des commentaires et des notes pour le futur \subsubsection{Postconditions} Une fois une boucle ou une fonction exécutée, on doit avoir certaines propriétés qu'il suffit d'énoncer en commentaire ou en docstring s'il s'agit du résultat de la fonction.\\ \textbf{But :} Détecter de possibles erreurs de programmation\\ \textbf{Bonne conduite :} on énonce (en commentaire) ce qu'on veut avant de commencer à coder et on vérifie a posteriori que ca fonctionne. \subsubsection{Invariants (de boucle)} Lors de l'écriture d'une boucle, il arrive souvent qu'une certaine propriété soit conservée au passage de la boucle $\rightarrow$ on parle d'invariant (exemple : fusion, à chaque tour L est triée)\\ \textit{Remarque : Souvent démontrer qu'une propriété est un invariant permettra de prouver la correction de l'algorithme $\rightarrow$ Le fait qu'il soit correct}\\ Lors de la phase de programmation, il sera bon de se laisser des commentaires qui verbalisent ces invariants \subsection{Vérifications par assertions} Une fois tout écrit en commentaire, on peut essayer de vérifier le tout avec la fonction 'assert'\\ NB : l'usage de 'assert' doit être réservé à la phase de conception ou de débgugage car Python la désactive en mode de production. Cela permet de se mettre des gardes-fous lors de la conception.\\ \textbf{Usage :} assert(condition, messagesipb) : 'condition' est une expression qui doit s'évaluer à : \begin{itemize} \item True : tout va bien, rien ne se passe \item False : la fonction meurt en affichant 'messagesipb'\\ \end{itemize} Exemple : %\begin{minted}{Python} \begin{lstlisting}[language=Python] def fusion(L1,L2): "(liste,liste)->list 'L1' et 'L2' sont 2 listes triées d'éléments comparables. Renvoie 'L' une liste triée, fusion de 'L1' et 'L2'" #Précondition : L1 et L2 triés assert(est_triee(L1), "L1 non triée !") assert(est_triee(L2), "L2 non triée !") L=[] #Liste d'arrivée i1, i2, n1, n2 = 0, 0, len(L1), len(L2) #Initialisation for i in range(n1+n2): if i1==n1 or (i2 < n2 and L1[i1] > L2[i2]): candidat = L2[i2] i2 += 1 else: candidat = L1[i1] i1 += 1 L.append(candidat) #L est triée et de bonne taille assert(est_triee(L), "L non triée dans la boucle") asseert(len(L)==i+1, "L pas de bonne taille") return L \end{lstlisting} %\end{minted}