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

Algorithmes et structures de données Discussion :

Voici du code: devinez l'algo


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut Voici du code: devinez l'algo
    En guise de digestif, voici un petit code (C++ basique).
    Que fait-il?
    Est-il fiable?
    Quelle est sa complexité?
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    void Loops(int p,int l)
    {
    	int *a=new int[p];
    	int i=0;
    	a[0]=0;
    	while(1)
    	{
    		if (a[i]==l)
    		{
    			i--;
    			if (i<0)
    				break;
    			a[i]++;
    		}
    		else if (i==p-1)
    		{
    			for(int c=0;c<p;c++)
    				cout << a[c] << ' ';
    			cout << endl;
    			a[i]++;
    		}
    		else
    		{
    			i++;
    			a[i]=0;
    		}
    	}
    	delete [] a;
    }
     
     
    int main(int argc, char* argv[])
    {
    Loops(4,3);
    return 0;
    }
    Voilà, c'est juste un petit passe-temps pour ceux qui ont 5 minutes à tuer, comme attendre une compil par exemple, etc
      0  0

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    C'est moi ou c'est un devoir à faire ? car ça y ressemble ???
      0  0

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    J'envisage de créer un cours (en option) de reverse engineering à la fac
    Et ceci est le genre de petit exercice que je proposerais bien

    Sérieusement, c'est juste un jeu. Je vous donne un indice: regardez le nom de la fonction...
      0  0

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    J'espère que ce n'est pas ça... Après avoir jeté un coup d'oeil aux threads précédent de camboui je pense toutefois que ce n'est pas des plus probables, il doit probablement être capable de faire cela tout seul.
    De toute façon, c'est amusant comme idée si on a du temps à perdre, et il vaut mieux attendre quelques heures avant de donner la solution, je propose que ceux qui ont trouvé s'abstiennent de la révéler et que celui qui a posé la question donne la réponse au bout d'une journée. Ce qui incidemment évitera qu'on pose des questions de devoir.
    Je suis pour personellement, si on utilise une formule de ce genre.

    --
    Jedaï
      0  0

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    En même temps, le but du forum n'est pas de faire des jeux, la taverne est là pour ça...
      0  0

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Merci la suspicion...

    Après avoir tenté d'entamer une discussion sans succès sur les cartes auto-organisatrices (merci Jedai d'avoir jeter un coup d'oeil à mon "histoire" sur le forum), je m'étais dit que je lancerais une discussion capable d'obtenir un meilleur suffrage . Il fallait donc que ce soit simple afin de permettre à tous d'y participer .

    Mais bon, il semble que ce ne soit pas du goût de notre redac/admin bien aimé...
    En jetant un oeil sur la taverne, où on parle de tout et n'importe quoi, je pense que mon intervention convient mieux ici. C'est quand même de l'algo pure, non?

    Puisque ce thread, dont la problématique d'origine est concrète et pratique, ne plait pas à être présentée sur un ton ludique... ben... euh... voilà, je suis vexé maintenant.

    J'ai donc commis une erreur et je corrige: ceci n'est pas un jeu. Vous allez d'ailleurs tous réfléchir et suer des gouttes ce soir

    Je donnerai les réponses demain. Vous verrez alors que le petit code ci-avant répond à un problème bien concret.
      0  0

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ben la réponse c'est... :o
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
      0  0

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Mon petit problème au départ était celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(a1=0;a1<limit;a1++)
    	for(a2=0;a2<limit;a2++)
    		...
    		for(an=0;an<limit;an++)
    		{
    		...
    		}
    ou comment coder un nombre variable de boucles imbriquées.
      0  0

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Certes mais quel interêt Camboui quand la fonction concernée renvoie systematiquement 0
    return 0;

    A moins d'être un fan de la conso 100% CPU
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
      0  0

  10. #10
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut Re: Voici du code: devinez l'algo
    Citation Envoyé par camboui
    En guise de digestif, voici un petit code (C++ basique).
    Que fait-il?
    Rien. Ton programme n'est pas compilable tel quel (manque les include). Le fait de passer des argument à main() ne sert à rien vu que tu ne t'en sers pas.
    Citation Envoyé par camboui
    Est-il fiable?
    Vu qu'il ne compile pas... Oui

    Citation Envoyé par camboui
    Voilà, c'est juste un petit passe-temps pour ceux qui ont 5 minutes à tuer, comme attendre une compil par exemple, etc
    Voui, mais je rejoins l'avis de Gael Donat, ca a plus sa place sur la taverne, et ce d'autant plus qu'il s'agit d'une analyse de code C++ et non d'une analyse d'algo.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum
      0  0

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Vous êtes bien durs... :o
    En tout cas, ce code affiche l'ensemble des chiffres de longueur p dans la base l dans l'ordre croissant (je précise que je ne l'ai pas compilé pour trouver ça), ce qui démontre qu'il répond bien au problème originel de camboui puisqu'il suffit d'insérer son code à la place du "cout" pour qu'effectivement il soit effectué comme s'il se retrouvait dans les boucles imbriqués.
    Personellement, j'aurais plutôt utilisé une fonction récursive pour faire ça mais bon...

    (on ne peut pas le compiler donc il ne fait rien ? Franchement c'est ridicule comme argument... même si c'est du C++, on est encore dans le forum algo, et de toute façon le rajout à faire pour qu'il marche est si minime !)

    --
    Jedaï
      0  0

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Merci Jedaï.

    J'ai failli répondre à leur pragmatisme grotesque, mais ils sont assez grands pour sortir de leur trou tous seuls

    Même si c'est du C++, il fallait lire le code comme du metalangage.
    Je n'ai jamais demandé de copier/coller dans votre EDI préféré pour compiler/tricher, attitude du paresseux qui ne veut pas réfléchir 2 secondes...

    Retour au schmilblic, la complexité de la fonction Loops() est O(l^p), on ne l'a pas encore dit je crois 8).

    Alors, bien sûr, une fonction récursive est triviale pour coder un nombre variable de boucles imbriquées. Mais le code aurait été trop facile à interpréter, ce qui retirait de l'intérêt au thread. De plus, il était intéressant de poser la question à l'envers, c'est-à-dire de proposer une solution un peu réfléchie pour en deviner la question.
    Accessoirement, je pense que le code proposé est plus performant qu'une fonction récursive.

    Ensuite, la fiabilité. Le code est-il fiable? (on regarde la fonction Loops() bien sûr; j'aurais du m'abstenir de mettre le "main()", vos réactions sur "#include", "return 0" et la non utilisation de "argc" et "argv" m'ont laissé pantois...)
    Il est fiable si p et l ne sont pas négatifs... et pas trop grands.
    Un simple appel du genre Loops(20,20) est de nature à mettre à mal le MTBF de l'humanité, que dis-je, du système solaire, de l'univers! Même en suposant que chaque "cout <<" s'éxecute en une nanoseconde. S'il s'exécute en une atoseconde ( ato=1e-18 ), l'univers verra peut-être bien la fin de l'exécution à son crépuscule (si mes calculs sont justes )

    En bref, je trouvais ce code simple intéressant à plusieurs titres. Algorithmiquement d'abord, pour comprendre ce qu'il fait; ce n'est pas évident au premier coup d'oeil. Et puis la fiabilité qui va de pair avec la complexité. Ce n'est pas parce que le code s'achève avec succès pour toutes valeurs positives de p et l qu'on peut considérer qu'il est fiable sans réfléchir un petit peu aux valeurs des paramètres p et l de Loops().
    Dommage que tout le monde n'ait pas compris ma démarche... Et merci de m'avoir pris pour un étudiant égaré, cela me rajeunit de 20 ans!
      0  0

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tant qu'à faire de la metaprog en C++ autant utiliser les templates, au moins ça ne pénalisera pas les performances.
      0  0

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    si on suit l'execution du script
    creation d'un tableau a de taille p // si p=0 erreur
    i =0
    a[0]=0 // reste du tableau indefini
    while(1)//boucle sans fin
    {
    if(a[i]==l)//si l = 0 alors on rentre dedans a la premiere execution car i=0
    i--; //donc i=-1 a la premier execution
    if(i<0)break;//donc le script s'arrete et ne fait rien
    //suite sans interet

    donc il faut rajouter comme condition pour un code robuste p!=0 et l!=0
      0  0

  15. #15
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Mais le code aurait été trop facile à interpréter
    Voila qui nous prépare une belle génération de programmeurs, si on leur apprend à écrire du code qui ne soit pas trop facile à interpréter
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP
      0  0

  16. #16
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par Médiat
    Mais le code aurait été trop facile à interpréter
    Voila qui nous prépare une belle génération de programmeurs, si on leur apprend à écrire du code qui ne soit pas trop facile à interpréter
    On ne t'a jamais parle de protection de l'emploi ?
      0  0

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Bon allez fini la récré.
      0  0

Discussions similaires

  1. voici le code
    Par chikoo dans le forum Débuter
    Réponses: 3
    Dernier message: 20/01/2011, 14h08
  2. Relecture de code pour problème algo
    Par ichtusrem dans le forum C++
    Réponses: 11
    Dernier message: 11/12/2010, 11h09
  3. Réponses: 0
    Dernier message: 22/08/2010, 14h52
  4. Convertir 2000 lignes de code en un algo
    Par dj_f. dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 31/01/2008, 13h54

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