453 résultats trouvés

par babaorhum
30 août 2018 22:14
Forum : Tous les Pockets
Sujet : Misez p'tit, Optimisez - N°85 (L'Algorithme de Kaprekar)
Réponses : 47
Vues : 44525

Re: Misez p'tit, Optimisez - N°85 (L'Algorithme de Kaprekar)

Bonjour,

j'ai peut être été un peu rapide mes explications ... On peut accéder au contenu des variables alpha du HP71B comme dans un tableau :

A$ = B$[3,5] affectera à A$ 3 caractères : du 3ème au 5ème de B$ - comme un MID$(B$,3,3) sur une Sharp par exemple.

Le gros avantage HP est que ça marche dans l'autre sens - Dans mon code je l'ai utilisé pour affecter un caractère (A$[I,I]= "x") . Facile.
Pour plusieurs caractères ça mérite de s'y pencher un peu plus ...

extrait du manuel P74, traduit à la volée :
V$[I,J] = "teacup" étend ou contracte la partie de V$ à partir de la position I jusqu'à la position J de manière à ce que le mot "teacup" entre exactement - tout caractère existant auparavant entre I et J sont écrasés, y compris les positions I et J
Ca mérite un essai pour bien comprendre ... sortons la bête et essayons :

Code : Tout sélectionner

A$="SILICIUM C'EST SUPER"
LEN(A$) renvoit 20
A$[5,8] = "GLOUPS"
A$ renvoie "SILIGLOUPS C'EST SUPER"  donc on élimine les 4 caractères entre du 5éme au 8éme et on les remplace par les 6 caractères de "GLOUPS"
A$[5,10] = "CIUM"
A$ contient "SILICIUM C'EST SUPER"  on élimine les 6 caractères (entre 5 et 10) et on les remplace par 4 "CIUM"
Voilà, maintenant on comprend mieux le manuel effectivement ...

Avec cet éclaircissement, C.ret, il faut je pense revoir ta ligne 30 (pas le temps d'aller plus loin aujourd'hui ...)

Autre précision, l'instruction N$=STR$(VAL(N$)) sert aussi à éliminer d'éventuels zéros en début de ligne, changer par exemple, 0001485 en 1485 - sinon les zéros sont considérés, on est en mode alpha ...

A suivre

Baba
par babaorhum
26 août 2018 18:38
Forum : Tous les Pockets
Sujet : Misez p'tit, Optimisez - N°85 (L'Algorithme de Kaprekar)
Réponses : 47
Vues : 44525

Re: Misez p'tit, Optimisez - N°85 (L'Algorithme de Kaprekar)

Salut les siliciens !

Ca fait bien longtemps que je n'ai pas posté sur Sili ... (mais ça ne m'a pas empêché de vous lire très régulièrement et de suivre vos aventures !)

Bon, C.Ret m'a fait ressortir mes machines. Voici donc un algo de Kaprekar méthode alphanumérique sur un 71B. Je ne rivalise pas avec les versions RPL et assembleur bien sûr ...
Le 71B considère ses chaînes alpha comme des tableaux. On accède ainsi simplement à chacun de ses caractères ... pratique pour trier !

Code : Tout sélectionner

10 INPUT A$ @ A$=STR$(VAL(A$))
20 L=LEN(A$) @ FOR J = L-1 TO 1 STEP -1 @ FOR I = 1 TO J
30 L$=A$[1,1] @ R$=A$[I+1,I+1]
40 IF R$>L$ THEN A$[I,I]=R$ @ A$[I+1,I+1]=L$
50 NEXT I @ NEXT J
60 B$=« » @ FOR I = 1 TO L @ B$[I,I]=A$[L-I+1,L-I+1] @ NEXT I
70 A$=STR$(VAL(A$)-VAL(B$))
80 PRINT A$ @ PAUSE @ GOTO 20
A$ contient le nombre initial (sous forme d'une chaine alpha), puis le nombre trié en décroissant
B$ contient le nombre trié en croissant
L$ et R$ contienne les caractères extraits pour les comparer et si besoin les échanger.

c'est un tri systématique de la gauche vers la droite ... c'est un tri à bulle ?

@ bientôt

Baba
par babaorhum
31 mars 2016 19:53
Forum : A quoi t'as joué hier ?
Sujet : à 2048 en Basic
Réponses : 10
Vues : 10764

Re: à 2048 en Basic (mais pas que en basic !)

Bonjour à tous,

Puisqu'on reparle 2048, j'avais fais une version DOS sous TP7 pour mon 200LX à l'époque du pgm de Bernouilli92.

Si ca vous dis de le tester, y'a plus qu'à copier/coller et compiler
d'ailleurs
Je ne suis pas sûr d'avoir les mêmes règles que l'original et je ne fais apparaître que des "2" - facile à changer si vous voulez.

Chaque mouvement se fait avec les flèches et si on en a marre on sort avec "ESC". On perd quand la grille est pleine. Ca marche aussi sur un "vrai PC" et DOSBOX.
Cette version est assez ludique, jamais réussi à atteindre le 2048 (pas testé par le pgm d'ailleurs).


@ bientôt

Code : Tout sélectionner

program p2048;
uses crt, dos;

const maxdim = 4;
      base = 2;
type carre = array[1..maxDim,1..maxdim] of integer;
     Ligne = array[1..MaxDim] of integer;

var J1 : carre;
    L1 : ligne;
    FIN : boolean ;
    score : integer ;

procedure LigCarreToLig(MyCarre:carre;l:integer; var Lig:ligne);
var i : integer;
begin
   for i:=1 to Maxdim do
   begin
     Lig[i]:=MyCarre[l,i];
   end;
end;

procedure LigToLigCarre(Lig:ligne;l:integer;var myCarre:carre);
var i : integer;
begin
   for i:=1 to Maxdim do
   begin
     MyCarre[l,i]:=Lig[i];
   end;
end;

procedure ColCarreToLig(MyCarre:carre;l:integer; var Lig:ligne);
var i : integer;
begin
   for i:=1 to Maxdim do
   begin
     Lig[i]:=MyCarre[i,l];
   end;
end;

procedure LigToColCarre(Lig:ligne;l:integer;var myCarre:carre);
var i : integer;
begin
   for i:=1 to Maxdim do
   begin
     MyCarre[i,l]:=Lig[i];
   end;
end;

procedure CompressRight(var Lig : ligne);
var i,j : integer;
begin
 for i:=1 to (MaxDim-1) do
  begin
    if Lig[i] = lig[i+1] then
     begin
       Lig[i]:=Lig[i]*2;
       Lig[i+1]:=0;
     end;
    if Lig[i]=0 then
     begin
       j:=i;
       repeat
        j:=j+1;
        if Lig[j]<>0 then
         begin
          Lig[i]:=Lig[j];
          Lig[j]:=0;
          j:=maxDim;
         end;
       until j=maxDim
     end;
   end;
 end;

procedure CompressLeft(var Lig : ligne);
var i,j : integer;
begin
 for i:=Maxdim downto 2 do
  begin
    if Lig[i] = lig[i-1] then
     begin
       Lig[i]:=Lig[i]*2;
       Lig[i-1]:=0;
     end;
    if Lig[i]=0 then
     begin
       j:=i;
       repeat
        j:=j-1;
        if Lig[j]<>0 then
         begin
          Lig[i]:=Lig[j];
          Lig[j]:=0;
          j:=1;
         end;
       until j=1;
     end;
   end;
 end;

procedure clearCarre(var Mycarre:carre);
var i,j : integer;
begin
 for i:=1 to maxdim do
  for j:=1 to maxdim do
   MyCarre[i,j]:=0;
end;

procedure initcarre(var MyCarre : carre);
var i,j,r : integer;
begin
score := 0;
 for i:=1 to maxdim do
  for j:=1 to maxdim do
   begin
     if MyCarre[i,j] > score then
       score := MyCarre[i,j];
     if MyCarre[i,j]=0 then
     begin
      r:=base;
      if random(4)=1 then
        MyCarre[i,j]:=r ;
      end;
   end;
end;

procedure testFin(Mycarre:Carre) ;
var i,j : integer;
begin
if NOT FIN then
begin
 FIN := true;
  for i:=1 to maxdim do
   for j:=1 to maxdim do
    begin
     if MyCarre[i,j]=0 then
       FIN := false;
   end;
end;
end;


procedure showcarre(Mycarre: carre);
var i,j,k,n:integer;
    L,C : string;
begin
 clrscr;
 writeln;
   for k:=1 to maxdim do
   write('---------');
   writeln;
 for i:=1 to maxdim do
 begin
  for j:=1 to maxdim do
   begin
     str(MyCarre[i,j],c);
     n:=length(c);
     n:=5-n;
     c:='|   '+c;
     for k := 1 to n do
      c:=c+' ';
      write (c);
   end;
   write('|');
   writeln;
   for k:=1 to maxdim do
   write('---------');
   writeln;
  end;
  writeln;
  writeln('              score : ',score);
end;



procedure MouvCarre(var Mycarre:carre);
var i,j,l : integer;
    kk:char;
begin
 kk:= readkey;
 if ord(kk)=27 then
     FIN := true;
 if ord(kk)=0 then
 begin
  kk:=readkey;
  case ord(kk) of
   77 : {droite}
       begin
        for i:=1 to MaxDim do
        begin
         LigCarreToLig(MyCarre,i,L1);
         CompressLeft(L1);
         LigToLigCarre(L1,i,myCarre);
         end;
       end;
   80 : {bas}
      begin
        for i:=1 to MaxDim do
        begin
         ColCarreToLig(MyCarre,i,L1);
         CompressLeft(L1);
         LigToColCarre(L1,i,myCarre);
        end;
      end;
   75 : {gauche}
      begin
        for i:=1 to MaxDim do
        begin
         LigCarreToLig(MyCarre,i,L1);
         CompressRight(L1);
         LigToLigCarre(L1,i,myCarre);
         end;
      end;
   72 : {haut}
      begin
        for i:=1 to MaxDim do
        begin
         ColCarreToLig(MyCarre,i,L1);
         CompressRight(L1);
         LigToColCarre(L1,i,myCarre);
        end;
      end;
  else
      begin
      end;
  end;
 end;
end;



begin
 FIN := false ;
 clearcarre(J1);
 InitCarre(J1);
 showcarre(J1);
 repeat
  Mouvcarre(J1);
  initcarre(J1);
  ShowCarre(J1);
  testFIN(J1);
 until FIN;
 writeln('*********** FINAL **********');
 repeat until keypressed;
end.
par babaorhum
03 mars 2016 19:49
Forum : Recherche informations / technique / etc ... [pas de petites annonces ici]
Sujet : HBN Computer "Le Guépard"
Réponses : 45
Vues : 38335

Re: HBN Computer "Le Guépard"

Magnifique persévérance TRS80 !
BIOS V3.0 1984 HBN computer - respect
et il nous faudrait le son du boot CPM ... (on peut mettre un mp3 en ligne sur Sili ?)

... et échanges intéressants sur le partage et le profit ... un bon sujet pour le bac de philo !
par babaorhum
07 oct. 2015 07:42
Forum : Tous les Pockets
Sujet : Ma caltoche de la semaine
Réponses : 877
Vues : 517273

Re: Ma caltoche de la semaine

J'ai aidé un peu mon fils en physique hier soir (1ère S)
Des histoires pas claires de raies sombres dans le spectre solaire - ça s'est terminé avec des calculs entre energie, longueurs d'onde et fréquence.
Lui avec sa TI-83 (achat obligatoire! ...) et moi avec ma fx-4000P, toujours gaillarde et loin d'être ridicule.
Il aura appris aussi à quoi sert une mémoire au passage, histoire de ne pas retaper 15000 fois la constante de Plank ...
par babaorhum
06 oct. 2015 07:54
Forum : Présentation
Sujet : Nouveau sur le Forum
Réponses : 13
Vues : 12054

Re: Nouveau sur le Forum

Bienvenue AF001,
AF001 a écrit : Ayant débuté en informatique en 1981, j'ai conservé la quasi totalité des pockets et micros que j'ai acquis.
Elles sont toutes en état de fonctionnement.
Notre curiosité est déclenchée ... falloir nous en dire plus .... ????

Tu en a un tiroir plein .? , une armoire ? . Un appart ?
Et de quoi ?

Amicalement ...

Baba

(Édit : je plussoie Ledudu en fait )
par babaorhum
30 sept. 2015 21:14
Forum : Tous les Pockets
Sujet : M.P.O. n°67 : Les nombres de Hamming
Réponses : 6
Vues : 9069

Re: M.P.O. n°67 : Les nombres de Hamming

Bonjour,
En mode "boeuf" (sans réfléchir), 5 lignes sur mon sharp pc-1350 :

Code : Tout sélectionner

10 "H" AREAD N : D=5 : GOSUB 40 : D=3 :GOSUB 40 : D=2 : GOSUB 40
20 IF N=1 THEN PRINT "YES" : END 
30 PRINT "NO" : END 
40 M=N/D : IF M=INT M THEN LET N=M : GOTO  40
50 RETURN 
33768900 def H donne "NO"
559872000 def H donne "YES"

... Pas calculé le nombre d'octets (il y a d'autres trucs en mémoire. .)
par babaorhum
28 sept. 2015 20:04
Forum : Tous les Pockets
Sujet : La Gazette n°6 est ENFIN (RE- !!!) publiée !
Réponses : 164
Vues : 75291

Re: La Gazette n°6 est (PRESQUE !!!) publiée !

Merci à tous de ce super boulot ... encore une fois ... chapeau !

J'ai réussi à attraper une version "buggée" du n6 la semaine dernière et je la garde !
Comme poour les pockets, les versions buggées sont celles qui prendront de la valeur ? ... :arrow:

Lecture en cours ... silence svp . ..
par babaorhum
28 sept. 2015 19:48
Forum : Présentation
Sujet : Linventeur le seul
Réponses : 52
Vues : 38660

Re: Linventeur le seul

Bienvenu !

Je pense que tu feras des heureux, pour ceux qui peuvent aller jusqu'au pays du champagne ...
Mais je vois du matériel de soudure aussi, tu as peut être des belles histoires à raconter ? Ou des bricolages à partager ?
par babaorhum
24 août 2015 22:05
Forum : Bibliographie
Sujet : [Micro-Revue-HP] 8 Numeros: 2 5 6 7 10 11 12 13
Réponses : 37
Vues : 65713

Re: [Micro-Revue-HP] 8 Numeros: 2 5 6 7 10 11 12 13

Merci CGH et Rogeroge pour ces revues et leurs versions numérisées.
Sympa zpalm pour les sommaires aussi - tout ca direct dans ma tablette pour une dégustation lente au fur et à mesure. Un concentré de 41, 71 et 75 ... que du bon en perspective ! :slime:
par babaorhum
06 août 2015 23:19
Forum : Emulateurs
Sujet : [PockEmul] la TI-59
Réponses : 10
Vues : 10664

Re: [PockEmul] la TI-59

Un montre sacré de plus dans pockemul ... incroyable, génial ! ... merci ... 8O

Pour la 59C, je vote pour la conserver dans pockemul - le progrès quoi !
et côté modules, il y a des compléments en perspective ?

et si tu t'ennuis pendant les vacances ... une TI-88 ? :arrow:
par babaorhum
03 août 2015 22:23
Forum : Tous les Pockets
Sujet : MPO n°66 - Convertisseur en chiffres romains
Réponses : 33
Vues : 21828

Re: MPO n°66 - Convertisseur en chiffres romains

Hello,
@Caloubugs, je ne connais pas bien le C, mais en simple basic, on peut faire des DATAs - par exemple, sur mon tout petit PC-1245 (et ca doit marcher sur tous les autres) :

Code : Tout sélectionner

1 INPUT N : RESTORE 7 : DIM R$(0)*15
2 FOR K = 1 TO 13 : READ L : U = INT(L/N) : IF U>=1 THEN GOSUB 4
3 NEXT K : PRINT R$(0) : CLEAR : END
4 RESTORE 6 : FOR I=1 TO K : READ T$ : NEXT I : FOR I=1 TO U : R$(0)=R$(0)+T$
5 N = N-L : NEXT I : RESTORE 7 : FOR I = 1 TO K : READ L : NEXT I : RETURN
6 DATA "M","CM","D","CD","C","XC","L","XL","X","IX,"V","IV","I"
7 DATA 1000,900,500,400,100,90,50,40,10,9,5,4,1
... en 239 octets - à améliorer certainement du côté des boucles - mais hélas, avec création d'une variable R$(0) de 15 caractères pour empiler le résultat - on ne peut pas le faire directement à l'affichage sur ce pocket ("PRINT T$;" n'est pas accepté ... dommage ...)

@cgh, tu peux nous guider un peu sur le fonctionnement de ton pgm stp ? je nage !
par babaorhum
01 août 2015 18:16
Forum : Tous les Pockets
Sujet : MPO n°66 - Convertisseur en chiffres romains
Réponses : 33
Vues : 21828

Re: MPO n°66 - Convertisseur en chiffres romains

Les règles sont bien expliquées sur cette page
pour 499, les romains écrivaient CDXCIX si je comprends bien, pas évident pour nous ...
par babaorhum
01 août 2015 16:48
Forum : Tous les Pockets
Sujet : MPO n°66 - Convertisseur en chiffres romains
Réponses : 33
Vues : 21828

Re: MPO n°66 - Convertisseur en chiffres romains

Oups,
oui, bien sûr badaze !
Je corrige. :oops:
par babaorhum
01 août 2015 09:59
Forum : Tous les Pockets
Sujet : MPO n°66 - Convertisseur en chiffres romains
Réponses : 33
Vues : 21828

Re: MPO n°66 - Convertisseur en chiffres romains

Bonjour,

Bricolé sur ma TI92 :

Code : Tout sélectionner

Romain(n)
prgm
 Local rm,dc,k,i,j,res
 ClrIO
 {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"} -> rm
 {1000,900,500,400,100,90,50,40,10,9,5,4,1} -> dc
 "" -> res
 For k,1,dim(rm)
  int(n/(dc[k])) -> j
  n-j*dc[k] -> n
  If j>0 Then
   For i,1,j
    res & rm[k] -> res
   EndFor 
  EndIf
 EndFor
 Disp res
EndPrgm
Avec les listes c'est vrai que c'est plus facile ... 310 octets me dit VARLINK, sans compter les variables locales forcément ...
Il me semble qu'il y avait un pgm de ce type dans l'OP (j'ai des souvenirs de l'avoir adapté à mon ex 602P). Il faudra que je recherche ...
Au suivant !
EDIT : je n'ai pas précisé l'utilisation ... pas très compliqué une fois le programme entré ; dans "Home", entrer "Romain(1997)" par exemple puis return et MCMXCVII apparaît à l'affichage.

Aller à la recherche avancée