Structure sur G850

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 :

Structure sur G850

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

Les Sharp G850 prennent en charge les structures en C
Voici un exemple manipulant une pile de registre (à la HP pour les connaisseurs).
Il est cependant à noter que le passage des structures à des fonctions n'est permis que par pointeur.
Toujours de mon téléphone

Ainsi le programme suivant, fonctionnel, utilise un appel avec passage de la structure pile par pointeur.

Code : Tout sélectionner

10 #define _ pile->
20 struct registre{
30      double x,y,z,t;};
40 main(){
50 /*Initialisation de la pile*/
60      struct registre pile;
70 /*prototype des fonctions avec la structure en parametre*/
80      void affich(struct registre *);
90      void rotat(struct registre *);
100 /*affectation de la pile*/
110      pile.x=1,pile.y=2,pile.z=3,pile.t=4;
120 /*appel affichage*/
130     affich(&pile);
140 /*appel rotation*/
150      rotat(&pile);
160 /*appel affichage*/
170     affich(&pile);
180 }
190 /*affichage pile*/
200 void affich(struct registre * pile){
210      printf("\npile: %g %g %g %g",_ x,_ y,_ z,_ t);
220 }
230 /*rotation pile*/
240 void rotat(struct registre * pile){
250     double temp=_ x;
260     _ x=_ y,_ y=_ z,_ z=_ t,_ t=temp;
270 }
La fonction affich ne modifie aucunement la pile, elle pourrait donc, suivant la syntaxe officielle C, avoir un prototype de la sorte.

Code : Tout sélectionner

80 void affich(struct registre);
et une fonction

Code : Tout sélectionner

200 void affich(struct registre pile){
210      printf("\npile: %g %g %g %g",pile.x,pile.y,pile.z,pile.t);
220 }
Cependant sur le Sharp une erreur "(80) illegal s/u" est générée à la compilation.

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

Re: Structure sur G850

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

Intéressant, mais pourrais tu expliciter chaque ligne de code ? Mon C est très rouillé, ça me ferait du bien un petit cours de rappel (prototypes, utilisation des pointeurs...).

A++
: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: Structure sur G850

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

Qu'est ce que les structures ?

en basic les variables sont dites scalaires (terme érudit pour désigner qu'elles contiennent 1 et 1 seule donnée).
il y a aussi les variables tabulaires (Ex DIM A(30)) mais c'est qu'un troupeau de variables scalaires.

en C on ajoute les structures
simple à comprendre; elles se composent de 2 parties:
- la déclaration
- l'initialisation

analysons le code précédent :
en ligne 20 et 30 nous avons la déclaration

Code : Tout sélectionner

20 struct registre{
30      double x,y,z,t;};
qui désigne simplement un modèle de conteneur que on appelle ici "registre" (oserais-je parler d'une classe!) contenant quatre variables x,y,z et t.
ATTENTION notez bien que c'est uniquement le modèle

en ligne 60 nous avons l'initialisation

Code : Tout sélectionner

60      struct registre pile;
qui me crée une structure pile se basant sur le modèle registre.
nous voyons en ligne 110

Code : Tout sélectionner

110      pile.x=1,pile.y=2,pile.z=3,pile.t=4;
que pile contient une variable x,y,z et t. Mais à part mettre "pile." avant pour l'instant l'utilité semble extremement limité ....

alors ça sert à quoi ?

imaginons par exemple que avant un traitement quelconque (de notre émulateur RPN par exemple) on veuille sauvegarde la pile (de façon à avoir un UNDO par exemple).

en ligne 60 je pourrais faire 2 déclarations

Code : Tout sélectionner

60      struct registre pile,pilesauv
pour la sauvegarde de la pile je pourrais simplement utiliser cette ligne

Code : Tout sélectionner

60      pile=pilesauv;
et inversement pour le UNDO

Code : Tout sélectionner

60      pilesauv=pile;
Voilà une utilisation simple des structures, sachez simplement que on peut aussi déclarer une structure dans un tableau.
par exemple ce déclarera 10 piles

Code : Tout sélectionner

60      struct registre pile[9];
que l'on peut utiliser des structures dans des structures

Code : Tout sélectionner

20 struct registrepile{
30      double x,y,z,t;};
40 struct registre{
50      double a,b,c;
60      struct registrepile registre;
70      struct registrepile registresauv;
80 };
Enfin bref les structures c'est le début des classes qui donnent en plus la posibilité d'ajouter des fonctions et des procédures à l'interieur.


la suite bientot pour les pointeurs ....

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: Structure sur G850

Message par charognard » 20 août 2010 14:01

l'appelation 'prototype' c'est simplement la déclaration des fonctions.
en effet les fonctions étant déclarés après le main() il faut lui préciser que la fonction existe.
On pourrait déclarer les fonctions avant et là pas besoin de déclaration (quoique avec les types implicites...), mais conventionnellement c'est après.

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

Re: Structure sur G850

Message par pir2 » 20 août 2010 16:02

charognard a écrit :Enfin bref les structures c'est le début des classes qui donnent en plus la posibilité d'ajouter des fonctions et des procédures à l'interieur.
Euh, on n'a quand même pas le C++ sur le 850 8O , où bien je me trompe-je ?
charognard a écrit :la suite bientot pour les pointeurs ....
vi vi on attend ;)
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: Structure sur G850

Message par charognard » 20 août 2010 21:38

non, pas de classe, j'évoquais juste.
par contre on a les unions que je n'ai pas encore testé
et peut etre aussi les fonctions en paramètre.
et le fin du fin la manipulation des structures binaires ... je teste et j'en parle

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

Re: Structure sur G850

Message par pir2 » 20 août 2010 21:45

Dommage, ç'aurait été sympa.

Sur le VS peut-être (on peut toujours rêver) ?
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: Structure sur G850

Message par charognard » 20 août 2010 21:49

pour les structures 'champ de bit' ce n'est pas supporté
dommage

non le VS est au dernieres nouvelles un G newage

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: Structure sur G850

Message par charognard » 20 août 2010 21:59

pour les unions c'est supporté.
voir un manuel traitant du C ou sur demande je pourrais expliquer

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Structure sur G850

Message par gege » 21 août 2010 09:36

charognard a écrit :La fonction affich ne modifie aucunement la pile, elle pourrait donc, suivant la syntaxe officielle C, avoir un prototype de la sorte.

Code : Tout sélectionner

80 void affich(struct registre);
Cependant sur le Sharp une erreur "(80) illegal s/u" est générée à la compilation.
Pour préciser sur la modification de paramètres, tu passes tout par valeur en C (une copie), donc si tu veux modifier les paramètres passés libre à toi, il n'y a aucune raison que tu ne puisse pas. Pour simuler un passage par référence (où tu modifies l'original en modifiant le paramètre), il faut passer la valeur d'un pointeur qui pointe dessus et en permet donc la modification.

Après, pourquoi une erreur quand on passe une grosse structure ? Ben parce que tout est poussé sur la pile, et elle ne peut donc reçevoir que des "petits" types qui tiennent typiquement sur un mot machine. Exceptions, les nombres flottants, mais d'une part un langage sans eux aurait été difficile à utiliser, d'autre part leur taille est fixe et pas trop grosse (quelques mots).

Tes articles sont intéressants Charo, surtout leur déclinaison sur pockets, étrange que personne n'aie jamais écrit de gros programme en C pour nos petites bêtes ??
G.E.

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: Structure sur G850

Message par charognard » 21 août 2010 16:30

Même avec une petite structure ça ne passe pas mieux.
la déclaration des structures en paramètre de fonction est tout bonnement interdite sur le G850 (soit dit en passant les modèles casio ne les gère même pas).
dommage je pense que pédagogiquement les structures sont interessantes, ça doit pas faire parti du programme éducatif japonais.

je te remercie de tes engouragements Gégé au moins une personne que ça interresse :wink:

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

Re: Structure sur G850

Message par pir2 » 21 août 2010 22:15

Dans mon souvenir du C, tout paramètre "supérieur" à un scalaire devait être passé par adresse, mais je n'ai plus écrit de C depuis très longtemps.
En tout cas, pour un pocket à mémoire limitée, cette limitation me paraît justifiée.
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: Structure sur G850

Message par charognard » 21 août 2010 22:33

Non dans les 3 bouquins de C que j'ai chez moi (dont la bible).
l'implémentation par valeur fait parti du standard C


Enfin bref ma remarque c'est que le C du sharp ne supporte pas cette fonctionnalité
Dernière édition par charognard le 21 août 2010 22:34, é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: Structure sur G850

Message par pir2 » 21 août 2010 22:33

charognard a écrit :Non dans les 3 bouquins de C que j'ai chez moi (dont la bible).
l'implémentation par valeur fait parti du standard C
OK, je suis vraiment rouillé alors ;)
Image
Image

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2368
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Structure sur G850

Message par jxano » 22 août 2010 14:41

On peut regretter l'absence du mot-clé typedef sur G850 (j'ai fait des essais dans tous les sens, rien n'y fait... C'est toujours « Syntax error » !) C'est dommage car c'est précisément le prototype des fonctions avec passage de la structure par copie que le petit compilo n'aime pas... Et on ne serait pas obligé de répéter struct à chaque déclaration de variable !
Programmeur abscons.

Répondre

Revenir vers « Tous les Pockets »