Salut j'étais entrain de coder une fonction et je me demandais par pur flemmardise si on pouvait stocké deux entiers dans un seul entier puis faire le chemin inverse pour retrouver les deux entiers.
En gros j'ai une fonction qui prend en paramètre une chaine de caractère, et qui doit me renvoyer des informations sur cette chaine : nombre de mot etc.
ce que j'aimerais faire si c'est possible c'est stocker ces info dans un seul entier ca m'eviterait de faire une structure ou de renvoyer un tableau.
exemple ma fonction trouve que dans tel chaine il y a 20 caractères dont 3 virgule est ce qu'il existe une méthode pour fusionner ces deux nombres ici 20 et 3 (mais je suis pas sensé les connaitre a l'avance) en un seul nombre de tel manière que je puisse retrouver ces deux nombres quel qu'ils soient.
je suppose que plus il y a de restrictions plus ça doit être faisable donc disons 2 nombres entier strictement positif.
Bonjour
il faudrait vraiment plus de restrictions : genre si tu sais que ces nombres sont les deux entre 0 et 99, tu peux par exemple pour 20 et 3 coder 2003 : tu sais que les centaines donnent le premier, et les deux derniers chiffres le deuxième
ouai c'est vrai que si on sait que les nombres vont être entre deux valeurs on peut faire comme ça mais si les nombres peuvent aller de 0 a l'infinie c'est impossible ?
ça revient à chercher une bijection entre et
, ton truc ...
quelque chose comme par exemple
(à partir de n on commence par diviser n+1 le plus de fois possible par 2 : le nombre de fois est y, et le quotient impair final est 2x+1, exemple avec 20 et 3 : on code par 327
en repartant de 327 : donc x = 20 et y = 3
a vue d'oeil c'est exactement ce que je cherchais merci. est ce que c'est possible pour n nombre ? genre (x, y, z, ...) -> n et f(n) = ...
ou alors en plusieurs temps : , etc
mais pareil, est-ce rentable ? récupérer x,y et z à partir du résultat va être rapidement fastidieux
ouai en effet ça n'a pas l'air rentable plus on a de nombre plus ça devient complexe a mois que ce soit plus rapide de faire comme ça que de déclarer un tableau d'int mais j'en doute après çà peut toujours servir.
De retour,
Il m'est arrivé d'utiliser la décimale pour stocker 2 nombres à la fois.
Dans le problème des q sacs de pièces d'or on utilise aussi les puissances de 2;
La décomposition est unique,
Alain
Exactement,
Il n'est pas donc pas possible d'avoir deux entiers de
même valeur.
Voir puissances de 3 avec aj [0,1,2]
Alain
j'ose à peine imaginer en quelle base il va devoir travailler s'il peut avoir n'importe quels entiers !
Bonsoir,
Ton sujet est intéressant, l'idée est là mais le sujet nécessite plus d'informations.
Je vais essayer de t'expliquer cela avec le peu d'informations que tu as fournis.
Prenons les hypothèses suivantes concernant les paramètres (,
,
sont simplement des abréviations d'écriture):
- - Nombre de caractère (contient 200 caractères), ceci veut dire que ton compteur de caractères est limité à 200 caractères au maximum. Dans ce cas nous sommes obligés de coder de Nombre de caractère sur 8bits (nombre de valeurs possible = 256 ; la valeur maximale est 255, car 0 est aussi une valeur possible) ce qui bon pour notre cas.
Par exemple : 160 caractères correspond a une écriture binaire 10100000
- - Nombre de points de ponctuation (Avec un maximum de 30 points) dans ce cas, NBP sera codé sur 5 bits ce qui est suffisant pour notre cas car (nombre de valeurs possible = 32 ; la valeur maximale est 31, car 0 est aussi une valeur possible)
Par exemple : 27 points correspond a une écriture binaire 11011
- - Nombre de lignes (Avec un maximum de 7 lignes) dans ce cas, NBL sera codé sur 3 bits ce qui est suffisant pour notre cas car (nombre de valeurs possible = 8 ; la valeur maximale est 7, car 0 est aussi une valeur possible)
Par exemple : 5 lignes correspond a une écriture binaire 101
Nous aurons donc notre paramètre qui vaudrait
Paramètre = 1010000011011101 (41181 en décimal)
Au niveau du programme, le paramètre est codé sur 16bits, donc ce paramètre pourrait être déclaré comme integer ou short. Mais on peut aussi le coder sur 32 ou 64 bits (Dans ce cas il faut s'assurer de cela au niveau de la capacité de la machine et processeur.
Cette façon de procéder a un avantage ainsi que des inconvénients, généralement elle est utilisée quand il y a beaucoup de donnée car dans ce cas là la moindre économie de bits est importante. Son inconvénients, c'est le traitement car pour récupérer tes données par exemple NBC, NBP et NBL, il faut écrire quelques routines (opérateurs bits à bits, filtres, …) pour l'extraction et de combinaison des données.
Avec la méthode classique struct ou class, l'accès est beaucoup plus facile, ne nécessite pas de routines au niveau binaire, mais on perd des bits inutilisés par-ci et par-là.
Par ailleurs concernant le fait de grouper deux nombres dans un seul paramètre, c'est possible mais il faudrait voir la taille maximale de ces nombres. Ainsi que celle du paramètre.
Razes, encore une fois tu réponds à côté de la question .... il faudrait vraiment lire les posts ....
salut
soit à coder m et n en un seul nombre
posons et
k est le nombre de chiffre de n (peut-être considérer )
alors et
il n'y a alors plus qu'une seule information puisque les applications (m, n) --> x et x --> (m, n) permettent à chaque fois de trouver k
mais je ne pense pas que ce soit pertinent en nombres d'opérations effectuées ...
de plus il ne faut pas que les nombres m et n ne soient trop grands sinon il apparaitra des arrondis
ce me semble-t-il ...
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :