| Opérateurs arithmétiques | |
|
|
Auteur | Message |
---|
ANDRES André
Nombre de messages : 3 Date d'inscription : 27/09/2009
| Sujet: Opérateurs arithmétiques Mar 29 Sep 2009 - 9:17 | |
| Pour une division on emploie le signe (/) Pour connaître le reste d'une division on employait (MOD). Sur Panoramic que doit-on faire pour trouver le reste ? | |
|
| |
Invité Invité
| Sujet: Re: Opérateurs arithmétiques Mar 29 Sep 2009 - 10:17 | |
| Bonjour ANDRES André la commande pour trouver le reste est FRAC() - Code:
-
dim a,b a=123.45 /2 print "a=";str$(a) print "reste:";frac(a) par contre le résultat est décimal, ainsi dans l'exemple on voit: a=61.725 reste:0.72500000000001 je n'est pas compté le nb de 0 c'est vrai que c'est pas très pratique, on a le résulta plus simple avec: - Code:
-
print a-int(a) qui donne 0.725 il y a une façon de procéder qui n'est pas pratique, ou faire une routine pour le résultat: - Code:
-
print val(mid$( str$(a-int(a)),3,len(str$(a-int(a)))-1)) qui donne ici:725 comme nombre, pour un string, on retire val( ) soit: - Code:
-
print mid$( str$(a-int(a)),3,len(str$(a-int(a)))-1) qui donne aussi 725, mais là, ce n'est que des caractères. Mais je ne suis pas math, si d'autres ont mieux! A+ |
|
| |
ANDRES André
Nombre de messages : 3 Date d'inscription : 27/09/2009
| Sujet: Opérateurs arithmétiques Mar 29 Sep 2009 - 15:59 | |
| Je vous remercie beaucoup pour votre réponse. Je suis tout nouveau dans Pan. Je me doutais un peu pour Frac(), mais ne savais pas comment l'employer exactement. Encore merci et bien sincèrement. | |
|
| |
Invité Invité
| Sujet: Re: Opérateurs arithmétiques Mar 29 Sep 2009 - 16:44 | |
| De rien, je ne l'avais jamais employé, puisque cela fait 1mois1/2 que je suis sur panoramic, je savais que je l'avais vu, mais franchement, elle n'est pas pratique. Normalement, si je me souvient bien, lorsqu'on a une instruction en basic, donnant le reste d'une division, on a un nombre entier. avoir un résultat décimal, ne facilite pas les choses.Je ne sais pas ce qu'en pense les autres, il faudrait voir si Jack accepterait de modifier son instruction. Le problème est la compatibilité avec des programmes que d'autre ont fait avant. Peut-être y a t-il une autre possibilité. J'avais essayé avec ça: - Code:
-
dim a,b
a=145.01 b=a-int(a) print b," partie décimale:";b*power( 10,len(str$(b))-2) Mais cela donne la même chose, sauf et là il y a erreur, si le 1er chiffre après la virgule est un zéro. Sur cet exemple, si une personne trouve une autre possibilité, vu mon faible niveau en math. L'instruction avec mid$ peut-être remplacée par: - Code:
-
print right$( str$(a-int(a)),len(str$(a-int(a)))-2) Et là je viens de voire une erreur et ça pose de nouveau un problème, parce que le résultat est juste s'il s'agit d'une chaine, mais faux si on prends la valeur de la chaine (c'est vrai aussi pour ce que j'ai déjà édité la fois d'avant). Dès qu'il y a un zéro au départ, il y a un décalage dans la valeur de la chaine exemple: a=12.0123 le reste est 0123, la valeur est: 123. Je vois ça maintenant, ça dépend de ce que tu veux faire avec le reste, en tout cas, je viens de remarquer qu'on ne peut considérer que cela est juste. Je laisse les autres venir à ton aide.Si tu fais un programme, et tu sais le nombre de décimal que tu utilises, alors multiplie tout par 10,100,1000, et affiche le résultat en divisant par 10,100,1000,.... Cette fois-ci je suis hors course. Je ne retire rien de tout ce que je viens d'écrire, pour voir le cheminement qui m'a amené à cette conclusion, et que d'autre ne parte pas sur la même erreur. A+ |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Opérateurs arithmétiques Mar 29 Sep 2009 - 17:03 | |
| Personnellement je considère que c'est un (petit) bug de Panoramic, en reprenant l'exemple de Cosmos - Code:
-
a = 123.45 b = 2 print a/b: rem -> = 61.725 print frac(a/b): rem -> = 0.725000000000001 au lieu de 0.725 rem ... a= 123.45678 b = 2 print a/b: rem -> = 61.72839, correct print frac(a/b); rem -> = 0.728389999999997, au lieu de 0.72839 il y a une conversion qui se fait mal. Sinon, c'est normal que Frac donne la partie fractionnaire, à l'utilisateur de la convertir suivant ce qu'il veut en faire. En QBasic, le MOD renvoie un nombre entier, arrondi au plus près: a/b donne 61.725 a MOD b donne 1 (c'est à dire 0,725 arrondi à 1) donc pratiquement à n'utiliser qu'avec des nombres entiers. | |
|
| |
ANDRES André
Nombre de messages : 3 Date d'inscription : 27/09/2009
| Sujet: Opérateurs arithmétiques Mar 29 Sep 2009 - 17:37 | |
| Encore merci. Voilà une dizaine d'années j'avais créé un programme pour trouver la clef de tous les comptes. J'aurais aimé le retranscrire sur PAN pour m'habituer à cette nouvelle programmation. La syntaxe de MOD était: X MOD Y l'opération MOD renvoie le reste de la division entière de X par Y. Ce reste est lui mème un entier. Ex.: 12345/2 = 6172 et le reste est égal à 1. Pour suivre l'exemple que tu m'as donné: 12345/2 = 6172.5 et le reste est égal à 0.5 Il m'est donc nécessaire de trouver le 1 dans cet ex.. Voilà, si tu trouves............ Bonne soirée. | |
|
| |
Invité Invité
| Sujet: Re: Opérateurs arithmétiques Mar 29 Sep 2009 - 17:57 | |
| Trouve tu la solution avec ceci: - Code:
-
dim a,b repeat input "nombre svp:";a print "a-int(a)=";a-int(a) print " int( frac(a)*10 +.5) :";int(frac(a)*10 +.5) print " int( frac(a)*100 +.05 ):";int(frac(a)*100 +.05) print " int( frac(a)*1000+.005):";int(frac(a)*1000+.005) print until a=0 terminate Est-ce que cela te convient? A+ Tu ne dis pas combien tu veux de chiffres après la virgule, Maintenant le laisse la solution à d'autre A+ |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Opérateurs arithmétiques Mar 29 Sep 2009 - 22:18 | |
| @André Si je comprends bien, tu veux obtenir en Panoramic l'équivalent du MOD du Basic ? (on suppose que a et b sont des entiers, et le résultat sera un entier) - Code:
-
resteentier = b * (a/b - INT(a/b)): Rem équivalent à: a MOD b du QBasic | |
|
| |
Invité Invité
| Sujet: Re: Opérateurs arithmétiques Mer 30 Sep 2009 - 7:47 | |
| J'en sais rien vu vu que c'est une instruction que je n'utilisais pas. J'ai pas trouvé l'équivalent en justbasic, il me semble qu'elle existait en Gfa basic d'Atari, mais je ne m'en rappel pas. J'essaye tout simplement de répondre à la demande de Andres. Simplement il me semble normal d'intervenir à la place de Jack si on peut le laisser tranquille. J'aurai préférai qu'un autre intervienne, pour une instruction que je n'utilise pas. Dans le type de prog que je fais, je n'ai pas besoin de cette instruction, par contre en python, elle est très employée et facile à utilisée. A+ |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Opérateurs arithmétiques Mer 30 Sep 2009 - 10:17 | |
| Eh bien c'est fait, je lui ai donné la solution en une ligne de code sans déranger Jack (ça ne valait vraiment pas la peine). Exemple d'utilisation que j'en avais en QBasic: analyse d'un fichier binaire par blocs de longueur donnée (pour copie, analyse etc...) Soient: lf = taille du fichier lb = taille d'un bloc Il faudra faire n boucles de lecture: n = lf\lb * partie entière de la division et pour finir une lecture de lr octets: lr = lf MOD lb * reste de la division soit, en Panoramic: - Code:
-
n = INT(lf / lb) lr = b * (lf / lb - n) Malheureusement, en Panoramic on ne peut pas lire un fichier binaire par blocs mais seulement octet par octet. PS: une remarque pour André: ton sujet aurait été mieux dans la rubrique "A l'Aide !" | |
|
| |
Invité Invité
| Sujet: Re: Opérateurs arithmétiques Mer 30 Sep 2009 - 12:48 | |
| Puisqu'on parle de MOD ou FRAC(), vous vous en servez pour quoi faire? En faisant un essai, je viens de voir que modulo en python, ce n'est pas la même chose. Frac donne la partie décimal, alors que modulo en Python (puisque j'ai fais référence plus haut) donne le reste de la division: frac(12/5)=0.4, alors que 12 % 4 en python donne 2, soit 12- (2X5)=2. Là encore une fois, je suis hors sujet. Cela ma permit d'apprendre quelque chose, comme chaque fois que je me plante! A+ |
|
| |
Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: re Mer 30 Sep 2009 - 13:42 | |
| salut andré voici une commande qui peut remplacer MOD c'est à dire le reste d'une division. - Code:
-
re2 = a - (int(a/b) * b)
cela fonctionne avec des décimales. Il suffit bien entendu que a soit supérieur à b et que b soit différent de zéro. pour exemple, essaye ce code - Code:
-
dim a,b,re,re2 label debut,fin debut: input "a:";a input "b:";b if b=0 then goto fin re = b * (a/b - int(a/b)) re2 = a - (int(a/b) * b) print print "reste = ";re print print "reste2 = ";re2 print wait 2500 goto debut fin: terminate
le "re2" est plus précis et exacte que le "re" désolé JL35, mais il me semble que ta formule dans certains donne des chiffres approximatif georges @+ | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Opérateurs arithmétiques Mer 30 Sep 2009 - 14:42 | |
| Bravo Georges, tu as mis le doigt sur la faille, les arrondis de Panoramic compliquant un peu la chose. IL faut évidemment déclarer le reste du calcul comme 'entier', c'est à dire: - Code:
-
reste% = b * (a/b - Int(a/b)) pour éviter ces valeurs parasites de 45,00000000001 ou 44,99999999999 Mais je reconnais que ta formule: - Code:
-
reste = a - (Int(a/b) * b) qui donne systématiquement un entier est aussi simple et résout élégamment le problème. Edit: Finalement c'est exactement la même formule, si on développe la mienne: r = b * (a/b - Int(a/b)): rem *** ma formule -> r = b * a/b - b * Int(a/b) -> r = a - b * Int(a/b): rem *** la formule de Georges et ça semble traité différemment par Panoramic... ???
Dernière édition par JL35 le Mer 30 Sep 2009 - 15:13, édité 2 fois | |
|
| |
Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: re Mer 30 Sep 2009 - 15:11 | |
| | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Opérateurs arithmétiques Mer 30 Sep 2009 - 15:13 | |
| ... je viens d'éditer pendant que tu parlais... | |
|
| |
Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: RE Mer 30 Sep 2009 - 15:17 | |
| Salut JL35 Pour la formule que j'ai donné, je me réfère uniquement à la logique arithmétique. georges @+ | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Opérateurs arithmétiques Mer 30 Sep 2009 - 15:26 | |
| Moi aussi évidemment, et mathématiquement c'est exactement la même formule comme je le montre plus haut, mais exprimée à ta façon elle rend un entier correct, alors qu'à la mienne elle rend des décimales intempestives. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Opérateurs arithmétiques | |
| |
|
| |
| Opérateurs arithmétiques | |
|