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 C++ Discussion :

Exercices souvent proposés en test


Sujet :

Contribuez C++

  1. #1
    screetch
    Invité(e)
    Par défaut Exercices souvent proposés en test
    C'est une chose assez commune de demander a des candidats de passer un petit test C/C++/Pseudo code pour vérifier les capacités de programmation (et voir comment un candidat résout un problème).

    les entreprises ne demandent bien sur pas un code qui compile, mais juste de voir comment un candidat résout un problème, s'il emploie des solutions viables (pas d'algorithmes en n2/n3 pour des choses simples, pas 2000 lignes de code pour une fonction simple, pas d'oubli des cas particuliers, etc)

    je voulais proposer ici quelques exercices (certains que je connais, d'autres que les autres utilisateurs ont surement passé/font passer) avec ce qu'on attend du résultat.

    Ca peut etre interessant d'etudier ce genre de problemes pour s'entrainer, se préparer a un entretien (bien qu'en general ils ont des questions un peu différentes, enfin j'espere)

  2. #2
    screetch
    Invité(e)
    Par défaut
    le premier exercice qu'on m'a posé :
    exercice : ecrire une fonction en C ou pascal ou pseudocode pour renverser une chaîne de caractères (le dernier caractère devient le premier, l'avant-dernier le second, etc)

  3. #3
    screetch
    Invité(e)
    Par défaut
    le second :
    On a ecrit un lecteur multimédia (XMMS/WinAmp) et l'on souhaite implémenter la fonction "randomize". Ecrivez cette fonction en C/C++/Pseudo code; elle prend en entrée un tableau des chansons, et l'on peut appeler la fonction rand() qui renvoie un entier entre 1 et RAND_MAX

  4. #4
    screetch
    Invité(e)
    Par défaut
    un exercice qui peut donner des résultats interessants :
    On a une liste simplement chainée l, non circulaire. On souhaite effacer le 5ème élément a partir de la fin. Comment ecrivez-vous ce code ?
    Dernière modification par screetch ; 11/10/2009 à 12h19.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Les 2 premiers exercices sont assez triviaux, mais le 3è, la liste est une simplement chainée, circulaire ou pas ?

    Parce que si elle n'est pas circulaire, je ne vois pas comment on pourrait remonter à la tête... (par exemple si l'élément suivant le dernier est "null").

    Parce que si elle est circulaire, ça devient trivial comme solution également.

    C'est le genre de problèmes qu'on apprend à résoudre aux premiers cours d'algo quand même...

    Edit: ou bien j'ai mal compris le problème et c'est l'élément size-5 qu'on veut supprimer, avec comme l pointant sur le 1er élément ? auquel cas c'est assez trivial comme solution aussi...

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Les deux premiers exemple sont courant ... je me rends compte que je les ai eu. Ils sont faciles ( enfin avis personnel ).
    Le troisième, je pense plus à faire du size - 5.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    screetch
    Invité(e)
    Par défaut
    oui c'est non circulaire.
    Pour le premier exercice, ce qu'on attend du candidat c'est de voir qu'il connait un peu le langage et quelques pieges pour ne pas faire un alog N^2. Pour le second, on attend de voir si il est capable de trouver une solution algorithmiquement acceptable (pas de N^2) et mathematiquement correcte (chaque elémenet a la meme probabilité de se retrouver partout)
    evidemment, meme si ce n'est pas précisé, si il y a une fonction de la STL ou d'une bibliotheque qui sait le faire, ce n'est pas forcément ce qui est demandé.

    pour le troisieme oui on souhaite enlever le 5eme élément a partir de la fin, soit l'élément a size-5

    si vous avez quelques exercices vous pouvez les rajouter a la suite =)

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Ce n'était pas lors d'un entretien d'embauche, mais tous ce qui ressemble à la gestion des ruptures est parfois intéressant.

    L'exercice que j'ai eu à l'époque était:
    Nous avons une entreprise internationnale qui dispose d'un fichier où sont repris les chiffres d'affaire de ses différentes agences sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <continent>  <pays> <province> <canton> <ville> <agence> <chiffre d'affaire>
    trié dans cet ordre. (on considère, évidemment, que le chiffre d'affaire a déjà été converti en une monnaie unique)

    Créez un programme qui calcule toutes les chiffres d'affaire intermédiaires (par continent, pays, province, canton, ville, agence) et le ainsi que le chiffre d'affaire global.
    Cela n'a rien, à mon sens, de très difficile, mais il y a pas mal de gens qui préfèreraient laisser cela à d'autres
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    screetch
    Invité(e)
    Par défaut
    a propos il y a quand meme pour le troisieme (la liste simplement chainée) une solution beaucoup plus elegante que les autres, et pas si intuitive que ca.

  10. #10
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par screetch Voir le message
    a propos il y a quand meme pour le troisieme (la liste simplement chainée) une solution beaucoup plus elegante que les autres, et pas si intuitive que ca.
    Bah perso comme solutions, je vois:

    utilisation de 6 pointeurs et itérer.
    une fonction récursive avec un accumulateur.

    La fonction récursive est plus jolie certes, mais pas plus performante pour autant, et si la liste est très longue (200k+ éléments), ça risque de pas l'faire.

  11. #11
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    utilisation de 6 pointeurs et itérer.
    2 suffisent.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #12
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    2 suffisent.
    Pas faux !

  13. #13
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Pourquoi six, c'était une faute de frappe?
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  14. #14
    screetch
    Invité(e)
    Par défaut
    je pense que c'etait pour garder en memoire les 6 dernier itérateurs, pour pouvoir supprimmer le second

  15. #15
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par screetch Voir le message
    je pense que c'etait pour garder en memoire les 6 dernier itérateurs, pour pouvoir supprimmer le second
    Oui voilà, mais les 4 itérateurs du milieu sont complètement inutiles.

    Je suis encore aux études, mais, si les exercices donnés en entretien sont comme ceux-là, je me réjouis

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Ma solution
    Citation Envoyé par screetch Voir le message
    un exercice qui peut donner des résultats interessants :
    Une solution que j'ai fait, il faut déclarer 2 listes, 6e et 4e, faire avancer liste de 5, faire avancer les 3 listes en même temps jusqu'à la fin, et finalement remplacer le suivant de 6e par 4e :

    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
     
    liste supprimer5emeFin(liste l) {
      liste sixieme, quartieme;
      sixieme = l;
      quatrieme = l.next.next;
      for(int i(0);i<5;i++) {
        l = l.next;
      }
      while(l.next != null) do {
        sixieme = sixieme.next;
        quatrieme = quatrieme.next;
        l = l.next;
      }
      sixieme.next = quatrieme;
      return sixieme;
    }
    Bon courage is vous avez entretien chez Sogeti High Tech, moi c'est la semaine prochaine

  17. #17
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Oh le déterrage. Mais ça se tient.
    Pour feu random_shuffle, je ne m'étais jamais posé la question de son implémentation.

    Sinon, en ce moment, j'aime beaucoup faire discuter sur le code du premier exo là: https://www.x-formation.com/wp-conte...Developer1.pdf -- mais à réserver à des gens qui affirment un minimum de niveau de connaissance sur le C++ je dirai. C'est plus un sujet de conception en C++, où du recul sur les notions d'invariant et de contrat est nécessaire pour correctement appréhender tous les problèmes avec ce code.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    Si t'as moins que 2 éléments, tu crash.
    La solution à ce truc c'est pas juste de prendre le next en incrémentant un compteur et agir quand il atteint 5 ?
    edit: si on peut pas la parcourir à reculons, la parcourir une première fois pour avoir sa taille, puis aller jusque taille-5.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  19. #19
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Sinon, en ce moment, j'aime beaucoup faire discuter sur le code du premier exo là: https://www.x-formation.com/wp-conte...Developer1.pdf -- mais à réserver à des gens qui affirment un minimum de niveau de connaissance sur le C++ je dirai. C'est plus un sujet de conception en C++, où du recul sur les notions d'invariant et de contrat est nécessaire pour correctement appréhender tous les problèmes avec ce code.
    Je suis un peu perplexe... En particulier, sur les bugs trouvés, j'ai du mal à écrire des cas de test puisqu'il s'agit de comportements indéfinis. Ou alors j'ai mal compris le terme "test case", et ce n'est pas à prendre au sens test unitaires automatisés, mais juste au sens cas qui font arriver le problème ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  20. #20
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est comme ça que je le prends: identifier les cas qui font tout planter. Ecrire des TU a un intérêt assez limité ici je trouve aussi.
    Après, que je présente le code, je pose en ça en question assez ouverte: "qu'est-ce que ceci vous inspire?" Et éventuellement je rajoute: "pourriez-vous m'identifier des utilisations du code qui feraient tout planter?" avant de demander comment l'améliorer.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Exercices sur test director
    Par dhakerelabed dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 01/04/2009, 18h20
  2. Bases de Tests/Exercices
    Par JOHN14 dans le forum Access
    Réponses: 3
    Dernier message: 10/12/2007, 10h11
  3. [XMLRAD] test de nullité
    Par Pm dans le forum XMLRAD
    Réponses: 5
    Dernier message: 29/11/2002, 10h57
  4. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26
  5. test collisions
    Par tatakinawa dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/06/2002, 06h03

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