Le C sur pocket aide aux débutants

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 de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Le C sur pocket aide aux débutants

Message par charognard » 19 août 2010 13:02

Toujours de mon téléphone ... ça devient pas pratique

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:";S2
Une petite adaptation pour le SHARP PC G850V pour que ça tienne sur son écran de 6 lignes de 24 caractères

Code : 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:";S2
En BASIC CASIO ça donne cela, remarquez le LOCATE 0,0 en 140 pour éviter le défilement de l'écran.

Code : 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,0
Voyons maintenant l'adaptation en C dans un premier temps un tableau de correspondance est nécessaire.

Code : 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	           /*…*/
Donc un simple remplacement pourrait donner quelque chose de comme cela.

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); 
Mais la programmation en C doit respecter certaines règles :
• 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 }
Et la version Casio que l'on saisit dans une zone quelconque réservé au C/assembleur

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 programmes sont fonctionnels mais on est dans un style de programmation extrapolé du basic, nous allons donc étoffer un peu pour utiliser des fonctionnalités propre au C.
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 }
Sur Casio, on peut remarquer que la déclaration de la fonction (prototype) n'est pas au standard le plus récent. Et est moins permissif que le C du Sharp (et pas que pour cette syntaxe)

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);
} 
Dernière édition par charognard le 20 août 2010 10:30, édité 1 fois.

Avatar de l’utilisateur
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4594
Inscription : 31 oct. 2006 16:08
Localisation : 67310 Westhoffen
Contact :

Re: Le C sur pocket aide aux débutants

Message par pir2 » 19 août 2010 14:03

Super, on attend la suite de ce périple estival du C sur pockets :)
(mais surtout, passe à un vrai clavier, t'as du mettre des heures à taper ce post sur ton téléphone 8O )
Image
Image

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: Le C sur pocket aide aux débutants

Message par charognard » 19 août 2010 14:12

pas vraiment je triche

G850V -> PC portable
manip sous bloc note
PC portable -> PDA
PDA -> FTP pour les images

Avatar de l’utilisateur
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4594
Inscription : 31 oct. 2006 16:08
Localisation : 67310 Westhoffen
Contact :

Re: Le C sur pocket aide aux débutants

Message par pir2 » 19 août 2010 15:13

charognard a écrit :pas vraiment je triche

G850V -> PC portable
manip sous bloc note
PC portable -> PDA
PDA -> FTP pour les images
Je me disais aussi, un lapin (surtout sanguinolent), c'est connu pour tricher ;)
Image
Image

Avatar de l’utilisateur
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Inscription : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Le C sur pocket aide aux débutants

Message par Paul Tergeist » 19 août 2010 20:34

Mais c'est qu'il nous fait d'excellents articles notre charognard. On ne l'avait pas vu depuis des lustres
et voila que là il jaillit de son buisson tel un lapin sanginolent prêt à l'attaque. (ou un crotale, voir le post
avec Gégé).

Félicitations pour ta pédagogie Charo, j'ai toujours trouvé que la vue d'ensemble sur un programme
d'un langage vers un autre était plus ludique.
Il y a 10 catégories de personnes dans le monde. Celle qui connait le binaire et l'autre.

Avatar de l’utilisateur
Chris
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 220
Inscription : 20 oct. 2007 19:01

Re: Le C sur pocket aide aux débutants

Message par Chris » 20 août 2010 11:13

Salut Charo,

Excellente idée cet article : vivement la suite pour des fonctions C un peu plus trapues et adaptées à nos pockets :wink:

As tu prévu de faire quelque chose sur l'assembleur ? par exemple, petite routine (calcul, graphique) appelée depuis le C ?

Tout cela me donne envie de resortir mon G850V :D
HP : 11C 17BII 28S 48SX 50G 71B LX100
Sharp : PC-1403 PC-1600 PC-G850V
TI : TI-74

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: Le C sur pocket aide aux débutants

Message par charognard » 20 août 2010 13:05

Pour l'appel d'une routine LM en C. j'en avais fais une pour la fonction inkey en C trouvable facilement sur le forum. Je fini aussi un artcle en CASL et pourquoi pas un bench graphique en assembleur Z80

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: Le C sur pocket aide aux débutants

Message par charognard » 31 août 2010 22:40

Chris a écrit :Salut Charo,

Excellente idée cet article : vivement la suite pour des fonctions C un peu plus trapues et adaptées à nos pockets :wink:

As tu prévu de faire quelque chose sur l'assembleur ? par exemple, petite routine (calcul, graphique) appelée depuis le C ?

Tout cela me donne envie de resortir mon G850V :D
c'est fait maintenant

Répondre

Revenir vers « Tous les Pockets »