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

Langages de programmation Discussion :

2008 & choix d'un langage à tout faire


Sujet :

Langages de programmation

  1. #61
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    souviron34: tu n'as pas la bonne réponse. J'ai ajouté tri dans ton fprintf(), et ta réponse est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    % ./a.out
    
    Le premier élément est le 65536 ième (32768.000000)
    %
    Le nombre recherché est 1533776805

    Edit: Je vois que tu l'as déjà réalisé toi-même

  2. #62
    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
    Pour garantir un peu plus de précision dans nos mesures de performance, il serait peut-être préférable d'aller jusqu'aux troisième nombre à la fois pentagonal hexagonal et triangle : 57722156241751 .
    Mon programme mets 5s pour le trouver.

    --
    Jedaï

  3. #63
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Pour garantir un peu plus de précision dans nos mesures de performance, il serait peut-être préférable d'aller jusqu'aux troisième nombre à la fois pentagonal hexagonal et triangle : 57722156241751 .
    Mon programme mets 5s pour le trouver.

    --
    Jedaï
    Il faudrait que je re-travaille le mien, car remplir 3 sets avec des nombres est long et prend beaucoup de mémoire.

  4. #64
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    je reviens..

    Non non c'est bien 65536...

    Bon le code est un petit peu plus long.. Mais c'est surtout le calcul.. 75 secondes...

    GnuVince : et alors ? avec un i de 65536, on a peut-être tri = 32768, mais on a tri = pent = hex..

  5. #65
    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
    Citation Envoyé par GnuVince Voir le message
    Il faudrait que je re-travaille le mien, car remplir 3 sets avec des nombres est long et prend beaucoup de mémoire.
    Oups, oui c'est vrai, j'oubliais... Bon, de toute façon ce n'est pas un concours de performance mais plutôt de rapidité de développement et de simplicité avec performance acceptable.

    --
    Jedaï

  6. #66
    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
    Citation Envoyé par souviron34 Voir le message
    je reviens..

    Non non c'est bien 65536...

    Bon le code est un petit peu plus long.. Mais c'est surtout le calcul.. 75 secondes...

    GnuVince : et alors ? avec un i de 65536, on a peut-être tri = 32768, mais on a tri = pent = hex..
    Non, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pents !! 65536 = 6442614785
    hexas !! 65536 = 8590131201
    tries !! 65536 = 2147581953
    Tu as dû te gourer dans tes formules.

    De toute façon la réponse donnée par GnuVince est la bonne, elle a été vérifiée par tous les membres du projets Euler, soit probablement plusieurs centaines de personnes (pour ce problème là).

    --
    Jedaï

  7. #67
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Oups, oui c'est vrai, j'oubliais... Bon, de toute façon ce n'est pas un concours de performance mais plutôt de rapidité de développement et de simplicité avec performance acceptable.

    --
    Jedaï
    Vite comme ça, je peux pas penser à une façon simple (i.e.: rapide à développer) qui pourrait être aussi rapide que celle en Haskell.

  8. #68
    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
    Je rappelle les formules :
    triangles :
    Tn = n * (n+1) / 2
    Tn = somme(k=1 à n)(k)

    pentagonaux :
    Pn = n * (3n - 1) / 2
    Pn = somme(k=0 à (n-1))(1+3k)

    hexagonaux :
    Hn = n * (2n-1)
    Hn = somme(k=0 à (n-1))(1+4k)

    J'utilise les sommes personnellement (plus rapide pour calculer la suite, y a que des additions), plus le fait que tous les nombres hexagonaux sont des nombres triangles.

    --
    Jedaï

  9. #69
    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 souviron34 Voir le message
    z'êtes dur de la feuille.. Si vous me lisiez correctement, je dis simplement que le théorème énoncé : "un développement rapide se fera plus avec Python qu'avec C" est faux...
    Ca va dépendre d'un certain nombre de facteurs, mais toutes autres choses étant égales par ailleurs (et parmis ces autres choses, je vais mettre la disponibilité des bibliothèques adaptées au problème: ce n'est pas parce que do_what_I_need() est disponible en X et pas en Y qu'en général le développement en X est plus rapide qu'en Y), l'affirmation est vraissemblablement vraie s'il n'y a pas trop de contraintes de performance (CPU, mémoire) sur le programme final et que la taille finale n'est pas trop grosse (il y a d'après mon expérience une taille ou un typage statique même aussi faible que celui du C apporte des avantages non négligeables -- je ne sais pas où se situe la transition et il y a d'autres facteurs que le nombre de lignes de code qui interviennent)

    Si maintenant tu a appris plusieurs langages, remplacez dans ma phrase "appris" par "le plus pratiqué"..
    Je pratique beaucoup plus le C et le C++ que le Python. Je maîtrise même beaucoup mieux le C et le C++ que le Python. Pourtant je pense que l'affirmation est vraie pour moi une fois tenu compte des remarques ci-dessus.

    Citation Envoyé par GnuVince Voir le message
    C'est pas seulement nos expériences personnelles, c'est également des choses que n'importe quelle personne peut remarquer elle même. Par exemple, la lecture d'une ligne complète. En Python on utilise la fonction raw_input() et c'est terminé.
    Voir ci-dessus et ci-dessus. La présence de do_what_I_need n'est pas pour moi un argument recevable dans la discussion.

    Citation Envoyé par souviron34 Voir le message
    illisible et incompréhensible pour un non spécialiste...
    Peu de langages sont compréhensibles pour un non initié. Même quand ils ont été conçus pour (cf COBOL). Et le C est loin de faire exception. Impossible de comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (*pd++ = *pc++) ;
    sans avoir appris le C ou un langage très proche.

    Citation Envoyé par gorgonite Voir le message
    [... bibliothèque perso ou standard]ce qui en fait est la vraie raison pour laquelle elles trouvent les langages "haut niveau" bien plus rapides
    J'ai déjà posé la question par ailleurs, en quoi par exemple Python est de plus haut niveau que C++ (pour C, j'ai des arguments en faveur de Python). Mais passons, le sujet mériterait un débat à lui tout seul.

    Je ne suis pas d'accord, ce n'est pas l'existance de bibliothèques plus adaptées qui rendent le développement dans un langage au typage dynamique plus rapide, c'est le typage dynamique combiné au fait que la plupart des langages à typage dynamique disposent d'un environnement où on peut développer de manière incrémentale beaucoup plus facilement (on va dire "interpréteur" pour rendre les choses claires mais c'est la boucle d'interaction qui m'intéresse plus que la technique d'implémentation qu'il y a derrière).

    Citation Envoyé par Jedai Voir le message
    Pas faux, néanmoins... Si tu fais ça, ta méthode n'est pas standardisée, et si quelqu'un d'autre doit maintenir ton code il va avoir des problèmes, ne parlons même pas du travail en groupe, non plus que des changements d'entreprises ou de postes/projets.
    A nouveau, la présence d'une bibliothèque (standard ou non) adaptée va rendre un langage plus adapté à un type de problème, mais ne va pas permettre l'affirmation beaucoup plus générale "le développement en X est plus rapide qu'en Y".

    En pratique (enfin d'après la mienne), si un domaine d'application est important pour une entreprise, on y trouve des bibliothèques plus adaptées à ce domaine que ce qui se trouve dans la bibliothèque standard de n'importe quel langage. Et ces bibliothèques seront de plus haut niveau, càd fourniront des abstractions plus proches du langage du domaine que du langage de l'informatique.

  10. #70
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Hop, je me lance en Python

    Code python : 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
    import time
     
    t1 = time.clock()
    penta = 1
    hexa = 1
    ipenta = 1
    jhexa = 1
     
    for nb in range(4):
        while penta != hexa:
            if penta < hexa:
                penta += 3 * ipenta + 1
                ipenta += 1
            else:
                hexa += 4 * jhexa + 1
                jhexa += 1
        print penta, hexa, ipenta, jhexa
        penta += 3 * ipenta +1
        ipenta += 1
     
    t2 = time.clock()
     
    print t2 - t1

    14,5 secondes sur un centrino 1,7 GHz

  11. #71
    Membre confirmé Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Points : 519
    Points
    519
    Par défaut
    J'ai tenté d'optimiser l''ecriture et voici un exemple de ce que je trouve dommage avec les réformes philosophiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for nb in range(4):
        while penta != hexa:
            penta<hexai?penta+=3*(ipenta++)+1:hexa+=4*(jhexa++)+1
        print penta, hexa, ipenta, jhexa
        penta += 3 * (ipenta++)+1
    PHP le permet et on gagnerait au moins 3 secondes ...

  12. #72
    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
    Mon ordinateur doit être particulièrement lent, ou alors c'est la version de Python (2.2.3), ton script mets 26s sur mon ordi, et cette version améliorée met 21s, je serais intéressé par le temps qu'elle met chez toi :
    Code Python : 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
    import time
     
    t1 = time.clock()
    penta = 1
    hexa = 1
    ipenta = 4
    jhexa = 5
     
    for nb in range(4):
        while penta != hexa:
            if penta < hexa:
                penta += ipenta
                ipenta += 3
            else:
                hexa += jhexa
                jhexa += 4
        print penta, hexa, ipenta, jhexa
        penta += ipenta
        ipenta += 3
     
    t2 = time.clock()
     
    print t2 - t1

    --
    Jedaï

  13. #73
    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
    Citation Envoyé par zulad Voir le message
    J'ai tenté d'optimiser l''ecriture et voici un exemple de ce que je trouve dommage avec les réformes philosophiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for nb in range(4):
        while penta != hexa:
            penta<hexai?penta+=3*(ipenta++)+1:hexa+=4*(jhexa++)+1
        print penta, hexa, ipenta, jhexa
        penta += 3 * (ipenta++)+1
    PHP le permet et on gagnerait au moins 3 secondes ...
    Explique-moi pourquoi on gagnerait 3s en utilisant l'opérateur ternaire (qui dans un programme raisonnable reste réservé aux assignements, merci) au lieu d'une conditionnelle ? On est pas en train de faire du Golf ! Et citer PHP comme un langage exemplaire....

    (à moins que tu ne considères qu'écrire 10 symboles de plus requière 3s ? Tu écris lentement au clavier dis moi)

    Et tu trouves sincèrement que ta version est aussi lisible je suppose ?

    --
    Jedaï

  14. #74
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Mon ordinateur doit être particulièrement lent, ou alors c'est la version de Python (2.2.3), ton script mets 26s sur mon ordi, et cette version améliorée met 21s, je serais intéressé par le temps qu'elle met chez toi :
    12.8 secondes (python 2.5.1 sous XP)

    Par contre, il ne manquerait pas le +1 lors de l'ajout à penta et à hexa ? Bon, on trouve exactement pareil pour ipenta et jhexa à 1 près mais y'a un truc qui m'échappe encore.
    Edit: Ok, j'ai tilté, le +1 est intégré à l'initialisation et forcément à chaque fois qu'on ajoute +ipenta.

  15. #75
    Membre confirmé Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Points : 519
    Points
    519
    Par défaut
    Et citer PHP comme un langage exemplaire....
    Ben oui, pourquoi ne pas prendre le meilleurs des languages pour en faire un encore meilleurs plutôt que de s'embarrasser des protocols...

  16. #76
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Guigui_: selon moi, la façon la plus simple et la plus rapide (mais gourmande en mémoire) est de mettre les pentas et les hexas dans deux sets et de faire l'intersection des deux.

  17. #77
    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
    Citation Envoyé par zulad Voir le message
    Ben oui, pourquoi ne pas prendre le meilleurs des languages pour en faire un encore meilleurs plutôt que de s'embarrasser des protocols...
    Donc d'après toi PHP est un bon langage ???

    Citation Envoyé par GnuVince
    Guigui_: selon moi, la façon la plus simple et la plus rapide (mais gourmande en mémoire) est de mettre les pentas et les hexas dans deux sets et de faire l'intersection des deux.
    Non, bien sûr que non, il est beaucoup plus rapide d'utiliser la méthode employée par Guigui_ (que j'emploie également bien que cela soit "caché" derrière une expression de haut niveau), les temps qu'il indique sont pour calculer le troisième nombre à la fois pentagonal, hexagonal (et triangle), pour calculer le second, même sur ma machine avec un Python antédiluvien, ça met dans les 50ms.

    --
    Jedaï

  18. #78
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Donc d'après toi PHP est un bon langage ???



    Non, bien sûr que non, il est beaucoup plus rapide d'utiliser la méthode employée par Guigui_ (que j'emploie également bien que cela soit "caché" derrière une expression de haut niveau), les temps qu'il indique sont pour calculer le troisième nombre à la fois pentagonal, hexagonal (et triangle), pour calculer le second, même sur ma machine avec un Python antédiluvien, ça met dans les 50ms.

    --
    Jedaï
    3e ou 4e? 3e est celui calculé par le programme dans sa spécification originale.

  19. #79
    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
    Citation Envoyé par GnuVince Voir le message
    3e ou 4e? 3e est celui calculé par le programme dans sa spécification originale.
    Essaie les programmes tu verras ! Non sérieusement j'oublie volontairement le 1 dans mes comptes (d'accord il est commun, mais c'est une réponse triviale), donc effectivement ce programme est sans doute au moins 10 fois plus rapide que le tien (sur la question du projet euler), d'un autre côté on ne peut pas dire qu'il exprime l'intention originelle aussi clairement que le tien. L'avantage à mon avis de Haskell, c'est qu'avec un peu de pratique, on peut souvent exprimer en terme de très haut niveau et traduisant directement l'intention initiale un programme très efficient une fois compilé.

    --
    Jedaï

  20. #80
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    OK pour le drop de 1.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Choix d'un langage, indépendamment de tout système
    Par fred2b dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 30/06/2007, 19h13
  2. Choix d'un langage SIMPLE pour faire des applis portables Linux <=> Windows
    Par Muesko dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 03/10/2006, 22h33
  3. Choix du langage pour faire un petit utilitaire
    Par jejam dans le forum Langages de programmation
    Réponses: 9
    Dernier message: 07/12/2005, 18h29
  4. Choix d'un langage de programmation
    Par Karim.1 dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 10/01/2005, 16h35
  5. choix d'un langage...
    Par ay_pepito dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 12/05/2004, 22h04

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