Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Rédacteur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 084
    Points : 1 976
    Points
    1 976

    Par défaut Exemples de code pour Algebrus XPascal

    Je me propose de réunir ici quelques exemples de code pour Algebrus XPascal. Si vous voulez contribuer, n'hésitez pas !

    Qu'est-ce qu'Algebrus ? Pour résumer, je dirais que c'est une sorte de calculatrice programmable en Pascal. Cette calculatrice a des fonctions graphiques. Elle peut lire et écrire des fichiers.

    Quant au langage XPascal, pour ce que j'en ai vu, il ajoute au Pascal classique 1° des fonctions d'affichage amélioré 2° des types de variable, comme le type Vector.

    Le programme suivant calcule des valeurs approchées de racine de 2 jusqu'à ce que la meilleure approximation soit atteinte. Les résultats sont ajoutés au fur et à mesure dans un vecteur.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    // Algebrus XPascal
     
    program racine_de_2;
     
    function U(a, n: Integer): Real;
    // Approximations de la racine carrée de a
    // "n" est le nombre d'itérations
    var
      i: Integer;
      temp: Real;
    begin
      temp := a;
      for i:= 1 to n do
      begin
        temp := 0.5 * (temp + a / temp);
      end;
      result := temp;
    end;
     
    var
      resultat, precedent: Real;
      i                  : Integer;
      stop               : Boolean;
      vecteur            : Vector;
     
    begin
      precedent := 0;
      i := 0;
      stop := False;
      SetLength(vecteur, 0);
      //
      repeat
        resultat := U(2, i);// racine de 2
        if resultat = precedent then
          begin
            stop := True;
          end
        else
          begin
            vecteur := Append(vecteur, resultat);
            precedent := resultat;
            i := i + 1;
          end;
      until stop;
      //
      Write(vecteur);
    end.
    Ce qui donne l'affichage suivant :

    {2, 1.5, 1.4166667, 1.4142157, 1.4142136, 1.4142136}
    On peut remplacer write() par ShowVec() pour un affichage en colonne avec certaines options.

    Un bémol toutefois. Comme Simicro l'a déjà signalé dans sa présentation, le produit n'est plus mis à jour et il a quelques bugs. Je me suis enregistré pour pouvoir essayer toutes les fonctionnalités : certaines sont restées bloquées malgré la clé. Ce n'était pas une très bonne idée, apparemment.
    L'Art est long et le Temps est court.

  2. #2
    Responsable Pascal

    Avatar de Alcatîz
    Homme Profil pro Jean-Luc Gofflot
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    5 956
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Luc Gofflot
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : mars 2003
    Messages : 5 956
    Points : 36 571
    Points
    36 571

    Par défaut

    Très bonne initiative !

    La dernière version date déjà de 2006 et je pense que la boîte (Astrise Corporation) elle-même a dû couler il y a quelques années, puisque les dernières news sur le site datent également de 2006.
    Règles du forum
    Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
    Mes tutoriels et sources Pascal
    FAQ Assembleur

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  3. #3
    Rédacteur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 084
    Points : 1 976
    Points
    1 976

    Par défaut Procédure ayant une fonction pour argument

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Exemple Algebrus XPascal
     
    program demoPlot;
     
    function f ( x : real ) : real;
    begin
      result := abs ( sin ( x ) );
    end;
     
    begin
      plot ( f, {0, 2 * Pi} );
    end.
    La procédure plot() admet comme argument une fonction. Etonnant, non ?

    P.-S. En cherchant des informations sur le XPascal, j'ai l'impression qu'il y a plusieurs langages ou dialectes qui portent ou ont porté le même nom. J'ai ainsi trouvé des choses sur un langage de script qui aurait un rapport avec le XML, mais je n'ai pas compris lequel.

    Savez-vous quelque chose sur cet autre (?) XPascal qui figure sur la liste des types MIME ?
    L'Art est long et le Temps est court.

  4. #4
    Membre régulier
    Homme Profil pro Tony
    Inscrit en
    mai 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Nom : Homme Tony
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : mai 2012
    Messages : 96
    Points : 74
    Points
    74

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    La procédure plot() admet comme argument une fonction. Etonnant, non ?
    Etonnant et en même temps naturel : "dessiner la courbe de la fonction f(x)", donc bien fait
    Niveau : Débutant
    IDE : Delphi 4 Pro
    OS : Windows 7

  5. #5
    Rédacteur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 084
    Points : 1 976
    Points
    1 976

    Par défaut

    Citation Envoyé par Simicro Voir le message
    Etonnant et en même temps naturel : "dessiner la courbe de la fonction f(x)", donc bien fait
    Si j'avais l'honneur de rencontrer le docteur Apostolyuk, je lui demanderais volontiers comment il a écrit cette procédure.

    En attendant je viens de télécharger l'un de ses ouvrages, qui s'intitule Excitation of Primary Oscillations in Micromechanical Vibratory Gyroscopes.
    L'Art est long et le Temps est court.

  6. #6
    Membre régulier
    Homme Profil pro Tony
    Inscrit en
    mai 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Nom : Homme Tony
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : mai 2012
    Messages : 96
    Points : 74
    Points
    74

    Par défaut

    Dis Roland, je trouve que tu as une sacrée soif d'apprendre
    Niveau : Débutant
    IDE : Delphi 4 Pro
    OS : Windows 7

  7. #7
    Rédacteur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 084
    Points : 1 976
    Points
    1 976

    Par défaut

    Pour le livre, je te rassure, je n'ai pas l'intention de le lire, encore que le gyroscope soit un objet assez fascinant.

    Sinon je suis curieux de tout ce qui touche au Pascal d'autant que je m'y suis mis assez récemment et que j'ai pas mal de retard à rattraper.

    Pour revenir au code en question, je me demande 1° comment on fait pour qu'une procédure accepte un nombre variable d'arguments 2° comment une fonction peut-elle être traitée comme une variable. Je n'en ai pas la moindre idée.
    L'Art est long et le Temps est court.

  8. #8
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2009
    Messages
    936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2009
    Messages : 936
    Points : 1 641
    Points
    1 641

    Par défaut

    Salut

    Citation Envoyé par Roland Chastain
    Pour revenir au code en question, je me demande 1° comment on fait pour qu'une procédure accepte un nombre variable d'arguments 2° comment une fonction peut-elle être traitée comme une variable. Je n'en ai pas la moindre idée.
    En fait, tu peux définir un type comme ceci :
    Code :
    1
    2
    type
      TFonctionMath = function(X : double):double;
    et faire
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Plot (f: TFonctionMath);
    var i : integer;
         X, Res : Double;
    begin
      for i:=-10 to 10 do
      begin
        X:=i;
        Res:=f(X);
        ...
      end;
    end;
    J’espère ne pas m’être trompé, je ne peux pas tester mon code ...

    En fait, tu donnes a ta procédure un pointeur sur ta fonction (si je me trompe pas).

    Tout ceci peut être fait en Pascal (pas besoin de XPascal). Tu serais étonné de voir tout ce qu'on peut faire ...

  9. #9
    Rédacteur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 084
    Points : 1 976
    Points
    1 976

    Par défaut

    Merci, mick605 !

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    program Exemple;
     
    {$APPTYPE CONSOLE}
     
    type
      TFonctionMath = function(X: double): double;
     
    function maFonction(X: double): double;
    begin
      result := X / 2;
    end;
     
    procedure Plot(f: TFonctionMath);
    var
      i: integer;
    begin
      for i := -10 to 10 do
      begin
        writeln(f(i));
      end;
    end;
     
    begin
      Plot(maFonction);
      readln;
    end.
    L'Art est long et le Temps est court.

  10. #10
    Responsable Pascal

    Avatar de Alcatîz
    Homme Profil pro Jean-Luc Gofflot
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    5 956
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Luc Gofflot
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : mars 2003
    Messages : 5 956
    Points : 36 571
    Points
    36 571

    Par défaut

    Bonjour,
    Citation Envoyé par Roland Chastain Voir le message
    1° comment on fait pour qu'une procédure accepte un nombre variable d'arguments
    Ce n'est pas évident en Pascal ; il faut avoir recours à une astuce de contournement comme, par exemple : http://alcatiz.developpez.com/tutoriel/thunking/#LIV.
    Règles du forum
    Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
    Mes tutoriels et sources Pascal
    FAQ Assembleur

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  11. #11
    Rédacteur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 084
    Points : 1 976
    Points
    1 976

    Par défaut

    Citation Envoyé par Alcatîz Voir le message
    Ce n'est pas évident en Pascal ; il faut avoir recours à une astuce de contournement comme, par exemple : http://alcatiz.developpez.com/tutoriel/thunking/#LIV.
    Merci pour ta réponse, Alcatîz.

    Je crois que j'ai encore quelques progrès à faire avant de pouvoir employer ce genre de technique, mais il me semble avoir compris le principe.
    L'Art est long et le Temps est court.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •