Test de recrutement Google.Company - C/C++

Voir le sujet précédent Voir le sujet suivant Aller en bas

Test de recrutement Google.Company - C/C++

Message par nabiL le Mer 14 Nov - 16:46

TEST DE NIVEAU EN C/C++ DUREE=30min

Please complete answers to the following questions without assistance, in consideration for the Software Engineer, EU Headquarters position. There is usually not a single “right” answer. Please return the completed questionnaire to your Recruiter within half an hour.


Q1: The following program should print B when called with no arguments and C otherwise. Why is it not working?

Code:
    #include <iostream>

    using namespace std;

    struct A { };

    struct B : A
    {
        ~B() { cout << "B"; }
    };

    struct C : A
    {
        ~C() { cout << "C"; }
    };

    int main(int argc, char **)
    {
        A *a;
        if(argc==1) a = new B();
        else a = new C();
        cout << "Object: ";
        delete a;
        cout << endl;
    }



Q2: What's wrong with the following snippets of code, if anything?

Q2a:
Code:
    #define BAD_REQ "/status"

    bool checkRequest(const char * request) {
      if (request == BAD_REQ) {
        return false;
      }
      return true;
    }


Q2b:
Code:
    int main() {
      char *x = "hello world\n";
      x[1] = 'a';
      printf(x);   
    }


Q3: What does this code do? What could it be useful for?

Code:
    for (n->Next = n->Left; n != NULL; n = n->Next) {
        n->Left->Next = n->Right;
        n->Right->Next = n->Next->Left;
    }
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: Test de recrutement Google.Company - C/C++

Message par manianis le Jeu 15 Nov - 18:18

Q1 :
Vous utilisez un destructeur dans une structure struct. Il faudra utilser la mot clé class.

Q2a:
On ne compare pas deux chaines de cette manières.
On remplacera la condition par strcmp(request, BAD_REQ) == 0)

Q2b:
x est bien un pointeur sur un caractère ou une séquence de caractères qui n'a pas été allouée.

Q3:
Il me semble que vous êtes entrain de parcourir une branche d'un arbre binaire.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: Test de recrutement Google.Company - C/C++

Message par nabiL le Ven 16 Nov - 0:16

[quote="manianis"]Q1 :
Vous utilisez un destructeur dans une structure struct. Il faudra utilser la mot clé class.

Le destructeur devrait être déclarée VIRTUAL parce qu'il va être redéfini dans les classes dérivées.


manianis a écrit:Q2a:
On ne compare pas deux chaines de cette manières.
On remplacera la condition par strcmp(request, BAD_REQ) == 0)

Je crois que c'est la seule erreur dans cette question.

manianis a écrit:Q2b:
x est bien un pointeur sur un caractère ou une séquence de caractères qui n'a pas été allouée.


char *x = "hello world\n"; ==> l'allocation est automatique ici. Le compilateur fera automatiquement x=(char*)malloc(...)

printf(x); ==> Elle est correcte: puisque printf exige que les paramètres d'entrée soient des CONST CHAR* ce qui est le cas ici.

x[1] = 'a'; ==> c'est la seule erreur dans cette question. D'ailleurs, j'ai oublié comment on peut modifier un caractère dans une chaine de caractère!scratch scratch scratch

manianis a écrit:Q3:
Il me semble que vous êtes entrain de parcourir une branche d'un arbre binaire.


Je crois que c'est un arbre au moins 3-R (càd chaque noeud possède 3 fils)
Ici, les trois fils de chaque noeud sont: LEFT, RIGHT et NEXT.
Je crois que cet boucle transforme un arbre 3-R en un arbre binaire tels que les fils gauches et droits peuvent communiquer entre eux à travers le pointeur NEXT. càd le NEXT d'un du fils GAUCHE et le fils DROITE et vice versa.

Merci manianis pour les explications.
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: Test de recrutement Google.Company - C/C++

Message par manianis le Ven 16 Nov - 9:20

Non, le compilateur ne fait pas l'allocation automatique de x. Et
x[1] = 'a';
est correcte.

Si tu es un développeur Java ce que tu dis est vrai car les chaines de Java sont immutables alors que celles de C/C++ ne le sont pas et on peut accéder à n'importe quel caractères en Lecture/Ecriture.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: Test de recrutement Google.Company - C/C++

Message par nabiL le Ven 16 Nov - 9:45

manianis a écrit:Non, le compilateur ne fait pas l'allocation automatique de x. Et
x[1] = 'a';
est correcte.

Si tu es un développeur Java ce que tu dis est vrai car les chaines de Java sont immutables alors que celles de C/C++ ne le sont pas et on peut accéder à n'importe quel caractères en Lecture/Ecriture.


J'ai testé le code source sur le compilateur C/C++ de Microsoft Visual C++ version 6.0. Et c'est tout à fait le contraire de ce que vous avez dit manianis Smile Je crois que ça dépend du compilateur, et dans ce cas, on devrait avoir deux compilateurs différents moi et toi. Sinon c'est absurde...
C'est quel compilateur le tien?
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: Test de recrutement Google.Company - C/C++

Message par informix le Ven 16 Nov - 16:08

Le dernier exercice est très difficile pour moins que 30min... !!!Sad
informix, Ecole d'ingénieurs
Les passions font vivre l'Homme; sa sagesse le fait seulement durer.

informix
Membre fondamental
Membre fondamental

Messages : 350
Inscrit le : 19 Mar 2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum