Bonjour, je ne comprends pas bien votre objectif : est-il d'apprendre les bases de perl ou bien les bases de l'algorithmique (indépendamment de tout langage) ?
Car en lisant votre programme, et si vous souhaitez apprendre les bases de perl, vous vous mettez d'emblée des contraintes très fortes en n'acceptant justement pas les formes syntaxiques particulières de perl (par rapport aux autres langages structurés tels C) qui font à mes yeux justement partie des bases de perl.
Si votre question est purement algorithmique, alors je ne la comprends pas car, si j'ai bien interprété votre programme (ce n'est pas simple, car on ne connais pas la teneur du tableau @tab_mot_mystere ni celle de $caract, la fonction ChercheCaractere n'étant pas montrée dans son utilisation), votre programme devrait déjà compter le nombre d'occurrence de $caract dans @tab_mot_mystere. Il conviendrait cependant de corriger le contenu du if :
if ($caract eq $tab_mot_mystere[$cpt]){
(eq : opérateur d'égalité alpha-numérique)
Je ne peux m'empêcher cependant de vous prodiguer quelques bases de programmation perl :
En perl, il est rarement nécessaire d'avoir à se préoccuper de la gestion des indices de tableaux, car perl dispose d'opérateur sur les listes.
Ainsi, on peut ré-écrire ceci
1 2 3 4 5 6 7
| my $cpt=0;
for ($cpt=0;$cpt<scalar(@tab_mot_mystere);$cpt++){
if ($caract eq $tab_mot_mystere[$cpt]){
$nb=$nb+1;
}
} |
ainsi :
1 2 3 4 5
| foreach my $caract_mystere (@tab_mot_mystere){
if ($caract eq $caract_mystere){
$nb=$nb+1;
}
} |
Ensuite, en perl, il existe spécifiquement une fonction perl qui permet de rechercher (et de compter) des occurrences dans un tableau (grep).
Ainsi, le code précédent peut également s'écrire :
$nb = grep $caract eq $_, @tab_mot_mystère
Dernière remarque : il est assez rare en perl d'avoir besoin de "découper" un mot en tableau de caractère pour en faire son analyse, car l'usage des expressions régulière est très puissante et largement favorisée en perl.
Ainsi, si l'on considère que $mon_mystere est le mot entier, il est facile de compter les occurrences de $caract à l'intérieur, sans le découper :
1 2
| @occurrence_caract = $mot_mystere =~ /($caract)/g;
$nb = scalar(@occurrence_caract); |
qu'il est aussi possible d'écrire :
$nb = () = $mot_mystere =~ /($caract)/g;
en utilisant la technique du pseudo opérateur goatse.
Si vous avez lu jusqu'ici, c'est que vous n'êtes pas encore dégouté de perl. Je vous invite alors à systématiquement introduire en début de script les deux lignes suivantes :
1 2 3
|
use strict;
use warning; |
Ces dernières vous permettrons de corriger quelques défauts de styles d'écriture qui vous éviterons quelques déboires.
Cordialement.
Partager