Section courante

A propos

Section administrative du site

Les fonctions

Cette page décrit les fonctions arithmétiques, trigonométriques et de chaîne de caractères en ABasiC. Voir «Commandes d'entrée/sortie» et «Commandes graphiques» pour les fonctions spécifiques à ces catégories.

Fonctions arithmétiques

En plus des opérations arithmétiques simples, telles que l'addition et l'exponentiation, ABasiC fournit plusieurs fonctions numériques spéciales intégrées pour votre confort de programmation.

ABS

ABS(numeric expression)

La fonction ABS (valeur ABSolute) renvoie la valeur absolue de toute expression numérique. Les expressions positives et celles égales à zéro restent inchangées. Les expressions négatives sont multipliées par -1 pour les rendre positives. (L'utilisation de la fonction ABS avec l'entier négatif maximal provoque un débordement.)

  1. PRINT ABS( 345)

retournera :

345

Un autre exemple :

  1. PRINT ABS(-35)

retournera :

3

CDBL

CDBL(numeric expression)

La fonction CDBL convertit la valeur de toute expression numérique en un nombre réel à double précision. Par exemple, vous pouvez utiliser CDBL pour incrémenter la valeur d'une variable double précision d'un nombre entier ou de zéro.

  1. 30 A = 123.0012:B = 89.98933
  2. 40 R#= CDBL(A)*CDBL(B)
  3. 50 S#= CDBL(A*B)
  4. 60 PRINT R#: PRINT S#

La ligne 40 effectue la multiplication de réel en double précision, tandis que la ligne 50 multiplie en simple précision puis convertit un réel en double précision Le résultat est le suivant :

11058.95462619
11058.955078125

CSNG

CSNG(numeric expression)

La fonction CSNG convertit l'expression numérique spécifiée en un nombre simple précision.

CINT

CINT(numeric expression)

La fonction CINT convertit l'expression numérique spécifiée en entier, en l'arrondissant si nécessaire.

DEC

DEC("string")

La fonction DEC convertit toute chaîne de caractères numérique en un nombre décimal. La chaîne de caractères peut inclure les lettres hexadécimales A à F. Les valeurs hexadécimales doivent être comprises entre 0 et FFFF.

  1. PRINT DEC("&H2A")

retournera :

42

EXP

EXP(numeric expression)

La fonction EXP (exponentielle) élève la valeur de e (2,71828183) à la puissance spécifiée par l'expression numérique. EXP est l'opposé de la fonction LOG. L'utilisation d'un très grand argument avec EXP produit une erreur si le résultat est supérieur à la limite autorisée pour les nombres à virgule flottante. Les nombres fractionnaires et négatifs ne provoquent aucun débordement.

  1. PRINT EXP(40)

retournera :

2.353856+17

Un autre exemple :

  1. PRINT EXP(30-41.5)

retournera :

1.01301e-05

FRE

FRE[(numeric expression)]

La fonction FRE renvoie le nombre d'octets libres actuellement dans la plus grande section contiguë de RAM. Ces octets sont disponibles pour des lignes de programme, des variables et des tableaux supplémentaires.

C'est une bonne habitude d'utiliser FRE souvent lorsque vous entrez des lignes de programme pour garder une trace de la quantité de RAM restante.

FIX

FIX(numeric expression)

La fonction FIX convertit une expression numérique en entier en tronquant toute partie fractionnaire de la valeur de l'expression. FIX diffère de la fonction INT (décrite ci-dessous) en ce que INT arrondit la valeur de l'expression à l'entier inférieur suivant.

  1. PRINT FIX(37.605)

retournera :

37

INT

INT(numeric expression)

Utilisez la fonction INT (INTeger) pour convertir une expression numérique en entier en l'arrondissant à l'entier inférieur suivant, qu'il soit positif ou négatif.

  1. PRINT INT(15.7864)

retournera :

16

Un autre exemple :

  1. PRINT INT(-456.591)

retournera :

-457

Remarque : Si vous voulez une fonction fonctionnant comme INT mais arrondissant les nombres négatifs à l'entier immédiatement supérieur, essayez ce qui suit :

  1. SGN(X)*INT(ABS(X))

X est le nombre que vous voulez arrondir. Mieux encore, utilisez la commande DEF FN pour créer votre propre fonction à l'aide de cette expression.

Log

LOG(positive numeric expression)

La fonction LOG (LOGarithm) calcule le logarithme naturel d'une expression numérique. LOG est l'opposé de la fonction EXP, car LOG renvoie la puissance de e (2,71828183) créant l'expression numérique spécifiée. Les expressions négatives produisent une erreur, car il n'y a pas de puissances de e donnant un nombre négatif.

  1. PRINT LOG(835)

retournera :

6.72743

LOG10

LOG10(positive numeric expression)

La fonction LOG10 renvoie le logarithme en base 10 d'un nombre. La valeur de l'expression numérique doit être supérieure à zéro.

  1. 10 X = LOG10(1000)
  2. 20 PRINT X

Lorsque vous lancez le programme (puisque 10^3 = 1000), le résultat est :

3

MOD

numeric expression MOD numeric expression

La fonction MOD (MODulo) renvoie le reste de la division entière, où l'expression de gauche est divisée par l'expression de droite. Par exemple :

  1. PRINT 28 MOD 3

retournera :

1

(le reste après division).

RND

RND [(numeric expression)]

Utilisez RND (RaNDom) pour obtenir une fraction aléatoire entre 0 et 1. L'expression numérique entre parenthèses, le paramètre, affecte le fonctionnement de RND de la manière suivante :

Si le paramètre est un nombre positif, RND renvoie le nombre suivant dans la séquence actuelle de nombres aléatoires. L'effet est le même si vous omettez complètement le paramètre.

Si le paramètre est un nombre négatif, RND réinitialise le générateur de nombres aléatoires (c'est-à-dire utilise le paramètre spécifié pour générer une nouvelle séquence de nombres) et renvoie le premier nombre de la nouvelle séquence.

Si le paramètre est égal à zéro, RND renvoie le dernier nombre généré sans affecter la séquence en cours. RND(0) est utile pour déboguer un programme lorsque vous souhaitez qu'une valeur cohérente soit renvoyée.

  1. 10 FOR I=1 TO 4
  2. 20 X= RND(8): PRINT X
  3. 30 Y=INT(100*X):PRINT Y
  4. 40 NEXT I

Lorsque vous exécutez le programme, le résultat peut être :

.185564016
18
.0468986348
4
.827743801y
82
.554749226
55

Voir aussi la commande RANDOMIZE.

SGN

SGN(numeric expression)

La fonction SGN (SiGN) détermine si une expression numérique est positive, négative ou égale à zéro. S'il est positif, SGN renvoie un 1 ; s'il est négatif, il renvoie un -1 ; si égal à 0, il renvoie un 0.

  1. A = -4.353e21: PRINT SGN(A)

Lorsque vous exécutez le programme, le résultat peut être :

-1

Un autre exemple :

  1. A = 375: PRINT SGN(A)

retournera :

1

SQR

SQR(positive numeric expression)

La fonction SQR (SQuare Root) prend la racine carrée de l'expression numérique la suivant. La racine carrée d'un nombre négatif n'est pas un nombre réel ; ainsi, si vous essayez d'utiliser SQR avec un nombre négatif, vous produisez une erreur. (La fonction SQR fonctionne avec 0.)

  1. PRINT SQR(34.5)

retournera :

5.87367

VARPTR

VARPTR(variable | # file number)

La première forme de la fonction VARPTR (avec une variable) renvoie l'adresse de la variable spécifiée. Vous pouvez utiliser une telle adresse comme valeur à transmettre à une routine de langage machine. L'adresse renvoyée par VARPTR est une valeur entière que votre programme peut mettre (POKE) dans un autre emplacement.

Vous pouvez également obtenir l'adresse de début d'un tableau à l'aide de la syntaxe suivante :

VARPTR(variable(0))

Assurez-vous d'initialiser toutes les variables simples avant d'obtenir l'adresse d'un tableau, car l'adresse d'un tableau peut changer chaque fois que le système affecte un emplacement mémoire à une variable.

La deuxième forme de VARPTR (avec # et un numéro de fichier comme paramètre) renvoie l'adresse du tampon de fichier d'entrée/sortie pour le fichier que vous avez affecté à ce numéro. (Voir la commande OPEN pour plus de détails sur l'attribution des numéros de fichier.) Vous ne pouvez utiliser cette forme de commande qu'avec des fichiers de données à accès aléatoire.

  1. 20 D$ = "02/16/74"
  2. 50 ADDR = VARPTR(D$)
  3. 60 PRINT ADDR

Lorsque vous exécutez le programme, le résultat peut être :

264942

Fonctions trigonométriques

L'ABasiC offre quatre fonctions trigonométriques pour calculer les sinus, les cosinus, les tangentes et les arctangentes pour différents angles. Ces fonctions trigonométriques fonctionnent avec des valeurs exprimées en radians : pi/2 au lieu de 90 degrés ; pi/4 au lieu de 45 degrés ; pi au lieu de 180 degrés ; et ainsi de suite. Si vous êtes plus à l'aise avec les degrés qu'avec les radians, vous pouvez convertir la sortie d'une fonction en degrés en multipliant par 180/pi. De même, vous pouvez reconvertir les degrés en radians en multipliant par pi/180.

PI est une variable système que vous pouvez utiliser dans les programmes. Il s'agit d'une variable simple précision avec une valeur de 3,14159.

Si vous avez besoin de plus de fonctions trigonométriques que les quatre incluses ici, vous pouvez les créer à l'aide du tableau (intitulé Fonctions trigonométriques dérivées) suivant les descriptions des fonctions de commande trigonométriques. Pour plus d'efficacité, utilisez les expressions du tableau pour définir de nouvelles fonctions avec la commande DEF FN.

Le format générale de la fonction est :

function name (numeric expression in radians)

Voici les noms de la fonction (function name) et leurs descriptions :

function name Description
ATN Renvoie l'ArcTaNgent de l'expression numérique entre parenthèses. L'arctangente est l'opposé de la fonction TAN, puisqu'elle calcule l'angle (en radians) dont la tangente est égale à l'expression numérique. ATN renvoie toujours des valeurs comprises entre -pi/2 et +pi/2.
COS Renvoie le cosinus de l'expression numérique entre parenthèses.
SIN Renvoie le sinus de l'expression numérique entre parenthèses.
TAN Renvoie la tangente de l'expression numérique entre parenthèses. Si l'expression est égale à pi/2 (90 degrés), 3*pi/2 (270 degrés), ou une autre valeur équivalente à ces deux angles, une erreur se produit. En effet, la tangente d'un angle est le cosinus divisé par le sinus et le sinus des angles spécifiés est égal à zéro.

L'exemple de programmation suivant illustre chacune des quatre fonctions trigonométriques. Supposons que vous souhaitiez que votre programme calcule les valeurs de la fonction pour un angle de 30 degrés, THETA :

  1. 10 THETA = 30*PI/180: REM valeur radian = .5236
  2. 20 X = COS(THETA): V = SIN(THETA)
  3. 30 TANGENT = TAN(THETA)
  4. 40 PRINT X,Y,TANGENT
  5. 50 PRINT ATN(.5774)

Lorsque vous exécutez le programme, le résultat est :

 5000    8660    5774
30

Si vous avez besoin de fonctions trigonométriques avancées qu'ABasiC n'offre pas, vous pouvez les créer en utilisant les expressions suivantes :

Fonctions trigonométriques dérivées

Fonction Expression
Sécante : 1/COS(X)
Cosécante : 1/SIN(X)
Cotangente : 1/TAN(X)
Sinus inverse : ATN(X/SQR(-X*X+1))
Cosinus inverse : -ATN(X/SQR(-X*X+1))+PI/2
Inverse sécante : ATN(X/SQR(X*X-1))
Cosécante inverse : ATN(X/SQR(X*X-1))+(SGN(X)-)*PI/2
Cotangente inverse : ATN(X)+PI/2
Sinus hyperbolique : (EXP(X)-EXP(-X))/2
Cosinus hyperbolique : (EXP(X)+EXP(-X))/2
Tangente hyperbolique : EXP(-X)/(EXP(X)+EXP(-X))*2+1
Sécante hyperbolique : 2 /(EXP(X)+EXP(-X))
Cosécante hyperbolique : 2/(EXP(X)-EXP(-X))
Cotangente hyperbolique : EXP(-X) /(EXP(X) -EXP(-X ))*2+1
Sinus hyperbolique inverse : LOG(X+SQR(X*X+1))
Cosinus hyperbolique inverse : LOG(X+SQR(X*X-1))
Tangente hyperbolique inverse : LOG((1+X)/(1-X))/2
Sécante hyperbolique inverse : LOG((SQR(-X*X+1)+1)/X)
Cosécante hyperbolique inverse : LOG((SGN(X)*SQR(X*X+1)/X)
Cotangente hyperbolique inverse : LOG((X+1)/(X-1))/2

Fonctions de chaîne de caractères

Il est souvent utile de modifier des parties de la valeur actuelle d'une variable de chaîne de caractères ou de comparer des parties d'une chaîne de caractères avec une autre. L'ABasiC fournit un certain nombre d'opérations spéciales que vous pouvez facilement effectuer sur les chaînes de caractères et les valeurs de variables de chaîne de caractères dans vos programmes. (Voir aussi Fonctions de position d'écran et la commande REPLACE$.)

ASC

ASC("string")

La fonction ASC transforme un caractère de chaîne de caractères en un numéro de code ASCII ; c'est l'inverse de CHR$. Vous pouvez entrer une chaîne de caractères de n'importe quelle longueur, bien que ASC ne renvoie que le code ASCII de son premier caractère. Par exemple :

  1. PRINT ASC("BANANES")

renvoie le code ASCII du premier caractère, B. La page Codes de caractères ASCII contient une liste de codes ASCII de l'ensemble de caractères ABasiC.

CHR$

CHR$(integer)

La fonction CHR$ convertit un entier en une chaîne de caractères à un caractère selon le code ASCII. L'intervalle du nombre va de 0 à 255. Par exemple, le code ASCII pour «A» est 65, donc l'instruction :

  1. PRINT CHR$(65)

retournera :

A

La page Codes de caractères ASCII répertorie la table des codes ASCII.

La fonction CHR$ est pratique pour insérer des caractères difficiles à gérer dans une chaîne de caractères. Par exemple, vous pouvez utiliser CHR$ pour ajouter un saut de ligne et un retour chariot (représentés par ASCII 10) à une chaîne de caractères. Vous ne pouvez pas mettre de retour chariot dans une chaîne de caractères sans CHR$, car lorsque vous appuyez sur Return, cela termine immédiatement la chaîne de caractères que vous entrez.

  1. 10 A$="ESCALIER"+CHR$(10),SPACE$(5);"SAUT"
  2. 20 PRINT A$

Lorsque vous exécutez le programme, le résultat est :

ESCALIER
     SAUT

HEX$

HEX$(numeric expression)

La fonction HEX$ renvoie une chaîne de caractères étant la représentation hexadécimale (base 16) de l'expression numérique que vous spécifiez. Les lettres A à F représentent les chiffres décimaux de 10 à 15. HEX$ n'ajoute pas de «&H» à la chaîne de caractères pour représenter la base. Il arrondit la valeur de l'expression numérique à l'entier le plus proche avant de la convertir.

INSTR

INSTR( [integer,] "target string","pattern string")

La fonction INSTR recherche une chaîne de caractères (la chaîne de modèle) dans une autre (la chaîne de caractères cible) et renvoie la position de la chaîne de caractères de modèle. Les chaînes de caractères cible et modèle peuvent être des constantes de chaîne de caractères, des expressions ou des variables. L'entier est un point de départ facultatif dans la chaîne de caractères cible et doit avoir une valeur comprise entre 1 et 255.

  1. 10 X$ = "ETRE OU NE PAS ETRE"
  2. 20 X = INSTR(6,X$,"ETRE")
  3. 30 PRINT X

Lorsque vous exécutez le programme, le résultat est :

17

La première occurrence de "BE" n'est pas renvoyée, car le point de départ est le sixième caractère.

LEFT$

LEFT$("string",integer)

Utilisez la fonction LEFT$ pour extraire une sous-chaîne de caractères (une partie d'une chaîne de caractères), en commençant par le côté gauche d'une chaîne de caractères plus grande. Après la commande LEFT$, placez la chaîne de caractères cible ou le nom de la variable entre parenthèses, suivi d'une virgule et du nombre de caractères que vous souhaitez extraire. Ce nombre doit être compris entre 1 et 255. Un entier supérieur ou inférieur produit une erreur. (Les nombres fractionnaires sont simplement tronqués à l'entier inférieur.)

Si vous spécifiez une longueur de sous-chaîne de caractères égale ou supérieure à la chaîne de caractères d'origine, la fonction renvoie la chaîne de caractères d'origine entière. Si vous spécifiez une longueur de zéro (0), le résultat est une chaîne de caractères nulle (ne contenant aucun caractère).

  1. 10 Z$="TOI"
  2. 20 FOR I=1 TO 3
  3. 30 PRINT LEFT$(Z$,I)
  4. 40 NEXT I

Lorsque vous exécutez le programme, le résultat est :

T
TO
TOI

LEN

LEN("string")

La fonction LEN renvoie le nombre de caractères (y compris les blancs, les signes de ponctuation et les caractères non affichables) dans une chaîne de caractères. ABasiC ne compte pas les guillemets englobants. Après le nom de la fonction LEN, placez la chaîne de caractères ou la variable de chaîne de caractères entre parenthèses.

  1. 10 A$="POLYSYLLABIQUE"
  2. 20 PRINT LEN(A$)

Lorsque vous exécutez le programme, le résultat est :

14

MID$

MID$("string",integer-1 [ ,integer-2])

MID$ extrait également les sous-chaînes de caractères. Contrairement à LEFT$, cependant, il peut commencer à n'importe quel endroit de la chaîne de caractères. Vous devez spécifier le numéro du premier caractère de la chaîne de caractères cible (integer-1). Vous pouvez également donner la longueur de la sous-chaîne de caractères souhaitée (integer-2). Si vous omettez la longueur, MID$ renvoie le reste entier de la chaîne de caractères d'origine, en commençant par le caractère demandé.

Placez la chaîne de caractères ou la variable de chaîne de caractères souhaitée entre parenthèses, suivie d'une virgule et du numéro du caractère de début (à partir de la gauche) de la sous-chaîne de caractères. Si vous souhaitez spécifier une longueur de sous-chaîne de caractères, ajoutez une autre virgule suivie du nombre de caractères.

Si le nombre de caractères de début est supérieur à la longueur de la chaîne de caractères principale, ou si vous spécifiez une longueur de sous-chaîne de caractères égale à zéro, la fonction MID$ renvoie une chaîne de caractères nulle (ne contenant aucun caractère). Si vous spécifiez une longueur de sous-chaîne de caractères supérieure au nombre de caractères restant dans la chaîne de caractères cible, la sous-chaîne de caractères inclut le reste de la chaîne de caractères cible.

  1. 10 A$="MAITRE MARCO"
  2. 20 GOSUB 100
  3. 30 A$="MAITRE LAFONTAINE"
  4. 40 GOSUB 100
  5. 50 END
  6. 100 PRINT MID$(A$,8)
  7. 110 RETURN

Lorsque vous exécutez le programme, le résultat est :

MARCO
LAFONTAINE

OCT$

OCT$(numeric expression)

La fonction OCT$ renvoie une chaîne de caractères étant la représentation octale (base 8) de l'expression numérique. L'ABasiC arrondit la valeur de l'expression numérique à l'entier le plus proche avant de la convertir.

RIGHT$

RIGHT$("string",integer)

La fonction RIGHT$ fonctionne comme LEFT$, mais elle extrait une sous-chaîne de caractères en partant du côté droit au lieu du côté gauche de la chaîne de caractères cible. Placez la chaîne de caractères cible (ou le nom de la variable) entre parenthèses, suivie d'une virgule et du nombre de caractères que vous souhaitez extraire.

  1. 10 JOG$= "L'HOMME AU GROS NEZ FAIT DE LA COURSE."
  2. 20 PRINT RIGHT$(JOG$,25)

Lorsque vous exécutez le programme, le résultat est :

L'HOMME AU GROS NEZ FAIT DE LA COURSE.

SPACE$

SPACE$(integer)

La fonction SPACE$ incorpore des blancs dans une instruction PRINT. L'entier que vous spécifiez détermine le nombre d'espaces à afficher. Il doit être compris entre 0 et 255. (Remarque : la fonction SPC est plus efficace à cet effet et son utilisation est recommandée. Voir la sous-section sur les fonctions de position d'écran pour plus de détails.)

Vous pouvez également utiliser SPACE$ en dehors d'une instruction PRINT. Par exemple, voici une instruction d'affectation valide :

  1. A$ = "Sous-total"+SPACE$(4)+"$"     

STRING$

STRING$(integer-1,integer-2 | "string")

La fonction STRING$ renvoie une chaîne de caractères de longueur donnée remplie avec les caractères spécifiés. Le premier entier spécifie la longueur et doit être compris entre 0 et 255. Le deuxième paramètre, soit un deuxième entier soit une expression de chaîne de caractères, définit le ou les caractères avec lesquels remplir la chaîne de caractères.

Si le deuxième paramètre est numérique, ABasiC interprète sa valeur comme le code ASCII du caractère de remplissage. Si le paramètre est une chaîne de caractères, il doit comporter au moins un caractère. Cependant, si la chaîne de caractères comporte plus d'un caractère, ABasiC n'utilise que le premier caractère pour remplir la chaîne de caractères.

  1. 10 STAR$ = STRING$(18, "*")
  2. 20 PRINT STAR$:PRINT "PROGRAMME D'ETOILE":PRINT STAR$

Lorsque vous exécutez le programme, le résultat est :

******************
PROGRAMME D'ETOILE
******************

STR$

STR$(numeric expression)

Utilisez la fonction STR$ pour convertir une expression numérique en expression de chaîne de caractères. Ceci est utile lorsque vous souhaitez manipuler les chiffres d'un nombre en tant que caractères de chaîne de caractères. L'expression numérique peut être n'importe quelle variable ou constante valide en ABasiC, y compris des entiers ou des nombres à virgule flottante. Vous pouvez exprimer un nombre à virgule flottante sous la forme d'un nombre simple ou en notation scientifique.

Lorsque STR$ renvoie la conversion de chaîne de caractères d'un nombre positif ou zéro, il ajoute un blanc au début de la chaîne de caractères. STR$ renvoie la conversion de chaîne des nombres négatifs avec un signe moins à la place de l'espace précédent. Les nombres simples de plus de neuf chiffres sont convertis en notation scientifique avant de devenir une chaîne de caractères. Si les nombres de notation scientifique peuvent être réduits avec précision à un simple nombre de neuf chiffres ou moins, ils sont convertis en un simple nombre avant de devenir une chaîne de caractères.

La fonction STR$ fonctionne avec des valeurs décimales. Utilisez HEX$ pour convertir les valeurs hexadécimales et OCT$ pour les valeurs octales.

  1. 10 A=105.78
  2. 20 C$=STR$(A)
  3. 30 CENT$=RIGHT$(C$,2)
  4. 40 PRINT CENT$;" CENTS"

Lorsque vous exécutez le programme, le résultat est :

78 CENTS

VAL

VAL("string")

Utilisez la fonction VAL pour convertir une chaîne de caractères en nombre. Après VAL, mettez la chaîne de caractères que vous souhaitez convertir entre parenthèses. La fonction VAL est l'opposé de STR$ en ce sens qu'elle transforme une chaîne de caractères en nombre plutôt qu'un nombre en chaîne de caractères.

Le premier caractère de la chaîne de caractères doit être un chiffre, un signe plus ou un signe moins. Il peut également s'agir d'un espace, car VAL ignore les espaces dans les chaînes de caractères. S'il trouve un autre premier caractère, VAL renvoie la valeur zéro.

Si VAL trouve un premier caractère acceptable, il convertit jusqu'à ce qu'il arrive à la fin de la chaîne de caractères ou rencontre un caractère non numérique. Par exemple :

  1. PRINT VAL("435 RUE DES VIOLETTES")

VAL convertit également une chaîne de caractères sous une forme de notation scientifique correcte en un nombre. Par exemple :

  1. PRINT VAL ("1.756E18")

retournera :

1.756E+18

Et un autre exemple :

  1. 10 ADDRESS$="ALMA, QC 77516"
  2. 20 ZIP$=RIGHT$(ADDRESS$,5)
  3. 30 IF VAL(ZIP$)>77000 THEN PRINT "NORD DU QUEBEC"

Lorsque vous exécutez le programme, le résultat est :

NORD DU QUEBEC

Dernière mise à jour : Vendredi, le 12 mai 2023