Misez P'tit, Optimisez - N°32 (factorielle)

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Paul Tergeist »

Vos solutions sont tellement bien que j'ai fortement envie de les copier sur mon p'tit site en citant vos pseudos silicium.
histoire de les posteriser. (dans le sens de postérité pas d'en faire des poster)
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par C.Ret »

Pas de souci pour ce qui est de mes productions, postées ou en posters, elles sont immédiatement tombées dans le domaine publique et à la dispositions de tous et toutes.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Gilles59 »

Paul Tergeist a écrit :Vos solutions sont tellement bien que j'ai fortement envie de les copier sur mon p'tit site en citant vos pseudos silicium.
histoire de les posteriser. (dans le sens de postérité pas d'en faire des poster)
Tout à fait OK en ce qui le concerne ;)
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Paul Tergeist »

Merci C.Ret mais je les mettrai juste en listing car en poster cela tenterait trop les fabricants
de T-Shirt.

Comment réagirais-tu si tu croisais à la plage des demoiselles portant tes oeuvres sur
leur T-shirt échancrés ?

Comme tout bon auteur tu les arracherais en disant "c'est à moi, je le reprends".
Et tu aurais raison, mais après tu risquerais des conséquences...

Donc juste en listing.
Avatar du membre
doum-doum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 989
Enregistré le : 08 déc. 2012 16:24

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par doum-doum »

Paul Tergeist a écrit :Merci C.Ret mais je les mettrai juste en listing car en poster cela tenterait trop les fabricants
de T-Shirt.

Comment réagirais-tu si tu croisais à la plage des demoiselles portant tes oeuvres sur
leur T-shirt échancrés ?

Comme tout bon auteur tu les arracherais en disant "c'est à moi, je le reprends".
Et tu aurais raison, mais après tu risquerais des conséquences...

Donc juste en listing.
Tant que ce n'est pas en lit string...
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Paul Tergeist »

Pas de danger, les programmes sont trop grand pour tenir sur un string.
Ou alors un grand string....
Avatar du membre
doum-doum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 989
Enregistré le : 08 déc. 2012 16:24

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par doum-doum »

"format string size ="...
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Paul Tergeist »

On ne parle pas du même string. Moi je parle du chanteur String.
Avatar du membre
doum-doum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 989
Enregistré le : 08 déc. 2012 16:24

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par doum-doum »

:mrgreen:
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Marge »

Gilles59 a écrit :
Paul Tergeist a écrit :Allez plus loin avec le logarithme décimal !!!
.
Bien vu Paul !...

Ma Casio 602P sait maintenant que 200! = 7.88658E374
et que
400! = 6.40345E868
1000! =4.02391E2567 (en fait 4.023872 ... )

nombres plus qu'astronomiques qui ne représentent rien de concevable. L'univers "ne contient que" 10^80 atomes

[...]

Certes, mais combien de manières de combiner ces atomes ? :mrgreen:
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par charognard »

sur G850

2550 double fact(char n){
2560 return n?n*fact(n-1):1;
2570 }


tiré de mon emulateur RPN

Code : Tout sélectionner

10 #define BL printf("              ")
20 #define ENT ent=1
30 double x,y,z,t;
40 char ent=0;
50  main(){
60   unsigned char code,ascii;
70   /**/
80   double val(char*);
90  unsigned int key(unsigned char*,unsigned char*);
100  char* stredit(char str[],unsigned char asc);
110  void calcul();
120  char fonction(unsigned char);
130  void pile(char);
140  void interf();
150  void affpile();
160  /**/
170  angle(0);
180  interf();
190  do{
200   affpile();
210   calcul();
220   do{}while(key(&code,&ascii));
230  }while(1);
240 }
250 /**/
260 double val(char *chain){
270  long double nbre;
280  sscanf(chain,"%Lg",&nbre);
290  return nbre;
300  }
310 /**/
320 unsigned int key(unsigned char* code,unsigned char* ascii){
330  unsigned int touche;
340  touche=call((int)"\xCD\x53\xBE\x6F\xCD\x56\xBE\x67\xC9",0);
350  *code=touche,*ascii=touche>>8;
360  return touche?1:0;
370 }
380 /**/
390 char* stredit(char str[],unsigned char asc){
400  if(asc!=8&strlen(str)<16)
410   str[strlen(str)+1]='\0',str[strlen(str)]=asc;
420  else if(asc==8&strlen(str)>0)
430    str[strlen(str)-1]='\0';
440  return str;
450 }
460 /**/
470 void calcul(){
480  char str[17]="";
490  unsigned char code,ascii,touche,lache=1,pnt=0,expos=0,edit=0,flag=1;
500  affpile();
510  do{
520   touche=key(&code,&ascii);
530   if(touche&lache){
540    switch(ascii){
550     case 8:
560      if(str){
570       strcpy(str,stredit(str,ascii));
580       if(strlen(str)<pnt) pnt=0;
590       if(strlen(str)<expos) expos=0;
600       edit=1;
610      }
620     break;
630     case 46:
640      if(ent) pile(4);
650      if(!pnt){
660       strcpy(str,stredit(str,ascii));
670       pnt=strlen(str);}
680      edit=1;
690     break;
700     case 101:
710     case 69:
720      if(ent) pile(4);
730      if(!expos){
740       strcpy(str,stredit(str,ascii));
750       expos=strlen(str);}
760      edit=1;
770     break;
780    }
790    if(ascii>=48&ascii<=57){
800    if(ent) pile(4);
810    strcpy(str,stredit(str,ascii));
820     edit=1;}
830     if(edit){
840      gotoxy(9,5);BL;
850      gotoxy(9,5);
860      printf("%s ",str);
870      x=val(str),edit=0;
880     }
890     lache=0;
900    } else if(!touche) lache=1;
910  gotoxy(0,3);
920  printf("%d  ",code);
930  gotoxy(9,5);
940  }while(fonction(code));
950 }
960 /**/
970  char fonction(unsigned char code){
980  char ret=0;
990 double fact(char);
1000   switch(code){
1010    case 25:
1020     breakpt();
1030    break;
1040    case 31:
1050     ENT;
1060     pile(1);
1070    break;
1080    case 32:
1090     ENT;
1100     pile(-1);
1110    break;
1120    case 33:
1130     x=-x,ENT;
1140    break;
1150    case 34:
1160     ENT;
1170     pile(3);
1180    break;
1190    case 39:
1200     x+=y,ENT;
1210     pile(2);
1220    break;
1230    case 40:
1240     t=z,z=y,y=x,ent=0;
1250     affpile();
1260    break;
1270    case 47:
1280     x=y-x,ENT;
1290     pile(2);
1300    break;
1310    case 55:
1320     x*=y,ENT;
1330     pile(2);
1340    break;
1350    case 59:
1360     if(ent) pile(0);
1370     x=3.141592654,ENT;
1380    break;
1390    case 63:
1400     x=y/x,ENT;
1410     pile(2);
1420    break;
1430    case 67:
1440     if(x>0)
1450      x=sqrt(x),ENT;
1460    break;
1470    case 68:
1480     x*=x,ENT;
1490    break;
1500    case 69:
1510     if(x>0)
1520     x=pow(y,x),ENT;
1530     pile(2);
1540    break;
1550    case 71:
1560     x=1/x,ENT;
1570    break;
1580    case 74:
1590     x=sin(x),ENT;
1600    break;
1610    case 75:
1620     x=cos(x),ENT;
1630    break;
1640    case 76:
1650     x=log(x),ENT;
1660    break;
1670    case 77:
1680     x=log10(x),ENT;
1690    break;
1700    case 78:
1710     x=tan(x),ENT;
1720    break;
1730    case 195:
1740     x=pow(x,(1./3)),ENT;
1750    break;
1760    case 196:
1770     x*=x*x,ENT;
1780    break;
1790    case 199:
1800     if(x>=0&x<70)
1810     x=fact(x),ENT;
1820    break;
1830    case 202:
1840     x=asin(x),ENT;
1850    break;
1860    case 203:
1870     x=acos(x),ENT;
1880    break;
1890    case 204:
1900     x=exp(x),ENT;
1910    break;
1920    case 205:
1930     x=pow(10,x),ENT;
1940    break;
1950    case 206:
1960     x=atan(x),ENT;
1970    break;
1980    default:
1990     ret=1;
2000    if(code) ent=0;
2010   }
2020   return ret;
2030 }
2040 /**/
2050 void pile(char sens){
2060  double m;
2070  switch(sens){
2080   case -1:
2090    m=x,x=t,t=z,z=y,y=m;
2100   break;
2110   case 0:
2120    t=z,z=y,y=x;
2130   break;
2140   case 1:
2150    m=x,x=y,y=z,z=t,t=m;
2160   break;
2170   case 2:
2180    y=z,z=t;
2190   break;
2200   case 3:
2210    m=x,x=y,y=m;
2220   break;
2230   case 4:
2240    pile(0);
2250    x=0,ent=0;
2260    affpile();
2270  }
2280 }
2290 /**/
2300 void interf(){
2310  gotoxy(2,0);
2320  printf("RPN 4 Level emulator");
2330  line(0,0,143,7,2,65535,2);
2340  line(39,8,39,47,0,65535,2);
2350 }
2360 void affpile(){
2370  gotoxy(7,2);
2380  printf("t:");BL;
2390  gotoxy(9,2);
2400  printf("%Lg",t);
2410  gotoxy(7,3);
2420  printf("z:");BL;
2430  gotoxy(9,3);
2440  printf("%Lg",z);
2450  gotoxy(7,4);
2460  printf("y:");BL;
2470  gotoxy(9,4);
2480  printf("%Lg",y);
2490  gotoxy(7,5);
2500  printf("x:");BL;
2510  gotoxy(9,5);
2520  printf("%Lg",x);
2530 }
2540 /**/
2550 double fact(char n){
2560  return n?n*fact(n-1):1;
2570 }
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Paul Tergeist »

Ouaou c'est encore du sévère...

Félicitations oryctolagus cuniculus ensanglanté....
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Gilles59 »

Rien d'original; mais fallait bien tester sur PRIME

EXPORT Fact(n) BEGIN IFTE(n>0,n*Fact(n-1),1); END;
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Paul Tergeist »

et les tours de babel ?
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Ben »

J'ai fait le test sur HP-41

Il faut mettre R02 à zéro. L’algorithme ne fonctionne pas pour 0

Code : Tout sélectionner

01 LBL FACTO3
02 ENTER^
03 LBL 01
04 LOG
05 ST+ 02
06 LASTX
07 DSE X
08 GTO 01
09 RCL 02
10 RCL 02
11 INT
12 -
13 10^X
14 ENTER^
15 RCL 02
16 INT
17 BEEP
Le programme affiche d'abord la puissance de 10 et faire R(RDN) pour afficher le résultat
Répondre

Retourner vers « Tous les Pockets »