IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[Défis][3] le carnet d'adresse


Sujet :

Contribuez

  1. #1
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut [Défis][3] le carnet d'adresse
    J'ai un carnet d'adresse, sous forme d'un tableau de struct. Chaque struct contient les champs 'nom' et 'adresse'. Voila un exemple d'un tel carnet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mon_carnet = [struct('nom', 'Alain', 'adresse', '2 rue des carmélites')
    struct('nom', 'Cécile', 'adresse', '7 avenue quejespère')
    struct('nom', 'Odile', 'adresse', '9 rue pasdanslesbrancards')
    struct('nom', 'Bernard', 'adresse', '6 place kezicinoirketimiparlkomsa?')]
    le défi est le suivant :
    Ecrire le code le plus compact(*) possible pour trouver, dans le carnet, l'adresse d'une personne dont on connait le nom.

    ------------------------------------------------------
    (*) un code est compact quand il a :
    • moins de boucles (for-end, while-end, ...)
    • moins de lignes de code
    • moins d'affectations (signe =)
    • moins de variables déclarées


    Pas besoin de hiérarchiser ces critères car toute amélioration de l'un impacte les autres.
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nom_recherche = Odile;
    mon_carnet(strcmp({mon_carnet.nom}, nom_recherche)).adresse
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 881
    Points : 3 429
    Points
    3 429
    Par défaut
    ça marche, mais ça devrait plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_carnet(strcmp(nom_recherche,{mon_carnet.nom})).adresse
    d'après la doc

    je sais plus pourquoi mais ca m'est arrivé de me faire jeter en mettant le cellarray en premier sur strcmp

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut reponse
    Bonjour,


    voici ma petite fonction. J'y compare le code proposé par dut et le mien (le deuxième)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    function defi02(nom);
    mon_carnet = [struct('nom', 'Alain', 'adresse', '2 rue des carmélites');
    struct('nom', 'Cécile', 'adresse', '7 avenue quejespère');
    struct('nom', 'Odile', 'adresse', '9 rue pasdanslesbrancards');
    struct('nom', 'Bernard', 'adresse', '6 place kezicinoirketimiparlkomsa?');
    struct('nom', 'fabien', 'adresse', '4 place henridunod');
    struct('nom', 'gerard', 'adresse', '6 avenue lenine');
    struct('nom', 'sandrine', 'adresse', '6 place mentfinancier');
    struct('nom', 'aila', 'adresse', '6 rue édanslesbrancards')];
     
     
    if ~isempty(nom)
    nom_recherche=nom;
    end
    tic
    locAddress=mon_carnet(strcmp(nom_recherche,{mon_carnet.nom})).adresse;
    firstTry=toc
    tic
    index=strcmp(nom_recherche,{mon_carnet(:).nom});
    locAddress=mon_carnet(find(index)).adresse;
    secTry=toc
     
    disp(locAddress);
    end

    quand le nom recherché est au début de l'annuaire, la fonction de dut est plus rapide, mais plus le nom est loin dans l'annuaire, plus rapide est la mienne.


    defi02('Cécile')
    firstTry =
    4.3413e-004
    secTry =
    4.8721e-004
    7 avenue quejespère
    >> defi02('Cécile')
    firstTry =
    2.2489e-004
    secTry =
    2.7713e-004
    7 avenue quejespère
    >> defi02('fabien')
    firstTry =
    2.4025e-005
    secTry =
    2.3746e-005
    4 place henridunod
    >> defi02('aila')
    firstTry =
    2.4305e-005
    secTry =
    2.3467e-005
    6 rue édanslesbrancards
    >> defi02('Alain')
    firstTry =
    2.3187e-005
    secTry =
    2.3746e-005
    2 rue des carmélites

    on pourrait rajouter du code pour vérifier que le nom recherché est présent dans l'annuaire pour éviter les erreurs, mais comme la concurrence ne l'a pas joint, j'ai voulu surcharger le code.

    A bientôt

  5. #5
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    En utilsant les containers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [keySet{1:length(mon_carnet ),1}] = deal(mon_carnet.nom);
    [valueSet{1:length(mon_carnet ),1}] = deal(mon_carnet.adresse);
    mapObj = containers.Map(keySet,valueSet)
    Pour connaitre l'adresse d'Odile:

    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/11/2005, 11h00
  2. Server 2003 et partage de carnet d'adresse
    Par Yepazix dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 23/10/2005, 23h47
  3. Carnet d'adresses d'Outlook
    Par vciofolo dans le forum Access
    Réponses: 2
    Dernier message: 14/10/2005, 12h34
  4. Récupérer le carnet d'adresses de Outlook
    Par pc75 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/02/2005, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo