Commit 53b0ca29 authored by Rémy Huet's avatar Rémy Huet 💻

Boucle for et exercice

parent c099afd9
Pipeline #33698 passed with stage
in 19 seconds
......@@ -11,6 +11,7 @@
\usepackage{listings}
\usepackage{tabularx}
\usepackage{fancyvrb}
\usepackage[]{ulem}
\usepackage{xcolor}
\usepackage{tikz}
\hypersetup{
......
......@@ -90,3 +90,102 @@ done
On notera que comme pour les if, on peut utiliser les opérateurs arithmétiques
\end{block}
\end{frame}
\subsection{La boucle pour}
\begin{frame}[fragile]{En théorie}
\begin{block}{Utilité}
La boucle \texttt{pour} permet de parcourir une liste de valeurs et de boucler autant de fois qu'il y a de valeurs.
\end{block}
Syntaxe :
\begin{Verbatim}
{\large POUR variable PRENANT valeur1 valeur2 valeur3}
{\large FAIRE}
{\large actions}
{\large FIN_POUR}
\end{Verbatim}
\end{frame}
\begin{frame}[fragile]{Et en bash ?}
En bash, la syntaxe est la suivante:
\begin{Verbatim}
{\large for variable in val1 val2 val3}
{\large do}
{\large actions}
{\large done}
\end{Verbatim}
Exemple :
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
#!/bin/bash
while [ "$reponse" != 'oui' ]
do
read -p 'Dites oui : ' reponse
done
\end{Verbatim}
\end{beamercolorbox}
\begin{block}{}
Ce script demandera une entrée à l'utilisateur tant que ça ne sera pas \enquote{oui}
\end{block}
\end{frame}
\begin{frame}[fragile]{Un autre exemple plus complexe \ldots}
\begin{alertblock}{Exercice: les années bissextiles}
Écrire un script qui:
\begin{itemize}
\item Demande deux années à l'utilisateur : celle de départ ou celle d'arrivée. Elles pourront être fournies en paramètre (dans cet ordre). La ou les valeurs manquantes seront demandées par le prompt lors de l'exécution du programme.
\item Affiche toutes les années bissextiles comprises entre les celles données (incluses)
\end{itemize}
On utilisera uniquement des boucles \texttt{for} et pas de boucle \texttt{while}
\end{alertblock}
\begin{exampleblock}{Rappel}
Une année est bissextile si elle est un multiple de 4. Exception : elle ne l'est pas si elle est un multiple de 100. Exception à l'exception : elle l'est si elle est un multiple de 400.
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]{Indices}
\begin{block}{Indices}
\begin{itemize}
\item Pour générer les valeurs pour la boucle \texttt{for}, allez voir du côté de \sout{chez Swann} \texttt{seq}
\item La commande \texttt{let} ne renvoie pas directement la valeur du calcul. On utilisera une autre syntaxe pour faire les calculs dans les if: \texttt{\$((calcul))}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{solution}
Proposition de solution:
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
#!/bin/bash \Pause
depart=$1 \Pause
arrivee=$2 \Pause
if [ -z $2 ] \Pause
then \Pause
if [ -z $1 ] \Pause
then \Pause
read -p 'Année de départ ? ' depart \Pause
fi \Pause
read -p "Année d'arrivée ? " arrivee \Pause
fi \Pause
for annee in `seq $depart $arrivee` \Pause
do \Pause
if [ $(($annee % 4)) -eq 0 ] && [ $(($annee % 100)) -ne 0 ] || [ $(($annee % 400)) -eq 0 ] \Pause
then \Pause
echo $annee \Pause
fi \Pause
done
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment