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

Langage Perl Discussion :

[langage] fonction aléatoire


Sujet :

Langage Perl

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    en tout cas, j'ai trouvé une solution mais bien sûre, je reste persuadée qu'il y a + simple!
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    #!/usr/bin/perl -w 
    use strict;
     
    sub Random
    {
    my $max =shift();
    my $nbr = int ( rand ($max)+1);
    return $nbr; 
    }
     
    my $seq ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    #my $seq = "GTTCCAAAAACAGTGGATAATTTTGTGGCCTTAGCTACAGGAGAGAAAGGATTTGGCTACAAAAACAGCAAATTCCATCGTGTAATCAAGGACTTCATGATCCAGGGCGGAGACTTCACCAGGGGAGATGGCACAGGAGGAAAGAGCATCTACGGTGAGCGCTTCCCCGATGAGAACTTCAAACTGAAGCACTACGGG"; 
    my $lengthsubseq = 16; 
    my $begin; 
    my $i; 
    my $part; 
    my $lg;
     
    for($i=1;$i<=3;$i++)
    {
     
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
     
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 17; 
    for($i=1;$i<=3;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 18; 
    for($i=1;$i<=2;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
    $lengthsubseq = 19; 
     
    for($i=1;$i<=6;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
    $lengthsubseq = 20; 
     
    for($i=1;$i<=5;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 21; 
    for($i=1;$i<=11;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 22; 
    for($i=1;$i<=14;$i++)
    {
     
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
     
    $part = substr($seq,$begin,$lengthsubseq); 
    print "$part\t$lg\t$i\n";
    }
    $lengthsubseq = 23; 
     
    for($i=1;$i<=23;$i++)
    {
     
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
     
    $part = substr($seq,$begin,$lengthsubseq); 
    print "$part\t$lg\t$i\n";
    }
    $lengthsubseq = 24; 
     
    for($i=1;$i<=40;$i++)
    {
     
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
     
    $part = substr($seq,$begin,$lengthsubseq); 
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 25; 
     
    for($i=1;$i<=28;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 26; 
    for($i=1;$i<=22;$i++)
    {
     
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 27; 
    for($i=1;$i<=13;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 28; 
    for($i=1;$i<=4;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
     
    $lengthsubseq = 29; 
    for($i=1;$i<=1;$i++)
    {
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    $part = substr($seq,$begin,$lengthsubseq); 
    $lg = length ($part);
    print "$part\t$lg\t$i\n";
    }
    En tout cas, merci à tous de votre aide!

  2. #22
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $begin = ( int( Random(length ($seq)))+1+$lengthsubseq)%( length ($seq)-$lengthsubseq);
    N'utilise pas cette ligne, les autres t'en ont donnes une mieux, c'est plus court et plus propre.

    Je pense que tu peux raccourcir ton script ... Fais des boucles imbriquees peut etre, ou alors une fonction qui prend comme arguments, la taille du motif et le nombre de sequence à extraire...

    Edite tes messages stp... et pense au tag résolu.
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  3. #23
    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
    Oui, bien sûr, mais je veux dire que dépendamment de l'algorithme utilisé pour rand(), il peut-être plus ou moins judicieux de changer de graîne à chaque rand(), il est bien connu que c'est une très mauvaise idée pour un certain nombre d'algorithmes random. Ce qui est certain c'est que l'usage de srand() qui était recommandé dans les anciennes versions de Perl est maintenant inutile, sinon néfaste.

    Sinon pour Kinethe :
    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
     
    #!/usr/bin/perl
    use strict;
     
    sub extract_rand_seq ($$$) {
        my @subseqs;
     
        foreach (1..$_[2]) {
          push @subseqs, substr( $_[0], int( rand( length($_[0]) - $_[1] ) ), $_[1]);
        }
        return @subseqs;
    }
     
    my @nbs = ( 3, 3, 2, 6, 5, 11, 14, 23, 40, 28, 22, 13, 14, 1 );
    my $start = 16;
    my $seq = "GTTCCAAAAACAGTGGATAATTTTGTGGCCTTAGCTACAGGAGAGAAAGGA".
        "TTTGGCTACAAAAACAGCAAATTCCATCGTGTAATCAAGGACTTCATGATCCAGGGCG".
        "GAGACTTCACCAGGGGAGATGGCACAGGAGGAAAGAGCATCTACGGTGAGCGCTTCCC".
        "CGATGAGAACTTCAAACTGAAGCACTACGGG";
     
    foreach my $i (0..$#nbs) {
        print $i + $start, " :\n";
        my @results = extract_rand_seq $seq, ($i + $start), $nbs[$i];
        foreach (0 .. $#results) {
            print (($_ + 1)."\t".$results[$_]."\n");  
        }
        print "\n";    
    }
    Un peu plus modulaire, n'est-ce pas ?

    --
    Jedaï

  4. #24
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Mais fallait pas donner de solutions .... Devient trop réactif ce forum... A quand un module "ralentisseur de solution" .

    Tchuss on peut clore ce post.
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  5. #25
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jedai
    Ce qui est certain c'est que l'usage de srand() qui était recommandé dans les anciennes versions de Perl est maintenant inutile, sinon néfaste.
    Jedaï, tu titilles pas mal ma curiosité !!

    Je programme actuellement un gros pavé à titre personnel. Le pavé, c'est du Perl, oki ?

    Etant sous GNU/Linux avec la v5.8.0 de Perl, chacun de mes scripts ayant besoin de l'aléatoire font appel à la fonction srand(), puis par rand() autant de fois que nécessaire.

    Tu m'as interpelé tout à l'heure en disant que sur les versions récentes de Perl, srand() était obsolète, voir néfaste. Et là, tu remets ça !

    J'ai été faire un tour sur www.perlfunc.com et ce qu'il est dit pour srand() côté Perl 5.8.0, c'est qu'il n'est plus nécessaire d'y faire appel au début du script, le premier appel à la fonction rand() se chargeant de faire le boulot. Par contre, sauf erreur de traduction, j'ai aussi compris que c'était surtout le srand() sans argument qui devenait fortement déconseillé alors que des srand() avec arguments un peu évolués (du genre de ceux qui calculent l'initialisation en fonction de l'âge du capitaine par exemple ) pouvaient fort bien continuer à être employés.

    As-tu un exemple concret qui me prouverait par A+B que le srand() est vraiment une cochonsté abyssale ???

    Pour info : je code un gros jeu genre Jeu de Rôles et certains de mes scripts usent et abusent du randomize, c'est que tu commences sérieusement à m'inquiéter là !!


  6. #26
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Pour moi y a rien de cochon dans le srand ;D Juste que si tu utilises toujours
    srand(lageducapitaine) (le capitaine Chatelain ?) et bien tu auras toujours la même suite pseudo aléatoire... Comme en C comme dans pas mal de langage.... Le fait d'utiliser srand(lageducapitaine+celledumouss)
    ca change rien ! nah !

    Sinon donc on choisit srand(lenombredesecondedepuis1970ouletempsunix) et ca marche ... donc autant laisser perl faire tout seul non ?

    Bref, srand c'est pas de la merde mais ca sert plus à rien
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  7. #27
    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
    Oh bof, de toute façon pour du jeu de rôle, c'est pas comme si c'était le codage des fichiers de la NSA, les joueurs vont pas faire du reverse engineering pour retrouver ton algo de random...

    Non, pour mon histoire de srand(), je ne suis pas sûr de la partie "néfaste" (sauf en cas de répétition trop fréquente), bien qu'il me semble l'avoir entendu dire, par contre je suis sûr du "inutile". Maintenant je ne sais pas si effectivement utiliser des valeurs "bizarres" n'est pas une bonne idée, bien que en fait comme je te l'ai dit, pour ton application, ça ne se ressentira pas du tout, et il faudrait vraiment que tu sois sur du code critique pour que ça ait une quelconque importance (de toute façon vu que ton code et le code de la fonction rand() de Perl sont accessible...).

    --
    Jedaï

  8. #28
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jedai
    ... (de toute façon vu que ton code et le code de la fonction rand() de Perl sont accessible...).
    Ai-je dis que mon code serait accessible ?

    Non non, il reste en local.

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    Merci bcp a tous et notament à Jedai pour le code entier que tu m'as donné "il marche à merveilles".
    Choupi , je suis d'accord avec toi qd tu dit que c'est un forum d'entre-aide et dc qu'on ne doit pas donner les solutions, mais moi je débute et comme vous avez pu le voir j'ai réussi à coder une fonction (qui marche grâve à vos conseil) mais qd même il "n'y a pas photo" avec celle de Jedai et grace à ce que j'ai codé et surtout la "correction" de jedai, j'ai appris bcp!

    dc merci !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Langage] Fonction amie d'une autre fonction
    Par Klaim dans le forum Langage
    Réponses: 7
    Dernier message: 09/11/2008, 04h35
  2. [langage] fonction pour fichier ou bien dossier
    Par moniatn dans le forum Langage
    Réponses: 6
    Dernier message: 26/10/2006, 01h39
  3. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  4. [langage] fonction sleep + probleme fenetre dos
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2003, 19h46
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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