\documentclass[12pt]{beamer}

\usepackage[latin1]{inputenc}
\usepackage{fontenc}
\usepackage[frenchb]{babel}
\usepackage{aeguill}

\usetheme{Madrid}
\definecolor{BackGroundColor}{rgb}{0.95, 0.95, 0.95}
\definecolor{White}{rgb}{1.0, 1.0, 1.0}
\definecolor{Red}{rgb}{1.0, 0.0, 0.0}
\def\filename#1{{\bf{#1}}}
\def\codeline#1{{\it{#1}}}
\def\function#1{{\it{#1}}}

\beamertemplatesolidbackgroundcolor{BackGroundColor!50!White}

\title[Perl pour physiciens]{Perl pour physiciens}
\author{Nicolas Regnault}
\institute{Laboratoire Pierre Aigrain}
\date{19 novembre 2004}

\begin{document}

\frame{\titlepage}

\frame{
Plan du cours:
\begin{itemize}
\item {\color<2>[gray]{0.7}introduction}
\item {\color<2>[gray]{0.7}les variables}
\item les tableaux
\item les fichiers
\item {\color<2>[gray]{0.7}les expressions r\'eguli\`eres}
\item {\color<2>[gray]{0.7}les fonctions}
\item {\color<2>[gray]{0.7}hygi\`ene et programmation (les 10 commandements)}
\item {\color<2>[gray]{0.7}PERL ma\^itre du monde}
\item {\color<2>[gray]{0.7}Exemples \`a la demande}
\end{itemize}
}


\frame{
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\begin{center}Chapitre 3:\\
Les tableaux
\end{center}
\end{beamerboxesrounded}
\end{center}
}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{G\'en\'eralit\'es}

\begin{itemize}
\item allou\'es dynamiquement
\item premier indice = 0
\item pas de type fix\'e pour l'int\'egralit\'e du tableau
\item nom doit commencer par @
\end{itemize}
}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{G\'en\'eralit\'es}
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{particule.pl}
\#!/usr/bin/perl\\
\\
\alert<2>{@particule = ("photon", "boson", 0, 0, 1);}\\
print ("nom : ".\alert<3>{\$particule[0]}."{\textbackslash}n");\\
print ("statistique : ".\alert<3>{\$particule[1]}."{\textbackslash}n");\\ 
print ("masse : ".\alert<3>{\$particule[2]}." eV{\textbackslash}n");\\
print ("charge : ".\alert<3>{\$particule[3]}."{\textbackslash}n");\\
print ("spin :".\alert<3>{\$particule[4]}."{\textbackslash}n");\\
\end{beamerboxesrounded}
\end{center}
}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{G\'en\'eralit\'es}

affecter un \'el\'ement au tableau
\only<1>{\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\$particule[0] = "photon";\\
\$particule[1] = "bosons";\\
\end{beamerboxesrounded}
\end{center}}

\only<2>{\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
push (\@particule, "photon");\\
push (\@particule, "boson");\\
\end{beamerboxesrounded}
\end{center}}
}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{Parcourir un tableau}
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{parcours.pl}
\#!/usr/bin/perl\\
\\
@energies = (1, 4, 9, 16, 25, 36, 49, 64);\\
\$i = 0;\\
\only<1-2>{\alert<2>{while (\$i $<$ 8)}\\}
\only<3-4>{\alert<4>{while (\$i $<$ \$\#energies)}\\}
  \{\\
    print ("energie ".\$i.": ".\$energies[\$i]."{\textbackslash}n");\\
    \$i++;\\
  \}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{Parcourir un tableau}
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{foreach.pl}
\#!/usr/bin/perl\\
\\
@energies = (1, 4, 9, 16, 25, 36, 49, 64);\\
\alert<2>{foreach \$valeur (@energies)}\\
  \{\\
    print (\$valeur."{\textbackslash}n");\\
  \}\\
\end{beamerboxesrounded}
\end{center}

\alert<3>{Pas de foreach dans un foreach!}

}


\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{Trier les tableaux}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{sort.pl}
\#!/usr/bin/perl\\
\\
@particules = ("photon","electron","proton","neutron","muon","pion");\\
@particulestriees = sort (@particules);\\
foreach {\textdollar}tmp (@particulestriees)\\
\{\\
  print ({\textdollar}tmp."{\textbackslash}n");\\
\}\\
\end{beamerboxesrounded}
\end{center}

}


\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{Trier les tableaux}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{tri\_numerique.pl}
\#!/usr/bin/perl\\
\\
@masses = (938.3, 939.6, 0.511);\\
\only<1-2>{\alert<2>{@massestriees = sort \{{\textdollar}a {\textless}={\textgreater} {\textdollar}b\} (@masses);\\}}
\only<3>{\alert<3>{@massestriees = sort \{{\textdollar}b {\textless}={\textgreater} {\textdollar}a\} (@masses);\\}}
foreach {\textdollar}tmp (@massestriees)\\
\{\\
  print ({\textdollar}tmp."{\textbackslash}n");\\
\}\\
\end{beamerboxesrounded}
\end{center}
}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{Le tableau @ARGV}

\only<1-2>{\begin{center}
\begin{beamerboxesrounded}[shadow=true]{argv.pl}
\#!/usr/bin/perl\\
\\
\alert<2>{foreach {\textdollar}argument (@ARGV)}\\
\{\\
  print ({\textdollar}argument."{\textbackslash}n");\\
\}\\
\end{beamerboxesrounded}
\end{center}}

\only<3>{\begin{center}
\includegraphics[width=7cm]{linux1.png}
\end{center}}

}

\frame{
\frametitle{chapitre 3: Les tableaux}
\framesubtitle{Exercice}

\begin{itemize}
\item  Cr\'eez un tableau de nombres al\'eatoires dont la taille sera pass\'ee comme premier argument. 
\item  Cherchez le minimum et le maximum par deux m\'ethodes
\begin{itemize}
\item  rapide \`a ex\'ecuter 
\item  lente mais compacte.
\end{itemize}
\end{itemize}

}

\frame{
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{}
\begin{center}Chapitre 4:\\
Les fichiers
\end{center}
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Tests de bases sur les fichiers}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{tests.pl}
\#!/usr/bin/perl\\
\\
{\textdollar}fichier = "toto";\\
\only<1-2>{\alert<2>{if (-e {\textdollar}fichier)}\\
\{\\
  print ("le fichier ".{\textdollar}fichier." existe{\textbackslash}n");\\
\}\\}
\only<3-4>{\alert<4>{if (-d {\textdollar}fichier)}\\
\{\\
  print ("le fichier ".{\textdollar}fichier." est un r\'epertoire{\textbackslash}n");\\
\}\\}
\only<5-6>{\alert<6>{if (-f {\textdollar}fichier)}\\
\{\\
  print ("le fichier ".{\textdollar}fichier." est un fichier{\textbackslash}n");\\
\}\\}
\end{beamerboxesrounded}
\end{center}
}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Tests de bases sur les fichiers}

\begin{itemize}
\item \codeline{-e} teste si le fichier existe.
\item \codeline{-d} teste si le fichier est un r\'epertoire.
\item \codeline{-f} teste si le fichier est bien un fichier et non un r\'epertoire.
\item \codeline{-r} teste si le fichier est accessible en lecture.
\item \codeline{-w} teste si le fichier est accessible en \'ecriture.
\item \codeline{-x} teste si le fichier est ex\'ecutable.
\end{itemize}

}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Tests de bases sur les fichiers}
\begin{center}
\begin{beamerboxesrounded}[shadow=true]{tests.pl}
\#!/usr/bin/perl\\
\\
{\textdollar}fichier = "toto";\\
\alert<2>{if ((-f {\textdollar}fichier) \&\& (-x {\textdollar}fichier))}\\
\{\\
  print ({\textdollar}fichier." est ex\'ecutable{\textbackslash}n");\\
\}\\
\end{beamerboxesrounded}
\end{center}
}


\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Lecture et \'ecriture de fichiers}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{lecture.pl}
\#!/usr/bin/perl\\
\\
open (INFILE, "test.txt");\\
while ({\textdollar}ligne = {\textless}INFILE{\textgreater})\\
\{\\
  print ({\textdollar}ligne);\\
\}\\
close (INFILE);\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Lecture et \'ecriture de fichiers}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{entree.pl}
\#!/usr/bin/perl\\
\\
\alert<2>{{\textdollar}a = {\textless}STDIN{\textgreater};}\\
print ("vous venez de taper ".{\textdollar}a);\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Lecture et \'ecriture de fichiers}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{lecture.pl}
\#!/usr/bin/perl\\
\\
\only<1-2,4>{\alert<2>{unless (open (INFILE, "test.txt"))}\\}
\only<3>{\alert<3>{if (!(open (INFILE, "test.txt")))}\\}
\{\\
\alert<5>{    die ("impossible de lire le fichier test.txt{\textbackslash}n");}\\
\}\\
while ({\textdollar}ligne = {\textless}INFILE{\textgreater})\\
\{\\
  print ({\textdollar}ligne);\\
\}\\
close (INFILE);\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Lecture et \'ecriture de fichiers}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{ecriture.pl}
\only<1-2,4>{\alert<2>{unless (open (OUTFILE, "{\textgreater}factoriel"))\\}}
\only<3>{\alert<3>{unless (open (OUTFILE, "{\textgreater}{\textgreater}factoriel"))\\}}
\{\\
  die ("impossible de creer le fichier factoriel{\textbackslash}n");\\
\}\\
{\textdollar}fact = 1;\\
for ({\textdollar}iter = 1; {\textdollar}iter {\textless}= 10; {\textdollar}iter++)\\
\{\\
   {\textdollar}fact *= {\textdollar}iter;\\
   print OUTFILE ({\textdollar}fact."{\textbackslash}n");\\
\}\\
close (OUTFILE);\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Manipuler les fichiers}

\begin{center}
\begin{beamerboxesrounded}[shadow=true]{ls.pl}
\#!/usr/bin/perl\\
\\
\only<1-2>{\alert<2>{foreach {\textdollar}fichier ({\textless}*{\textgreater})\\}}
\only<3>{\alert<3>{foreach {\textdollar}fichier ({\textless}*.pl{\textgreater})\\}}
\{\\
  print ({\textdollar}fichier."{\textbackslash}n");\\
\}\\
\end{beamerboxesrounded}
\end{center}

}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Manipuler les fichiers}

\begin{itemize}
\item \function{rename} renommer un fichier \codeline{rename(ancien\_nom, nouveau\_nom)}.
\item \function{unlink} effacer un fichier. 
\item \function{mkdir} cr\'eer un r\'epertoire.
\item \function{rmdir} effacer un r\'epertoire.
\end{itemize}
}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Exercice}

\begin{itemize}
\item cr\'eez cent fichiers \filename{testxx} (avec \filename{xx} allant de 0 \`a 99) (chaque fichier contenant son propre nom).
\item renommez ces fichiers de \filename{testxx} en \filename{totoyy} avec \filename{yy = xx+100}.
\end{itemize}
}

\frame{

\frametitle{chapitre 4: Les fichiers}
\framesubtitle{Exercice}

\begin{itemize}
\item cr\'eez un fichier \filename{donnees1.dat}, chaque ligne est un nombre de 0 \`a 1 avec un pas de 0.01
\item cr\'eez un fichier \filename{donnees2.dat}  \`a partir de \filename{donnees1.dat} avec \`a chaque ligne \codeline{x cos($2\pi$x)}
\end{itemize}
}

\end{document}