Page 1 of 2

programmes en c ?

Unread postPosted: 14 May 2011, 18:47
by ioraito
je fais ce sujet afin de savoir si la nspire permet à l'aide de ndless d'executer des programmes en C qui sont écrit juste avec du C et non pas avec les commandes d'ASM , un peu comme celui là :

Code: Select all
#include math.h
#define NMAX 5
#define ITERMAX 21

double al_norme_vect(double x[NMAX],int n)
{
 double t;
 int i;
 t=0;
 for(i=1;i=n;i++)
 t += x[i]*x[i];
 t=sqrt(t);
 return(t);
}

void sl_gauss_seidel(double a[NMAX][NMAX],double b[NMAX],double x1[NMAX],
           int n,int iter,double eps,double t[NMAX][ITERMAX])
{
 int i,j,k;
 double alfa,d,s;
 for(i=1;i=n;i++)
 for(j=1;j=ITERMAX-1;j++)
 t[i][j]=0.0;
 alfa=1.0;
 k=1;
 while(k=iter  alfaeps)
 {
  alfa=0.0;
  for(i=1;i=n;i++)
  {
   d=x1[i];
   s=b[i];
   for(j=1;j=n;j++)
   if(i!=j)
   s -= a[i][j]*x1[j];
   x1[i]=s/a[i][i];
   d-=x1[i];
   alfa+=d*d;
  }
  for(i=1;i=n;i++)
  {
   for(j=1;j=ITERMAX-2;j++)
   t[i][j]=t[i][j+1];
   t[i][ITERMAX-1]=x1[i];
  }
 k++;
 }
}

main()
{
 double eps;
 double x[NMAX],b[NMAX],sol[NMAX];
 double a[NMAX][NMAX];
 double t[NMAX][ITERMAX];
 int i,j,n;
 printf("Méthode de Gauss-Seideln");
 printf("                           A                                     bn");
 eps=1e-18;
 n=4;
 a[1][1]=-16;a[1][2]=6;a[1][3]=-2;a[1][4]=-5;b[1]=-19;
 a[2][1]=3;a[2][2]=10;a[2][3]=-5;a[2][4]=1;b[2]=1;
 a[3][1]=-4;a[3][2]=1;a[3][3]=18;a[3][4]=2;b[3]=12;
 a[4][1]=1;a[4][2]=2;a[4][3]=2;a[4][4]=-14;b[4]=1;
 sol[1]=53141.0/48309.0;sol[2]=9424.0/48309.0;
 sol[3]=14209.0/16103.0;sol[4]=7781.0/48309.0;
 for(i=1;i=n;i++)
 {
  for(j=1;j=n;j++)
  printf("%12.5e  ",a[i][j]);
  printf(" I  %12.5en",b[i]);
  x[i]=0;
 }
 printf("Solution exacte :n");
 for(i=1;i=n;i++)
 printf("%22.15en",sol[i]);
 printf("Itérations :n");
 sl_gauss_seidel(a,b,x,n,ITERMAX-1,eps,t);
 for(j=1;j=ITERMAX-1;j++)
 {
  printf("x(%2d)= (",j);
  for(i=1;i=n;i++)
  {
   x[i]=t[i][j]-sol[i];
   printf("%12.5e ",t[i][j]);
  }
  printf(")    err= %.2en",al_norme_vect(x,n));
 }
 printf("Dernier itéré :n");
 for(i=1;i=n;i++)
 printf("%22.15en",t[i][ITERMAX-1]);
}

Re: programmes en c ?

Unread postPosted: 14 May 2011, 19:11
by Excale
Tout ce que je peut te dire c'est que le printf ne sortira pas sur l'écran, mais sur le port RS232.

Re: programmes en c ?

Unread postPosted: 14 May 2011, 19:32
by ioraito
alors comment faire ?

Re: programmes en c ?

Unread postPosted: 14 May 2011, 19:35
by Levak
Certains (dont critor) ont fait des libs pour ça. Mais je ne saurais les retrouver.
En tout cas oui : En ASM/C il faut tout refaire depuis le début et réinventer la roue.
En contre partie on a à disposition toute la machine.

Concernant le module math.h, je ne sais pas si quelqu'un a fait la lib, mais en théorie, elle n'est pas présente ni apportée par Ndless (Cela fait longtemps que je n'y ai pas touché, il faudra confirmer ce point). Pareil pour stdio/stdlib.

Re: programmes en c ?

Unread postPosted: 14 May 2011, 19:58
by critor
Ce que j'ai fait est encore très basique.

Voir dans les sources de mViewer:
- screen.c/.h
- console.c/.h
- charmap.h

Re: programmes en c ?

Unread postPosted: 14 May 2011, 20:00
by ioraito
merci pour les explications , sans math.h y'a pas grand chose à faire

Re: programmes en c ?

Unread postPosted: 14 May 2011, 20:20
by Lionel Debroux
A un niveau un peu plus élevé que math.h, l'API du CAS est très similaire à  celle d'AMS pour TI-68k. J'ai publié une preuve de concept à  http://www.ticalc.org/archives/files/fi ... 43727.html , mais c'est inutilisable en l'état car non interactif.

bsl a trouvé des fonctions de math.h, mais il dit que les registres ne sont pas utilisés dans l'ordre habituel, ce qui est chiant à  intégrer dans un programme normal.
Espérons qu'il y ait dans l'OS d'autres fonctions qui prennent les arguments dans l'ordre habituel, sinon il va falloir embarquer une couche de traduction ou des librairies pour les nombres flottants dans tous les programmes qui utiliseront les flottants, ou encore alourdir Ndless avec toutes ces fonctions.

Re: programmes en c ?

Unread postPosted: 14 May 2011, 21:25
by ioraito
et pour le ti basic , est ce qu'il peut faire ces operations ?

Re: programmes en c ?

Unread postPosted: 14 May 2011, 21:41
by Levak
Oui, mais il va falloir limiter les printf() (qui sont des Disp très coûteux en mémoire).

Re: programmes en c ?

Unread postPosted: 15 May 2011, 10:20
by ioraito
personne ne peut aider à traduire en TI basic ?