Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, quizz et autres ressources
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/07/2012, 14h50   #1
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
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 :

Citation:
{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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/07/2012, 22h34   #2
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

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

Informations forums :
Inscription : mars 2003
Messages : 5 511
Points : 39 351
Points : 39 351
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
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]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 23h58   #3
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 22h27   #4
Simicro
Membre régulier
 
Homme Tony
Inscription : mai 2012
Messages : 96
Détails du profil
Informations personnelles :
Nom : Homme Tony
Âge : 42
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : mai 2012
Messages : 96
Points : 80
Points : 80
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
Simicro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 23h23   #5
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 23h45   #6
Simicro
Membre régulier
 
Homme Tony
Inscription : mai 2012
Messages : 96
Détails du profil
Informations personnelles :
Nom : Homme Tony
Âge : 42
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : mai 2012
Messages : 96
Points : 80
Points : 80
Dis Roland, je trouve que tu as une sacrée soif d'apprendre
__________________
Niveau : Débutant
IDE : Delphi 4 Pro
OS : Windows 7
Simicro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 12h04   #7
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 16h51   #8
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 808
Points : 1 808
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 ...
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/07/2012, 02h22   #9
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2012, 15h11   #10
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

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

Informations forums :
Inscription : mars 2003
Messages : 5 511
Points : 39 351
Points : 39 351
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
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]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2012, 22h37   #11
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 689
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 689
Points : 1 005
Points : 1 005
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.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h50.


 
 
 
 
Partenaires

Hébergement Web