Le C sur Pocket !!!
Pour faire du C sur ordinateur de poche de manière autonome, et pas avec la suite de développement sur le gros machin.
Il faut un OP avec soit un interpréteur, soit un compilateur embarqué.
Je n'ai personnellement jamais vu de pocket avec de compilateur permettant de générer du code, le C embarqué étant utilisé, au japon, à des fins éducative.
Notez aussi que le C des pocket embarque nativement les modules:
• stdio.h (gestion des entrée sorties)
• ctypes.h (conversion de type)
• string.h (manipulation des chaînes de caractères)
• math.h (fonctions mathématiques)
• stdlib.h (bibliothèque standard)
Attention cependant, seules les fonctions les plus courantes de ces bibliothèques sont couvertes. On peut aussi, suivant l'OP, avoir des fonctions spécifiques permettant par exemple, la gestion de l'afficheur graphique ou les bips sonores ou même un port spécifique.
Des ordinateurs de poche avec C il y en a pas des masses. Pour ma part j’en ai deux, Le Sharp PC G850V et le Casio Z-1gr. Mais il en existe d'autre, sans être exhaustif, le PB 2000 de chez Casio, Toute la série G850 de chez Sharp.
Nous allons donc, et sur ces deux plates-formes, voir comment créer un programme C en partant du BASIC de base supposé maîtrisé.
On passe sur le HELLOWORLD sans aucun intérêt. Et on se lance tout de suite dans le cambouis.
Les équations du second degré (souvenir, souvenir…):
En basic standard ça donne ça
Code : Tout sélectionner
10 CLS
20 PRINT "Equation du 2eme degré"
30 PRINT "A.x^2+B.x+C"
40 INPUT "A:";A
50 INPUT "B:";B
60 INPUT "C:";C
65 REM **Calcul de DELTA**
70 D=B^2-4*A*C
80 PRINT "DELTA:";D
85 REM **Si DELTA négatif, on sort**
90 IF D<0 THEN PRINT"Pas de racine réelle":END
100 S1=(-B-SQR(D))/(2*A)
110 S2=(-B+SQR(D))/(2*A)
120 PRINT"S1:";S1
130 IF D<>0 THEN PRINT"S2:";S2Code : Tout sélectionner
10 CLS
20 PRINT "Equation du 2eme degre"
30 PRINT "A.x^2+B.x+C"
40 INPUT "A:";A
50 INPUT "B:";B
60 INPUT "C:";C
70 D=B^2-4*A*C
80 LOCATE 10,2:PRINT "DELTA:";D
90 IF D<0 THEN LOCATE 4,4:PRINT"Pas de racine reelle":END
100 S1=(-B-SQR D)/(2*A)
110 S2=(-B+SQR D)/(2*A)
120 LOCATE 10,3:PRINT"S1:";S1
130 IF D THEN LOCATE 10,4:PRINT"S2:";S2Code : Tout sélectionner
10 CLS
20 PRINT "Equation du 2eme degre"
30 PRINT "A.x^2+B.x+C"
40 INPUT "A:";A
50 LOCATE 10,2:INPUT "B:";B
60 LOCATE 20,2:INPUT "C:";C
70 D=B^2-4*A*C
80 LOCATE 0,3:PRINT "DELTA:";D
90 IF D<0 THEN LOCATE 12,3:PRINT"Pas de racine reelle":GOTO 140
100 S1=(-B-SQR D)/(2*A)
110 S2=(-B+SQR D)/(2*A)
120 LOCATE 11,3:PRINT"S1:";S1
130 IF D<>0 THEN LOCATE 20,3:PRINT"S2:";S2
140 LOCATE 0,0Code : Tout sélectionner
Basic C
CLS clrscr(void);
PRINT printf();
INPUT scanf();
LOCATE Void gotoxy(unsigned x,unsigned y)
IF [condition] if(condition){…};
SQR double sqrt(double);
^2 double pow(double,double);
REM /*…*/Code : Tout sélectionner
Clrsrc();
printf("Equation du 2eme degre");
printf("A.x^2+B.x+C");
scanf("A:",a);
gotoxy(10,2);
scanf("B:",b)
gotoxy(20,2);
scanf("C:",c);
d=pow(b,2)-4*a*c;
gotoxy(0,3);
printf("DELTA:",d);
if(d<0){
gotoxy(12,3);
printf("Pas de racine reelle");
break;
}
s1=(-b-sqrt(d))/(2*a);
s2=(-b+sqrt(d))/(2*a);
gotoxy(11,3);
printf("S1:",s1);
gotoxy(20,3);
printf("S2:",s2);
gotoxy(0,0); • Après un printf le retour à la ligne n'est pas implicite, il faut donc le provoquer par ¥n (sur OP uniquement sinon c'est \n)
• Empaquetage dans une procédure main(){…} de la fonction principale.
• Déclaration et typage des variables.
• Précision dans les printf et scanf de la nature des variables attendues suivant un code pas évident à se rappeler (%G pour les réels en virgule flottante).
• scanf ne prend uniquement des variables il n'affiche pas de prompt, passage obligé par le prinf avant.
• Exceptionnellement sur Sharp il faut des numéros de lignes !!!
• Attention le C et sensible à la casse (la variable int a n'est pas int A)
Voici donc la version Sharp, que l'on saisit sous l'éditeur TEXT
Code : Tout sélectionner
10 main(){
20 double a,b,c,d,s1,s2; /*déclaration des variables*/
30 clrscr(); /*effacement de l'écran*/
40 printf("Equation du 2eme degre¥n ");
50 printf("A.x^2+B.x+C¥n ");
60 printf("A:¥nB:¥nc:");
70 gotoxy(2,2);
80 scanf("%lg",&a); /*Saisie de la valeur de A*/
90 gotoxy(2,3);
100 scanf("%lg",&b); /*Saisie de la valeur de B*/
110 gotoxy(2,4);
120 scanf("%lg",&c); /*Saisie de la valeur de C*/
130 d=pow(b,2)-4*a*c; /*Calcul de DELTA*/
140 gotoxy(10,2);
150 printf("DELTA:%G",d);
160 if(d<0){
170 gotoxy(4,4);
180 printf("Pas de racine reelle"); /si DELTA négatif*/
190 } else {
200 s1=(-b-sqrt(d))/(2*a); /*Calcul des racines*/
210 s2=(-b+sqrt(d))/(2*a);
220 gotoxy(10,3);
230 printf("S1:%G",s1);
240 gotoxy(10,4);
250 if(d)
250 printf("S2:%G",s2);
260 }
270 }Code : Tout sélectionner
main(){
double a,b,c,d,s1,s2; /*déclaration des variables*/
clrscr();/*effacement de l'écran*/
printf("Equation du 2eme degre¥n ");
printf("A.x^2+B.x+C¥n ");
printf("A:");
scanf("%lg",&a); /*Saisie de la valeur de A*/
gotoxy(8,2);
printf("B:");
scanf("%lg",&b); /*Saisie de la valeur de B*/
gotoxy(18,2);
printf("C:");
scanf("%lg",&c); /*Saisie de la valeur de C*/
d=pow(b,2)-4*a*c; /*Calcul de DELTA*/
gotoxy(10,2);
printf("DELTA:%G",d);
if(d<0){
gotoxy(12,3);
printf("Pas de racine reelle"); /si DELTA négatif*/
} else {
s1=(-b-sqrt(d))/(2*a); /*Calcul des racines*/
s2=(-b+sqrt(d))/(2*a);
gotoxy(11,3);
printf("S1:%G",s1);
gotoxy(20,4);
if(d)
printf("S2:%G",s2);
gotoxy(0,0);
}
}Les variables globales, locales et fonctions.
Sur Sharp
Code : Tout sélectionner
10 double a,b,c; /*déclaration de variables globales*/
20 main(){
30 double d /*variable locale à main()*/
40 double racine(double); /*prototype de la fonction racine*/
50 clrscr();
60 printf("Equation du 2eme degre¥n A.x^2+B.x+C¥n A:¥nB:¥nC: ");
70 gotoxy(2,2);
80 scanf("%lg",&a); /
90 gotoxy(2,3);
100 scanf("%lg",&b);
110 gotoxy(2,4);
120 scanf("%lg",&c);
130 d=pow(b,2)-4*a*c;
140 gotoxy(10,2);
150 printf("DELTA:%G",d);
160 if(d<0){
170 gotoxy(4,4);
180 printf("Pas de racine reelle");
190 } else {
220 gotoxy(10,3);
230 printf("S1:%G",racine(d));
240 gotoxy(10,4);
250 if(d) printf("S2:%G",racine(-d));
260 }
270 }
280 /*Fonction racine*/
280 double racine(double d){
290 return (d<0)?(-b-sqrt(abs(d)))/(2*a):(-b-sqrt(d))/(2*a);
300 }Code : Tout sélectionner
double a,b,c; /*déclaration de variables globales*/
main(){
double a; /*déclaration de variable locale*/
double racine(); /*déclaration de la fonction*/
clrscr();/*effacement de l'écran*/
printf("Equation du 2eme degre¥n>A.x^2+B.x+C¥nA:");
scanf("%lg",&a); /*Saisie de la valeur de A*/
gotoxy(8,2);
printf("B:");
scanf("%lg",&b); /*Saisie de la valeur de B*/
gotoxy(18,2);
printf("C:");
scanf("%lg",&c); /*Saisie de la valeur de C*/
d=pow(b,2)-4*a*c; /*Calcul de DELTA*/
gotoxy(10,2);
printf("DELTA:%G",d);
if(d<0){
gotoxy(12,3);
printf("Pas de racine reelle"); /si DELTA négatif*/
} else {
gotoxy(11,3);
printf("S1:%G",racine(d));
gotoxy(20,4);
if(d) printf("S2:%G",racine(-d));
gotoxy(0,0);
}
}
double racine(d)
double d;
{
return (d<0)?(-b-sqrt(abs(d)))/(2*a):(-b-sqrt(d))/(2*a);
} 





