Aide - Recherche - Membres - Calendrier
Version complète : 3 "petites" questions de beotien
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
electrop
Ca y est, je me suis lançé.

J'ai installé un ensemble Cygwin+PRC-Tolls+SDK 4.0 sur mon PC et ça marche.
En rassemblant mes vieux souvenirs de C, je me suis donc lançé dans la conception de mon premier petit programme, et c'est pas évident icon_cry2.gif

Pour situer un peu les choses : j'ai un programme avec un formulaire unique, sur lequel j'ai deux champs pour entrer des valeurs. En appuyant sur un bouton, je lance une formule mathématique en lisant ces deux valeurs et j'affiche les résultat dans un troisième champ.

1° Les valeurs en entrée devant être exclusivement numériques, mes champs actuels me retournent de l'ASCII. Je suis donc obligé de passer par la fonction StrAtoI pour retourner vers des entiers mais le compilateur n'en veut pas ("Undefined reference to..."). Quelles est la librairie à inclure pour que ça marche ?

2° Ma formule fait intervenir la fonction mathématique "puissance". Comment dois-je l'écrire pour que ça passe ? Car il ne semble pas comprendre le classique "x^y"

3° Pour écrire le résultat dans mon troisième champ, je dois utiliser quoi ? Parce que pour l'instant, je passe par "WinDrawChar", mais ça me dessine des caractères sans rapport avec mon champ :?

Cetainement "petites" questions pour qui s'y connait un peu en programmation Palm, mais pour l'instant sans réponse, pour moi qui débute avec bien du mal pour m'y retrouver icon_cry.gif
Patrice
1) Ce n'est pas une "librairie" que tu dois inclure, un .h est un fichier de déclaration (simple question de sémantique). Tu devrais inclure le fichier PalmOS.h et tu auras tout ce qu'il te faut dedans (au moins dans un premier temps). Si StrAToI n'est pas trouvé, c'est probablement une erreur de frappe sur son nom.

2) Sais pas icon_bla.gif

3) Jette un coup d'oeil sur la doc des Fields (fonctions FldSet...)
snark
CITATION(electrop)
2° Ma formule fait intervenir la fonction mathématique "puissance". Comment dois-je l'écrire pour que ça passe ? Car il ne semble pas comprendre le classique "x^y"

pow(x,y) ?
electrop
CITATION(Patrice)
1) Ce n'est pas une "librairie" que tu dois inclure, un .h est un fichier de déclaration (simple question de sémantique). Tu devrais inclure le fichier PalmOS.h et tu auras tout ce qu'il te faut dedans (au moins dans un premier temps). Si StrAToI n'est pas trouvé, c'est probablement une erreur de frappe sur son nom.


Soit, mais j'ai bien inclu PalmOS.h, et j'ai aussi vérifié la frappe : RAS
Il y a certainement autre chose qui m'échappe icon_cry2.gif
[EDIT] Effectivement, j'avais mis un "t" minuscule dans StrAToI :-§ [/EDIT]

CITATION(Patrice)
3) Jette un coup d'oeil sur la doc des Fields (fonctions FldSet...)

Ok, je vais m'y replonger

CITATION(snark)
CITATION(electrop)
2° Ma formule fait intervenir la fonction mathématique "puissance". Comment dois-je l'écrire pour que ça passe ? Car il ne semble pas comprendre le classique "x^y"

pow(x,y) ?


Il n'en veut pas non plus, ou alors il me manque le fichier de déclaration...
Eddy
CITATION(electrop)
Il n'en veut pas non plus, ou alors il me manque le fichier de déclaration...


<vieux souvenirs de programmation>
une proposition au pif :

x**y

</vieux souvenirs de programmation>

vraiment pas sûr de moi
Eddy
snark
CITATION(electrop)
CITATION(snark)
pow(x,y) ?
Il n'en veut pas non plus, ou alors il me manque le fichier de déclaration...

Je suppose qu'il faut faire un include de math.h.
Sinon, tu la codes toi-même:
CODE
double power(double val, unsigned pow)

{       double ret_val = 1.0;

       unsigned i;



       for(i = 0; i < pow; i++)

               ret_val *= val;



       return(ret_val);

}
(types de données à adapter au Palm)
electrop
Effectivement, j'avais commençé par me tourner vers MathLib mais quand j'ai voulu compiler, il m'a renvoyé toute une bordée d'erreurs sur MathLib.h 8O

Au final, je crois que je vais me tourner vers la solution de snark. Je vais coder la fonction directement et comme ça, ce sera beaucoup plus simple.

Merci à vous

PS : Eddy, pour info, j'ai essayé x**y et ça ne marche pas non plus.
oupsman
CITATION(snark)
CITATION(electrop)
CITATION(snark)
pow(x,y) ?
Il n'en veut pas non plus, ou alors il me manque le fichier de déclaration...

Je suppose qu'il faut faire un include de math.h.
Sinon, tu la codes toi-même:
CODE
double power(double val, unsigned pow)

{       double ret_val = 1.0;

       unsigned i;



       for(i = 0; i < pow; i++)

               ret_val *= val;



       return(ret_val);

}
(types de données à adapter au Palm)


Ce n'est pas un vrai calcul de puissance. On peut normalement calculer un nombre à la puissance 0,25, 0,5 1,4656987.

J'ai une formule quelque part, j'essaye de la retrouver
snark
CITATION(oupsman)
Ce n'est pas un vrai calcul de puissance. On peut normalement calculer un nombre à la puissance 0,25, 0,5 1,4656987.

Oui mais, si ma mémoire ne me trompe pas, ça demande de jouer avec les logarithmes néperiens et les exponentielles.

Donc ça nécessite la libraire mathlib. Si electrop n'a besoin que de puissance de nombres entiers, alors ma méthode est moins lourde. anim_wink.gif
snark
CITATION(snark)
CITATION(oupsman)
Ce n'est pas un vrai calcul de puissance. On peut normalement calculer un nombre à la puissance 0,25, 0,5 1,4656987.

Oui mais, si ma mémoire ne me trompe pas, ça demande de jouer avec les logarithmes néperiens et les exponentielles.

Je confirme: x^y = exp(y * ln(x)) , cfr cette page! 8O
oupsman
CITATION(snark)
CITATION(oupsman)
Ce n'est pas un vrai calcul de puissance. On peut normalement calculer un nombre à la puissance 0,25, 0,5 1,4656987.

Oui mais, si ma mémoire ne me trompe pas, ça demande de jouer avec les logarithmes néperiens et les exponentielles.

Donc ça nécessite la libraire mathlib. Si electrop n'a besoin que de puissance de nombres entiers, alors ma méthode est moins lourde. anim_wink.gif


C'est vrai aussi.
electrop
Nouvel SOS.

En fait, mes caculs de puissance faisant intervenir des exposants non entiers, je suis bien obligé de passer par MathLib.

Pour ce faire, j'ai suivi les explications à la lettre pour charger la bibliothèque partagée à l'ouverture du programme, la libérer à la fin ... De ce côté là, ça à l'air d'être bon.

Le problème, c'est qu'il faut que j'ajoute MathLib.h à mon programme et mon compilateur refuse obstinément de compiler ça :?
A chaque fois, j'ai toute une bordée d'erreur correspondant apparement à des types qu'il ne reconnaît pas (notamment UInt, ULong 8O ).
Pourtant, j'ai a priori la dernière version de MathLib (1.1) et j'ai installé les PRC-Tools (le compilateur, du moins) en version 2.95.3

Alors qu'est-ce qui cloche? Dois-je passer des option particulières au compilateur ? Lequelles ? Les types qu'il ne semble pas reconnaître sont réellement obsolètes, ou ça devrait marcher ?

Merci pour vos lumières
electrop
Apparement, c'est effectivement un problème de compatibilité entre versions. En fouillant un peu, j'ai trouvé un fichier "PalmCompatibility.h" qui semble déjà resoudre une bonne partie des erreurs rencontrées (mais pas encore toutes. Je continue à chercher)
Patrice
UInt et ULong sont des types qui datent de très vieilles versions du SDK PalmOS. Si tu ne trouves pas de version plus récente de Mathlib, il faut que tu ajoutes PalmCompatibility.h devant mathlib.h (je ne sais pas si cela suffira). L'idéal serait quand même de trouver une version plus récente de mathlib.h.
electrop
C'était bien ça.
Pour une fois, j'avais trouvé avant que Super-Patrice me donne la réponse. Merci quand même icon_biggrin.gif

Avec PalmCompatibility.h et encore une toute petite modif dans MathLib.c (qui appelait Pilot.h au lieu de PalmOS.h), ça marche anim_hello.gif

Pourtant, j'avais bien cherché sur le net et je pensais avoir la dernière version de Mathlib. Mais bon, je menerai l'enquête plus tard
Patrice
A priori, la version disponible sur la page de l'auteur est compatible avec les SDK "modernes"...

http://www.radiks.net/~rhuebner/mathlib.html
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.