Problème sur la table de hashage
Résolu
laisso
-
laisso -
laisso -
Bonjour,
J'ai des difficultés pour exécuter les questions 4 5 et 6. Merci de bien vouloir m'aiguiller.
#Construire un programme proposant ces fonctionnalités :
#* Au chargement, on a au moins 4 abonnés dont un à 0 DVD et un à undef.
#* On boucle sur un menu proposant :
#1. afficher la DVDthéque
#2. ajouter un abonné
#3. supprimer un abonné
#4. emprunt d'un ou plusieurs DVD
#5. retour d'un ou plusieurs DVD
#6. quitter
#On aidera l'utilisateur à tout moment du mieux qu'on peut, exemples (non exhaustifs) :
#* 2 : on affiche la liste des abonnés pour lui montrer ceux qui existent déjà. On vérifie que le nouvel entrant n'existe pas sinon, message.
#* 3 : on affiche la liste des abonnés avec des numéros pour qu'il puisse indiquer rapidement celui qu'il veut supprimer. On boucle sur une saisie blindée sur ces numéros-là.
#* 4 : la liste des abonnés est affichée comme ci-dessus.
#* 5 : idem ci-dessus et on vérifie qu'un abonné ne peut pas rendre plus de DVD qu'il n'en a.
#!/usr/bin/perl
# La liste des emprunteurs est donnée par une table de hachage %abonnes
# Clé : indentifiant = prénom pour simplifier
# Valeur : nb de DVD empruntés
# Création de la table :
$abonnes{"Guillaume"} = 3;
$abonnes{"Maxime"} = 15;
$abonnes{"Anne"} = 0; # abonné qui a déjà emprunté mais aucun emprunt en cours
$abonnes{"Michel"} = undef;
# Affichage
print("\n\nAffichage de la DVDthèque");
while (($prenom,$nbDVD) = each %abonnes) {
print "\n$prenom est abonné";
# si le nb de DVD n'est pas undef
if (defined($nbDVD)) {
print("\n\tnb de DVD empruntés : $nbDVD");
} else {
print("\n\tIl n'a jamais emprunté de DVD");
}
}
# Ajout d'un nouvel abonné sans emprunt
print("\n\nAjout d'un nouvel abonné sans emprunt");
print("\nQui souhaitez-vous ajouter ? ");
$newAbonne =<STDIN>;
chomp($newAbonne); # suppression du saut de ligne
$abonnes{"$newAbonne"} = undef; # abonné sans emprunt
# Affichage
print("\n\nAffichage de la DVDthèque");
while (($prenom,$nbDVD) = each %abonnes) {
print("\n$prenom est abonné");
# si le nb de DVD n'est pas undef
if (defined($nbDVD)) {
print("\n\tnb de DVD empruntés : $nbDVD");
} else {
print("\n\tIl n'a jamais emprunté de DVD");
}
}
# Révocation d'un abonné : delete
print("\n\nQuel User souhaitez vous supprimer?");
$user= <>;
chomp($user);
delete ($abonnes {$user}) ;
# Affichage
print("\n\nAffichage de la DVDthèque");
while (($prenom,$nbDVD) = each %abonnes) {
print("\n$prenom est abonné");
# si le nb de DVD n'est pas undef
if (defined($nbDVD)) {
print("\n\tnb de DVD empruntés : $nbDVD");
} else {
print("\n\tIl n'a jamais emprunté de DVD");
}
}
# Emprunt d'un ou plusieurs DVD
print("\n\nCombien de DVD voulez vous emprunter?");
$maxDVD = -1; # le max de DVD empruntés
while (($prenom,$nbDVD) = each %abonnes) {
if ($nbDVD > $maxDVD) {
$DVD = $nbDVD;
$Emprunteur = $prenom;
}
}
print("\nIl a emprunté $DVD DVD");
# Recherche d'un abonné
print("\n\nQuel abonné cherchez-vous ? ");
$abbX = <STDIN>;
chomp($abbX); # suppression du saut de ligne
if (exists $abonnes{$abbX}) {
print("\n$abbX est abonné\nIl a emprunté $abonnes{$abbX} DVD");
} else {
print("\n$abbX n'est pas abonné\n");
}
# retour d'un ou plusieurs DVD
print'"\n\nCombien de DVD coulez vous restituer?");
while (($prenom,$nbDVD) = each %abonnes) {
if ($nbDVD > $maxDVD) {
$DVD = $nbDVD;
$restitué = $prenom;
}
}
print ("\nIl a restitué $DVD DVD");
# Quitter
print("\n\nAu revoir\n\n");
J'ai des difficultés pour exécuter les questions 4 5 et 6. Merci de bien vouloir m'aiguiller.
#Construire un programme proposant ces fonctionnalités :
#* Au chargement, on a au moins 4 abonnés dont un à 0 DVD et un à undef.
#* On boucle sur un menu proposant :
#1. afficher la DVDthéque
#2. ajouter un abonné
#3. supprimer un abonné
#4. emprunt d'un ou plusieurs DVD
#5. retour d'un ou plusieurs DVD
#6. quitter
#On aidera l'utilisateur à tout moment du mieux qu'on peut, exemples (non exhaustifs) :
#* 2 : on affiche la liste des abonnés pour lui montrer ceux qui existent déjà. On vérifie que le nouvel entrant n'existe pas sinon, message.
#* 3 : on affiche la liste des abonnés avec des numéros pour qu'il puisse indiquer rapidement celui qu'il veut supprimer. On boucle sur une saisie blindée sur ces numéros-là.
#* 4 : la liste des abonnés est affichée comme ci-dessus.
#* 5 : idem ci-dessus et on vérifie qu'un abonné ne peut pas rendre plus de DVD qu'il n'en a.
#!/usr/bin/perl
# La liste des emprunteurs est donnée par une table de hachage %abonnes
# Clé : indentifiant = prénom pour simplifier
# Valeur : nb de DVD empruntés
# Création de la table :
$abonnes{"Guillaume"} = 3;
$abonnes{"Maxime"} = 15;
$abonnes{"Anne"} = 0; # abonné qui a déjà emprunté mais aucun emprunt en cours
$abonnes{"Michel"} = undef;
# Affichage
print("\n\nAffichage de la DVDthèque");
while (($prenom,$nbDVD) = each %abonnes) {
print "\n$prenom est abonné";
# si le nb de DVD n'est pas undef
if (defined($nbDVD)) {
print("\n\tnb de DVD empruntés : $nbDVD");
} else {
print("\n\tIl n'a jamais emprunté de DVD");
}
}
# Ajout d'un nouvel abonné sans emprunt
print("\n\nAjout d'un nouvel abonné sans emprunt");
print("\nQui souhaitez-vous ajouter ? ");
$newAbonne =<STDIN>;
chomp($newAbonne); # suppression du saut de ligne
$abonnes{"$newAbonne"} = undef; # abonné sans emprunt
# Affichage
print("\n\nAffichage de la DVDthèque");
while (($prenom,$nbDVD) = each %abonnes) {
print("\n$prenom est abonné");
# si le nb de DVD n'est pas undef
if (defined($nbDVD)) {
print("\n\tnb de DVD empruntés : $nbDVD");
} else {
print("\n\tIl n'a jamais emprunté de DVD");
}
}
# Révocation d'un abonné : delete
print("\n\nQuel User souhaitez vous supprimer?");
$user= <>;
chomp($user);
delete ($abonnes {$user}) ;
# Affichage
print("\n\nAffichage de la DVDthèque");
while (($prenom,$nbDVD) = each %abonnes) {
print("\n$prenom est abonné");
# si le nb de DVD n'est pas undef
if (defined($nbDVD)) {
print("\n\tnb de DVD empruntés : $nbDVD");
} else {
print("\n\tIl n'a jamais emprunté de DVD");
}
}
# Emprunt d'un ou plusieurs DVD
print("\n\nCombien de DVD voulez vous emprunter?");
$maxDVD = -1; # le max de DVD empruntés
while (($prenom,$nbDVD) = each %abonnes) {
if ($nbDVD > $maxDVD) {
$DVD = $nbDVD;
$Emprunteur = $prenom;
}
}
print("\nIl a emprunté $DVD DVD");
# Recherche d'un abonné
print("\n\nQuel abonné cherchez-vous ? ");
$abbX = <STDIN>;
chomp($abbX); # suppression du saut de ligne
if (exists $abonnes{$abbX}) {
print("\n$abbX est abonné\nIl a emprunté $abonnes{$abbX} DVD");
} else {
print("\n$abbX n'est pas abonné\n");
}
# retour d'un ou plusieurs DVD
print'"\n\nCombien de DVD coulez vous restituer?");
while (($prenom,$nbDVD) = each %abonnes) {
if ($nbDVD > $maxDVD) {
$DVD = $nbDVD;
$restitué = $prenom;
}
}
print ("\nIl a restitué $DVD DVD");
# Quitter
print("\n\nAu revoir\n\n");
A voir également:
- Erreur de hash
- Table ascii - Guide
- Table des matières word - Guide
- Table des caractères - Guide
- Tableau croisé dynamique ou table de pilote - Guide
- No bootable partition in table ✓ - Forum Windows
1 réponse
Salut laisso,
Ton code Perl ne compile pas, car :
- à cette ligne
... et plus bas...
- tu as un accent sur cette variable
En outre, tu ne fais pas ce que te demande de faire l'énoncé de l'exercice, qui te demande de créer un menu avec une boucle permettant d'afficher les différentes options du programme et de les exécuter en sélectionnant leur numéro.
Pareil pour la suppression : on te demande d'afficher la liste des différents abonnés avec des numéros pour que l'utilisateur puisse indiquer en tapant le numéro qui il veut supprimer, en bouclant tant qu'une saisie invalide est faite.
Par exemple :
Qui voulez-vous supprimer :
En fait, on te demande de faire une interface utilisateur (textuelle) pour que l'utilisateur sache ce qu'il peut faire avec le programme et lui faciliter la vie.
Tu devrais faire des fonctions pour chaque fonctionnalité de ton programme.
Pour tes questions "J'ai des difficultés pour exécuter les questions 4 5 et 6. Merci de bien vouloir m'aiguiller."
j'imagine que cela correspond aux items suivant du menu principal :
Si le programme se limite à comptabiliser le nombre d'ouvrages empruntés, j'imagine qu'il suffit :
- pour 4 : d'incrémenter la valeur correspondant à la personne dans le hash qui emprunte,
- pour 5 : de décrémenter
- pour 6 : tu termines ton programme : exit parait indiqué si tu es dans une boucle
Votre enseignant ne vous a pas enseigné à utiliser les directives strict et warnings ?
Dal
Ton code Perl ne compile pas, car :
- à cette ligne
print'"\n\nCombien de DVD coulez vous restituer?");, tu as une
'à la place d'une
(...
... et plus bas...
- tu as un accent sur cette variable
$restitué = $prenom;(que tu n'utilises d'ailleurs pas dans ton code)
En outre, tu ne fais pas ce que te demande de faire l'énoncé de l'exercice, qui te demande de créer un menu avec une boucle permettant d'afficher les différentes options du programme et de les exécuter en sélectionnant leur numéro.
Pareil pour la suppression : on te demande d'afficher la liste des différents abonnés avec des numéros pour que l'utilisateur puisse indiquer en tapant le numéro qui il veut supprimer, en bouclant tant qu'une saisie invalide est faite.
Par exemple :
Qui voulez-vous supprimer :
1. Guillaume
2. Maxime
3. Anne
4. Michel
0. Retour au menu principal
En fait, on te demande de faire une interface utilisateur (textuelle) pour que l'utilisateur sache ce qu'il peut faire avec le programme et lui faciliter la vie.
Tu devrais faire des fonctions pour chaque fonctionnalité de ton programme.
Pour tes questions "J'ai des difficultés pour exécuter les questions 4 5 et 6. Merci de bien vouloir m'aiguiller."
j'imagine que cela correspond aux items suivant du menu principal :
#4. emprunt d'un ou plusieurs DVD
#5. retour d'un ou plusieurs DVD
#6. quitter
Si le programme se limite à comptabiliser le nombre d'ouvrages empruntés, j'imagine qu'il suffit :
- pour 4 : d'incrémenter la valeur correspondant à la personne dans le hash qui emprunte,
- pour 5 : de décrémenter
- pour 6 : tu termines ton programme : exit parait indiqué si tu es dans une boucle
Votre enseignant ne vous a pas enseigné à utiliser les directives strict et warnings ?
Dal