|
Initiation au Perl
11. Exemples
11.1 Bonjour
#!/usr/bin/perl
if ($#ARGV < 0) {
print "Quel est votre prénom ? ";
$prenom = <STDIN>;
chop ($prenom);
} else {
$prenom = $ARGV[0];
}
print "Bonjour $prenom\n";
11.2 Calcule la valeur de Pi
#!/usr/bin/perl
# Calcule la valeur de Pi avec une precision superieure
# ou egale a 0.1^precision en utilisant la limite de
# la somme pour i variant entre 0 et l'infini de
# (-1^i / 2i+1) * [4 * (1/5)^(2i+1) - (1/239)^(2i+1)]
# qui est egale a Pi/4.
# A chaque iteration pour le calcul de la somme, on
# conserve la puissance negative impaire courante de 5
# et 239. Pour la puissance de -1, on utilise la parite
# de l'iteration.
# Test des arguments et affichage du résultat.
if ($#ARGV < 0) { &usage(); }
for ($i=0; $i < $#ARGV+1; $i++) {
print &Pi($ARGV[$i])."\n";
}
# Renvoie la valeur de Pi avec la precision voulue.
sub Pi {
my($precision)=@_;
my($i, $somme, $somme_precedente, $puissance_de_cinq,
$puissance_de_deux_cent_trente_neuf, $epsilon);
$somme = 0;
$somme_precedente = 1;
$puissance_de_cinq = 1/5;
$puissance_de_deux_cent_trente_neuf = 1/239;
$epsilon = 0.1;
for ($i = 1; $i < $precision; ++$i) {
$epsilon /= 10;
}
for ($i = 0; abs($somme - $somme_precedente) > $epsilon; $i++) {
$somme_precedente = $somme;
$somme += ( ( $i % 2 == 0 ) ? 1 : -1 ) / (2 * $i + 1) *
( 4 * $puissance_de_cinq - $puissance_de_deux_cent_trente_neuf );
$puissance_de_cinq /= 25;
$puissance_de_deux_cent_trente_neuf /= 57121;
}
return $somme * 4;
}
sub usage {
print STDERR "Usage $0 ENTIER...\n";
print STDERR "Calcule la valeur de Pi\n";
print STDERR "avec une precision superieure ou egale a 0.1^precision\n";
exit;
}
11.3 Triangle de Pascal
#!/usr/bin/perl
if ($#ARGV < 0) { &usage(); }
$Nb = $ARGV[0];
$tab[0][0] = 1;
# Calcul du triangle
for ($n = 1; $n < $Nb+1; ++$n) {
for ($k=1; $k < $Nb+1; ++$k) {
$tab[$n][$k] = $tab[$n-1][$k] + $tab[$n-1][$k-1];
}
}
# Affichage du résultat
for ($n = 1; $n < $Nb+1; ++$n) {
for ($k = 1; $k < $Nb+1; ++$k) {
if ($tab[$n][$k] != 0) {
$s .= $tab[$n][$k]." ";
}
}
$s .= "\n";
}
print $s;
sub usage {
print STDERR "Usage $0 ENTIER...\n";
print STDERR "Affiche le triangle de Pascal de profondeur ENTIER.\n";
exit;
}
11.4 Compteur
#!/usr/bin/perl
$count_file = "compteur.txt";
open(COUNT,"<$count_file") || die("Erreur de lecture de $count_file, Erreur: $!\n");
$count = <COUNT>;
close(COUNT);
chop ($count);
$count++;
open(COUNT,">$count_file") || die("Erreur d'ecriture de $count_file, Erreur: $!\n");
print COUNT $count."\n";
close(COUNT);
print $count."\n";
11.5 Recherche d'une occurence dans un fichier
#!/usr/bin/perl
$fichier = "monfichier.txt";
open(FILE,"<$fichier") || die("Erreur de lecture de $fichier, Erreur: $!\n");
print("Quel mot rechercher : ");
$cherche = ;
chop($cherche);
$ligne = 0;
$sum = 0;
$cond = 0;
while(<FILE>){
$cond=$sum;
$ligne +=1;
$sum += (s/\b$cherche\b/$cherche/g);
if($cond != $sum){
print("Ligne $ligne ==> ");
print("$sum\n");
}
}
close(FILE)
print("----------------------------------------------------\n");
print("Votre fichier contient $sum fois le mot '$cherche'\n");
11.6 Date en français
#!/usr/bin/perl
@WeekDays = ('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
@Months = ('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Decembre');
($Sec,$Min,$Hour,$Day,$Month,$Year,$Week_Day) = (localtime);
$Year += 1900;
print $WeekDays[$Week_Day]." ".$Day." ".$Months[$Month]." ".$Year."\n";
# Affiche Lundi 1 Janvier 1999
$Month++;
if ($Day < 10) { $Day = "0".$Day; }
if ($Month < 10) { $Month= "0".$Month; }
print "$Day/$Month/$Year\n";
# Affiche 01/01/1999
if ($Sec < 10) { $Sec = "0".$Sec; }
if ($Min < 10) { $Min = "0".$Min; }
if ($Hour < 10) { $Hour = "0".$Hour; }
print "$Hour:$Min:$Sec\n";
# Affiche 23:15:50
|
|