Page 2 sur 6

Re: Besoin d'aide pour création base 10 amélioré

Publié : sam. 08/nov./2014 21:51
par Lord Nelson
Personne peut m'aider svp, j'y arrive pas :(
C'est pas comme la base 2, 3, 4, ....., c'est différent là.

Re: Bin et BinVal maison (Bric-à-Brac Lord Nelson)

Publié : dim. 09/nov./2014 3:51
par poshu
Ça n'a pas vraiment sa place dans Annonces, plutôt dans Trucs et Astuces (voir même dans Débutant, parce que c'est pas très perf et pas très utile)

Re: Bric-à-Brac de Lord Nelson

Publié : dim. 09/nov./2014 11:39
par Lord Nelson
C'est pas moi qui l'es mis ici, c'est le modo :?

Re: Bric-à-Brac de Lord Nelson

Publié : dim. 09/nov./2014 11:43
par TazNormand
J'ai fusionné tes messages (comme je te l'avais conseillé de le faire), et déplacé le message unique dans Débutants.

Re: Bric-à-Brac de Lord Nelson

Publié : dim. 09/nov./2014 21:23
par Demivec
Lord Nelson a écrit :Comment je peut optimiser se code svp :)
Ici :) :

Code : Tout sélectionner

Procedure.s Base10VersBase10Ex(Nombre.q) ;-9223372036854775807 <= quad <= 9223372036854775808  vers  0 <= Nombre$ <= "8112260925743664697"
  Static subtrahend$ = "111111111111111111111"
  Protected chiffre, subtrahend, longueur, NombreSortie.q, NombreTemp$, Nombre$
  
  NombreTemp$ = StrU(Nombre)
  longueur = Len(NombreTemp$)
  
  chiffre = Val(Right(NombreTemp$, 1))
  Nombre = Val(Left(NombreTemp$, longueur - 1))
  
  If longueur > 1
    longueur - 1
  EndIf
  
  subtrahend = Val(Left(subtrahend$, longueur))

  If Nombre >= subtrahend
    NombreSortie = (Nombre - subtrahend) * 10 + chiffre
    Nombre$ = RSet(Str(NombreSortie), longueur + 1, "0")
  Else
    NombreSortie = (Nombre - (subtrahend / 10)) * 10 + chiffre
    Nombre$ = Str(NombreSortie)
  EndIf
  
  ProcedureReturn Nombre$
EndProcedure

Procedure.q ValBase10Ex(Nombre$) ;0 <= Nombre$ <= "8112260925743664697"  vers  -9223372036854775808 <= quad <= 9223372036854775807
  Static addend$ = "111111111111111111110"
  Protected addend, longueur, NombreSortie.q, Nombre.q
                   
  Nombre = Val(Nombre$)
  longueur = Len(Nombre$)
  addend = Val(Right(addend$, longueur))
  
  NombreSortie = Nombre + addend
    
  ProcedureReturn NombreSortie
EndProcedure

Define i, Nombre, Nombre$
For i = 0 To 1110
  Nombre$ = Base10VersBase10Ex(i)
  Nombre = ValBase10Ex(Nombre$)
  Debug "Nombre Originale = " + Str(i) + ", Nombre compresser = " + Nombre$ + ", Nombre Originale = " + Nombre
Next

@Éditer: Maintenant utilise gamme complète de quad

Re: Bric-à-Brac de Lord Nelson

Publié : dim. 09/nov./2014 23:54
par Lord Nelson
Bonjour Demivec :)

Milles merci pour se super code encore une fois :D
Je dois avouer que vous me laisser vraiment sur le Q, vous être vraiment très fort :wink:
Cordialement.

Edit: Sa ne fonctionne pas avec 9999999999999999999... 18446744073709551615
Est-ce normale ?

Re: Bric-à-Brac de Lord Nelson

Publié : lun. 10/nov./2014 19:28
par Ollivier
Nelson a écrit :Edit: Sa ne fonctionne pas avec 9999999999999999999... 18446744073709551615
Est-ce normale ?
Si tu as le temps, débogue son programme.
Tu le reprends, ligne par ligne pour comprendre ce que Demivec a cogité. Il a dû allouer du temps pour t'aider. Alloue-y le tiens.

N'oublie point aussi ce que je t'ai dit pour l'addition de deux nombres stockés chacun dans une chaîne: c'est la porte qui te mène à bon nombre d'applications opératoires.
C'est la seule solution pour arriver à tes fins. Si tu en trouves une autre, elle te conduira à l'échec.

1) Il y a longtemps, la lumière était considéré comme un fluide trouble et diffus.

2) Puis quelqu'un s'est élevé en affirmant qu'il s'agissait d'un ensemble de rayons parfaitement rectilignes.

3) Puis quelques siècles plus tard, quelqu'un d'autre s'est élevé pour dire que la lumière pouvait courber.

Plusieurs siècles séparent ces étapes. Un jour peut-être (dans longtemps, en tout cas) dira-t-on que la lumière n'est pas faite de rayons, mais de cordes parfaitement immobiles qui ne font que passer un message énergétique directionnel. (j'ai pris à gauche? je donne à droite... J'ai pris en haut? je donne en bas... Etc...). Il y a une chance sur 10 puissance 500 de valider cette hypothèse.

Un jour bien lointain à venir dira-t-on peut-être que ces cordes sont loin d'être immobiles. Que toutes ces "boucles" incertaines ne font qu'une, donc qu'elles se moquent de l'endroit où elles campent puisqu'elles seront, comme elles ont été, celles d'à côté, comme celles à l'autre bout de l'Univers.

Tu as fait un sujet "bric-à-brac". C'est très bien. N'hésite pas à imaginer ce code d'addition de nombres stockées dans des chaînes. Elles te permettent de les contrôler visuellement, mais te permettent aussi de communiquer pour en apprendre sur les calculs.

Comment faire une addition sur papier? Comment interpréter cette méthode dans un programme?
J'insiste un peu, mais c'est comme la lumière: on commence par des règles, puis l'on s'accroche pour les contredire, ce qui apporte d'autres règles plus complexes, etc...

Re: Bric-à-Brac de Lord Nelson

Publié : mar. 11/nov./2014 5:31
par Demivec
Lord Nelson a écrit :Edit: Sa ne fonctionne pas avec 9999999999999999999... 18446744073709551615
Est-ce normale ?

Code : Tout sélectionner

0 <= Nombre$ <= "8112260925743664697"  devient  0 <= Quad <= 9223372036854775807

Re: Bric-à-Brac de Lord Nelson

Publié : mar. 11/nov./2014 10:55
par Lord Nelson
J'ai mis pas mal de temps à comprendre se que vous avez voulus me dire :)

Ok, mais est-ce normale qu'on ne puisse pas aller au delà de 9223372036854775807 ?
Par exemple se serais bien de pouvoir aller jusque 18446744073709551615 qui est aussi un quad.

Merci pour tous.

Re: Bric-à-Brac de Lord Nelson

Publié : mar. 11/nov./2014 18:44
par Demivec
Lord Nelson a écrit :J'ai mis pas mal de temps à comprendre se que vous avez voulus me dire :)

Ok, mais est-ce normale qu'on ne puisse pas aller au delà de 9223372036854775807 ?
Par exemple se serais bien de pouvoir aller jusque 18446744073709551615 qui est aussi un quad.
Regarde dans le fichier d'aide de PB : Thèmes généraux ==> Variables, Types et Opérateurs ('Quad')

Re: Bric-à-Brac de Lord Nelson

Publié : mar. 11/nov./2014 19:46
par Lord Nelson
Quad .q 8 octets -9223372036854775808 à +9223372036854775807
Mais avec StrU() ont peut monter jusque 18446744073709551615.
Ton code ne gère pas cela !

Bon, c'est pas grave, merci quand même Demivec, c'est bien déjà :)

Re: Bric-à-Brac de Lord Nelson

Publié : mar. 11/nov./2014 20:57
par Ollivier
Usuellement, on travaille avec des nombres signés. Le "U" de StrU est l'initiale de Unsigned.

Ce n'est pas son code à Demivec qui gère pas, mais c'est toi qui n'en fait qu'à ta tête... T'attends quoi pour travailler sur 2 chaînes de nombres qui s'additionnent?

Re: Bric-à-Brac de Lord Nelson

Publié : mer. 12/nov./2014 11:55
par Lord Nelson
Salut,

Bon, j'ai assez saoulé tous le monde, je vais digérer et cogiter un peut de mon coté avec se que vous m'avez si gentiment proposé.
Je vous remercie tous pour votre précieuse aide.

J'ai beaucoup à apprendre et je m'éparpille beaucoup de trop, je cherche à faire des
choses alors que j'ai même pas les outils ni les bases pour le faire :(

Je suis comme ça, je suis pressé et forcement je saute pas mal de chose !
Mais, j'ai appris, et j'apprendrais encore !

Je vais me poser un peut.

@Ollivier, il serait intéressant que je m’attaque à cette partie pour le fun.
Merci.

Cordialement.

Re: Bric-à-Brac de Lord Nelson

Publié : mer. 12/nov./2014 20:05
par Ollivier
Exact. C'est assez simple, mais ça demande à se poser les bonnes questions.

Il faut commencer par simple:

A$ = "123"
B$ = "456"

Comment obtenir le résultat de la somme dans X$?
Ça n'a vraiment rien de bas de travailler les choses simples.

Ça commence sur papier, et ça termine sur l'ordi. Poste juste un code (dans CE sujet!) qui résoud ce problème ci-dessus, sans plus.

Re: Bric-à-Brac de Lord Nelson

Publié : mer. 12/nov./2014 23:04
par Ollivier
Je précise bien que si tu postes un code, c'est pour t'en filer un après...