Fonction qui associe un tableau a une variable

michel.leonard
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 1 Juin 2010

Fonction qui associe un tableau a une variable

Message le Jeu Juin 10, 2010 3:08

Bonjour, je vais vous exposer mon problème, il est déjà solutionné; mais de manière très malsaine (en terme de code).
C'est pourquoi je me disais que l'expérience de certains d'entre vous pourrais m'aider.

Problème :

j'ai une liste de nombres commençant à 1 et se terminant à k, k est toujours supérieur à 500 , cela signifie que ma liste comporte toujours plus de 500 nombres.

je cherche à créer une fonction qui à tout n ( n est un entier compris entre 1 et k ) associe un tableau comme suit

Code: Tout sélectionner
if (($n > 5)and(n < (k-4)))
array ([n-5],[n-4],[n-3],[n-2],[n-1],n,[n+1],[n+2],[n+3],[n+4],[n+5])


le problème est si n < 5 ou si n > (k-4)
car la je dois créer des conditions pour chacun d'entre ces nombres du type : if n = 1 , if n = 2 ... if n = k if n= (k-1)...
si n = 2 par exemple , ils renvoyer un tableau de type :

Code: Tout sélectionner
array (k-3,k-2,k-1,k,1,2,3,4,5,6,7)


vous comprenez ? si n est trop petit, il dois aller chercher a la fin (vers k) , et si n est trop grand , il dois aller au début (vers 1)

donc, me direz vous c'est pas impossible de faire toutes les conditions , il y en à que 10... oui mais c'est ce que j'ai déja fait, cela fonctionne bien ma fonction connexe($n) restitue bien le bon tableau.
Mais si je veux un nombre connexe un peu plus "éloigné" de n je dois faire ceci :
Code: Tout sélectionner
$nombre = connexe($n) ; $nombre = connexe( $nombre[10]) ; $nombre = connexe( $nombre[10]) etc...

plus je veux m'éloigner de n , plus la fonction s'appelle elle même... Mais c'est gènant... voyez vous mieux ?

merci de m'aider si vous le pouvez
cordialement, mike.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Fonction qui associe un tableau a une variable

Message le Jeu Juin 10, 2010 14:13

Je te le fais en pseudo-code...

Code: Tout sélectionner
fonction intervalle(milieu,ecart,max)
{
tableau a;
pour chaque i de milieu-ecart à milieu+ecart
{
   push tableau,((i-1)%max)+1;
}
return tableau
}


Sinon tu peux le faire en utilisant range avec 3 cas de figure, genre:
Code: Tout sélectionner
fonction intervalle(milieu,ecart,max)
{
si milieu < ecart alors return range(max+milieu-ecart,max),range(1,milieu+ecart)
sinon si milieu > max - ecart alors return range(milieu-ecart,max),range(1,(milieu+ecart)%max)
sinon return range(milieu-ecart,milieu+ecart);
}


Il y a probablement des offsets +-1 à ajouter à droite à gauche (parce que tu commences à 1 au lieu de 0), j'ai un peu la flemme de réfléchir où là :-)

Jacques.
Dernière édition par jcaron le Jeu Juin 10, 2010 14:46, édité 1 fois.


gg00xiv
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 43
Inscription: 10 Juin 2010

Re: Fonction qui associe un tableau a une variable

Message le Jeu Juin 10, 2010 14:28

En PHP :

Code: Tout sélectionner
function get_tableau($n, $k)
{
      $tableau = array();
      for($i=$n-5; $i<=$n+5; $i++)
           $tableau[$i-$n+5] = ($i + $k) % ($k + 1);
}


Exemple avec cet appel : get_tableau(2, 15)
Code: Tout sélectionner
$tableau[0] = (-3 + 15) % 16; // == 12 % 16 == 12
$tableau[1] = (-2 + 15) % 16; // == 13 % 16 == 13
$tableau[2] = (-1 + 15) % 16; // == 14 % 16 == 14
$tableau[3] = (0 + 15) % 16; // == 15 % 16 == 15
$tableau[4] = (1 + 15) % 16; // == 16 % 16 == 0
$tableau[5] = (2 + 15) % 16; // == 17 % 16 == 1 (<- n)
$tableau[6] = (3 + 15) % 16; // == 18 % 16 == 2
$tableau[7] = (4 + 15) % 16; // == 19 % 16 == 3
$tableau[8] = (5 + 15) % 16; // == 20 % 16 == 4
$tableau[9] = (6 + 15) % 16; // == 21 % 16 == 5
$tableau[10] = (7 + 15) % 16; // == 22 % 16 == 6

michel.leonard
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 1 Juin 2010

Re: Fonction qui associe un tableau a une variable

Message le Jeu Juin 10, 2010 15:01

gg00xiv a écrit:En PHP :

Code: Tout sélectionner
function get_tableau($n, $k)
{
      $tableau = array();
      for($i=$n-5; $i<=$n+5; $i++)
           $tableau[$i-$n+5] = ($i + $k) % ($k + 1);
}


Exemple avec cet appel : get_tableau(2, 15)
Code: Tout sélectionner
$tableau[0] = (-3 + 15) % 16; // == 12 % 16 == 12
$tableau[1] = (-2 + 15) % 16; // == 13 % 16 == 13
$tableau[2] = (-1 + 15) % 16; // == 14 % 16 == 14
$tableau[3] = (0 + 15) % 16; // == 15 % 16 == 15
$tableau[4] = (1 + 15) % 16; // == 16 % 16 == 0
$tableau[5] = (2 + 15) % 16; // == 17 % 16 == 1 (<- n)
$tableau[6] = (3 + 15) % 16; // == 18 % 16 == 2
$tableau[7] = (4 + 15) % 16; // == 19 % 16 == 3
$tableau[8] = (5 + 15) % 16; // == 20 % 16 == 4
$tableau[9] = (6 + 15) % 16; // == 21 % 16 == 5
$tableau[10] = (7 + 15) % 16; // == 22 % 16 == 6



mais oui, les modulos... j'avais pas pensé, merci de me mettre sur la piste, tout va devenir plus simple là, je vais étudier ca, merci pour la piste et pour le coup de pouce !!


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités