Developpez.com - Pascal
X

Choisissez d'abord la catégorieensuite la rubrique :

 

CONTRIBUTIONS II : Mes créations de DEUG

Par Hugo ETIEVANT

Unit Saisie

Télécharger

Pourquoi cette unité ? Parce qu'il arrive très fréquement d'un programme Pascal soit brusquement interrompu par une "RunTime Error" fatale à due à une mauvaise saisie de l'utilisateur qui aura par exemple entré un nombre à virgule dans un INTEGER, une chaîne de caractère dans un REAL, un signe négatif dans un WORD ou encore trop de chiffres dans un BYTE...

Que permet de faire cette unité ? Elle permet de saisir TRES SIMPLEMENT et SANS AUCUNE ERREUR des variables de type: Char, String, Boolean, Byte, Word, Shortint, Integer et Longint. (Mais pas encore de type réel...)

Comment utiliser les fonctions de cette unité ? C'est très simple. Il suffit d'affecter à votre variable le résultat de la fonction dont l'identificateur est: GET + le nom du type de votre variable. Vous aurez à passer en paramètre à cette fonction une chaîne de caractères qui sera affichée à l'écran lors de la saisie.

Voici les fonctions que vous pourez utiliser en sachant qu'il est impossible de générer d'erreur avec celles-ci.

function GetChar(quest:string):char;
function GetKey(quest:string):char;
function GetString(quest:string):string;
function GetBoolean(quest:string):boolean;
function GetByte(quest:string):byte;
function GetWord(quest:string):word;
function GetShortint(quest:string):shortint;
function GetInteger(quest:string):integer;
function GetLongint(quest:string):longint;



Program Exposant

Télécharger

Description : Ce programme contient deux fonctions fondamentalement différentes mais calculant la même chose : elles élèvent un nombre à une puissance passé en paramètre. EXP_BOUCLE : fonction exposant grace à une boucle intérative, permet d'élever un nombre réel ou entier à une puissance entière. EXP_LOG : fonction exposant grace à l'usage de l'exponentielle et du logarythme népérien, permet d'élever un nombre réel ou entier à une puissance réelle ou entière.

But : Déterminer le temps de calcul de chacune de ces deux fonctions pour savoir quelle doit être celle à préférer pour accélérer au maximum l'exécution d'un programme. C'est pourquoi il y a deux autres procédures : une qui sauvegarde l'heure système et l'autre qui calcule la durée écoulée entre deux instants sauvegardés par la précédente.

Explications : EXP_LOG est beaucoup plus longue que EXP_BOUCLE. Cela vient du fait de les fonctions mathématiques exponetielle et logarythme sont codées dans le microprocesseur sous la forme de "dévelloppements limités" qui concistes en une suite très grande de monômes en T (si on fait exp(T) ou ln(T)) de coeficient une fraction ayant pour dénominateur une factorielle. Ouf!

Par exemple, exp se lit : exp(T)="somme pour i allant de 0 à n de [(Ti)/(i!)]" avec n un nombre suffisamment grand pour que le dernier terme de la série soit quasiment négligeable vis-à-vis du résultat final de la somme. De plus, les nombres réels sont plus complexes à manipuler que les entiers car il y a la mantisse, la virgule flottante, l'exposant et la taille en mémoire en est beaucoup plus importante. Cela explique que même codées directement sur le hardware (la puce en silicium) ces deux 2 fonctions exp et ln sont très gourmandes en ressources systèmes. Conclusion : dans un programme où les exposants sont des nombres entiers, il est recommendé d'utiliser la fonction EXP_BOUCLE surtout si elle doit être utilisée au sein d'une boucle. Cela évitera des temps de calculs inutiles et mémoriaux.




Program & Unit Musique

Télécharger

Description : Cette archive (au format Zip) contient une unité (créée par J.C. Kessels) offrant des fonctions très simples d'utilisation permettant de jouer de la musique en tâche de fond. Il y a aussi un programme (de moi) qui permet de générer aléatoirement de la musique, de la stocker dans un fichier de données, de la jouer, de l'exporter pour être insérer dans une autre programme.

Compatibilité : le format de cette musique est compatible BASIC c'est-à-dire que le codage des notes, octaves et autres est le même que celui utilisé en langage BASIC pour jouer de la musique.




Unit Graphics

Télécharger

Description : Cette unité CyberZoïdale propose un panel de fonctions graphiques déjà présentes ou non en Pascal. Utiles pour débuter en infographie et comprendre la programmation graphique.

Liste des fonctions et procédures :

ligne du point (X1,Y1) au point (X2,Y2)
PROCEDURE ligne(x1,y1,x2,y2,c:Integer);
Segment de Bresenham avec antialiasing. Attention aux figures de Moiré
PROCEDURE ligne2(x1,y1,x2,y2,c:Integer);
cercle de centre (X,Y) de rayon R et de couleur C
PROCEDURE cercle(x,y,r,c:Integer);
disque de centre (X,Y) de rayon R et de couleur C
PROCEDURE disque(x,y,r,c:Integer);
cercle de centre (X,Y) de rayon R et de couleur C avec des sinus et cosinus
PROCEDURE cercle2(x,y,r,c:Integer);
disque de centre (X,Y) de rayon R et de couleur C avec des sinus et cosinus
PROCEDURE disque2(x,y,r,c:Integer);
remplissage d'une surface délimité par un contour fermé de couleur B à partir du point (X,Y) et avec la couleur C
PROCEDURE foodfill(x,y,c,b:Integer);
remplissage d'une surface délimité par un contour fermé à partir du point (X,Y) et avec la couleur C tant que les points rencontrés sont de couleur B (couleur de fond)
PROCEDURE foodfill2(x,y,c,b:Integer);
rectangle remplit de couleur C dont les coins extrêmes sont haut/gauche (X1,Y1) et bas/droite (X2,Y2)
PROCEDURE rect(x1,y1,x2,y2,c:Integer);
cercle avec effet de vagues
PROCEDURE rectP(x1,y1,x2,y2,c:Integer);
rectangle de couleur C dont les coins extrêmes sont haut/gauche (X1,Y1) et bas/droite (X2,Y2)
PROCEDURE cercleWaves(x,y,r,c:Integer);
disque avec effet de vagues
PROCEDURE disqueWaves(x,y,r,c:Integer);
rectangle remplit avec effet de vagues
PROCEDURE rectPWaves(x1,y1,x2,y2,c:Integer);




Program Bresenham

Télécharger
Visualisation d'une figure de Moiré

Description : Ce programme contient une procedure permettant de construire une ligne avec antialiasing. L'effet antialiasing, bien connu en infographie, conciste en un légé effet de flou permettant de cacher les "escaliers" d'un segment oblique.

Effet graphique surprenant : en dessinant un grand nombre de segments créés avec antialiasing les uns très proches des autres, on obtient une figure de Moiré.

Algorithme : Ce programme dessine à l'écran des segments avec antialiasing selon la méthode de Bresenham.




Program Flocon

Télécharger
Visualisation d'une fractale triangulaire

Description : Ce programme permet de construire une fractale dont la base est un triangle équilatéral. On obtient au final un flocon de neige pour un rang élevé.

Algorithme : Ce programme dessine à l'écran une succession de triplets de triangles équilatéraux dont les centres respectifs sont les pointes du triangle de rang inférieur et de côté moitier moindre. Ici est affiché le résultat pour un rang de 10. La loi géométrique associée s'exprime en 3n+1.




Program Carrés3

Télécharger
Visualisation d'une fractale carré

Description : Ce programme permet de construire une fractale dont la base est un carré.

Algorithme : Ce programme dessine à l'écran une succession de quadruplets de carrés dont les centres respectifs sont à l'extérieur du carré de rang inférieur et de côté moitier moindre. Ici est affiché le résultat pour un rang de 4. La loi géométrique associée s'exprime en 4n+1.




Program Croix

Télécharger
Visualisation d'une fractale triangulaire

Description : Ce programme permet de construire une fractale dont la base est un triangle équilatéral évidé.

Algorithme : Utilisant un algorithme récursif ultra simple, ce programme dessine à l'écran une succession de triplets de segments donnants l'illusion de triangles équilatéraux dont les centres respectifs sont les trois pointes du triplet de rang inférieur et de côté moitier moindre. Ici est affiché le résultat pour un rang de 5. La loi géométrique associée s'exprime en 3n+1.




Program Carrés2

Télécharger
Visualisation d'une fractale carrée

Description : Ce programme permet de construire une fractale.

Algorithme : Utilisant un algorithme récursif ultra simple, ce programme dessine à l'écran une succession de carrés dont les centres respectifs sont les quatres coins d'un carré de rang inférieur et de côté moitier moindre. Ici est affiché le résultat pour un rang de 3. La loi géométrique associée s'exprime en 4n+1.




Program VisualTri2

Télécharger
Visualisation d'un algorithme de tri

Description : Ce programme permet de visualiser un algorithme de de tri appliqué à un tableau à une dimension sur un écran graphique. C'est le tri-bulle car les points ressemblent à des bulles remontant vers la surface symbolisée par le périmètre de la surface sphérique.

Effet graphique étonnant : un nuage de point forme un quart cercle dont la concavité tend progressivement vers l'infini afin de donner une bissectrice.

On crée un tableau d'éléments générés au hasard de valeur comprise dans l'intervalle [1..N]. On procède à l'affichage graphique des points de coordonnées (xi : valeur de l'élément, i : indice de l'élément dans le tableau) au fur et à mesure que le tri progresse.

Algorithme : On compare chaque point à celui suivant dans le tableau et on permute si nécessaire afin de trier les éléments du tableau dans l'ordre croissant. On répète cet algorithme un nombre de fois égale au nombre d'élements du tableau moins un. Et dans chacune des itérations de cette dernière boucle, on affiche la position de l'ensemble des points du tableau par leur coordonnées (xi,i).

Pour la petite histoire, sachez qu'aux débuts de l'informatique, les programmeurs pensaient que de tester et permuter des éléments prochent deux à deux en mémoire (et donc dans un tableau) était plus rapide que de tester deux éléments quelconques (et donc éloignés par probabilité). A priori démenti par la suite...




Program VisualTri

Télécharger
Visualisation d'un algorithme de tri

Description : Ce programme permet de visualiser un algorithme de de tri appliqué à un tableau à une dimension sur un écran graphique.

Effet graphique étonnant : effondrement du nuage de point face à la progression d'une bissectrice!

On crée un tableau d'éléments générés au hasard de valeur comprise dans l'intervalle [1..N]. On procède à l'affichage graphique des points de coordonnées (xi : valeur de l'élément, i : indice de l'élément dans le tableau) au fur et à mesure que le tri progresse.

Algorithme : On compare chaque point à tous ceux suivants dans le tableau et on permute si nécessaire afin de trier les éléments du tableau dans l'ordre croissant. Après qu'un point ait été comparé à tous ceux suivants, on affiche la position de l'ensemble des points du tableau par leur coordonnées (xi,i).




Program Fractale

Télécharger
Fractale

Description : Ce programme contient un algorithme récursif qui permet de tracer à l'écran une fractale composée de cercles.

Ici, les déplacements se font dans les deux dimensions de l'écran (contrairement au suivant...).

Algorithme : Si le rang de précision n'est pas dépassé alors on trace un cercle principal de rayon R au sein duquel on trace 4 autres petits cercles de rayon r maximum c'est-à-dire telque r:=R/(1+Sqrt(2)). Le tracé de chaque petit cercle se fait par rappel de la procédure récursive. Et ensuite on considère chaque petit cercle comme un cercle principal...

On peut aisément rajouter un peu de code pour qu'entre chaque quadruplet de cercle, on rajoute un élément de fractale...




Program Cercles

Télécharger
Fractale pour Z=2

Description : Ce programme contient un algorithme itératif qui permet de tracer à l'écran une fractale composée de cercles.

Algorithme : Tous les déplacement se font selon l'axe des X. On trace un cercle principal de rayon R dans lequel on place Z cercles côtes à côtes et de rayon R/Z. On recommence en considérant chaque nouveau cercle comme cercle principal jusqu'à que le rayon devienne suffisament petit.

Ici, R est le plus grand possible c'est-à-dire la moitée de la résolution graphique sur les Y. Et Z peut varier à votre convenance Z=2,3,4...

La complexité de cet algorithme s'écrit en Zx avec x dépendant de la taille minimale accordée au rayon R .




Program Hanoï

Télécharger
Tour de Hanoï à 4 anneaux

Description : Ce programme contient un algorithme qui permet de résoudre de la seule manière qui soit le problème de Hanoï (ou jeu de Hanoï). Ce problème fait intervenir trois piles dont une contenant au départ n anneaux empilés par rayon croissant. On désire les déplacer les uns après les autres vers une autre pile pour les y mettre dans le même ordre. Attention, dans toute pile, les anneaux doivent être placés par ordre croissant de rayon. On se sert donc d'une pile intermédiaire pour effectuer cet échange. Le nombre d'itérations répond à la loi géométrique suivante : NbIter = 2n-1 qui donne très rapidement des nombres gigantesques. C'est pourquoi, il faudra se limité à un nombre relativement petit d'anneaux (3 à 5).

Pour la petite histoire, sachez que les moines boudistes du Tibet tentent de résoudre se problème avec une soixantaine d'anneaux depuis déjà un siècle. Il leur faudra encore plusieurs millions de milliards d'années pour terminer ce jeu c'est-à-dire pour effectuer une fois toutes les itérations nécessaires pour faire passer dans l'ordre tous les anneaux d'une tour A à une tour B.




Program Carrés

Télécharger
Exemple

Description : Ce programme utilise une petite procédure récursive afin de calculer et de tracer "sans lever le crayon" 2n carrés imbriqués les uns dans les autres suivant une transformation géométrique de rapport 1/2 et d'angle Pi/2 par rapport au centre d'un premier carré comme indiqué sur le dessin ci-contre.

La récursivité signifie que la procédure exécute des appels à elle-même pour effectuer les mêmes instructions mais à des échelles différentes à la manières des images fractales qui ont pour propriété majeure l'invariance d'échelle.

Ce court programme est très facilement modifiable pour permettre le tracé d'autres motifs.




Unit Lettres

Télécharger

Description : Cette unité CyberZoïdale propose un ensemble de nouvelles fonctions qui permettent d'alléger le code source de vos programmes. Ces fonctions sont très utiles et vous aurez très probablement à vous en servir régulièrement. Ces fonctions sont destinées au traitement des variables caractères ou chaînes de caractères.

Liste des fonctions et procédures :

FUNCTION IsDigit(C:Char):Boolean;
Teste si le caractère C est un chiffre.
FUNCTION IsLower(C:Char):Boolean;
Teste si le caractère C est une lettre minuscule.
FUNCTION IsUpper(C:Char):Boolean;
Teste si le caractère C est une lettre majuscule.
FUNCTION IsAlpha(C:Char):Boolean;
Teste si le caractère C est une lettre.
FUNCTION IsAlNum(C:Char):Boolean;
Teste si le caractère C est une lettre ou un chiffre.
FUNCTION IsFunct(C:Char):Boolean;
Teste si le caractère C est une fonction.
FUNCTION IsOther(C:Char):Boolean;
Teste si le caractère C n'est ni une lettre, ni un chiffre, ni une fonction.
FUNCTION FindF(C:Char; S:String):Byte;
Renvoie la position de la première occurence du caractère C dans la chaîne S ou bien la valeur zéro si C est absent de S.
FUNCTION FindL(C:Char; S:String):Byte;
Renvoie la position de la dernière occurence du caractère C dans la chaîne S ou bien la valeur zéro si C est absent de S.
FUNCTION Count(C:Char; S:String):Byte;
Renvoie le nombre d'occurences du caractère C dans la chaîne S ou bien renvoie la valeur zéro si C est absent de S.
PROCEDURE Beep;
Provoque l'émission d'un signal sonore.




Program Tableaux

Télécharger

Description : Les fonctions et procédures de ce programme peuvent vous être utile pour l'utilisation générale des tableaux. Vous n'avez qu'à modifier très légèrement le code pour généraliser ce programme à des tableaux renfermant des types différents (caractères, nombres réels...) et de dimensions différentes.

Liste des fonctions et procédures :

FUNCTION Dichoto(Tableau:TABLEAU; BorneInf,BorneSup,Elément:Integer):Integer;
Dichotomie itérative qui renvoit l'indice correspondant à la position d'un élément entier dans un tableau d'entiers à une seule dimension d'indice variant de BorneInf à BorneSup. Suppose que le tableau est trié dans l'ordre croissant ! Renvoie BorneSup+1 si le tableau ne contient pas l'élément spécifié.
PROCEDURE Tri(Tableau:TABLEAU; BorneInf,BorneSup:Integer);
Tri itératif d'un tableau d'entiers à une dimension dans l'ordre croissant. On peux ne trier qu'un intervalle précis du tableau.
PROCEDURE Init(Tableau:TABLEAU; Bouléen:Boolean; BorneInf,BorneSup,RandMin,RandMax:Integer);
Initialisation d'un Tableau[BorneInf..BorneSup] à une dimension en donnant soit la valeur zéro à toutes les cases (si Booléen vaut TRUE) soit une valeur aléatoire comprise dans l'intervalle [RandMin..RandMax] indiqué en paramètre (si Booléen vaut FALSE).
PROCEDURE Suppr(Tableau:TABLEAU; BorneInf,BorneSup,Rang:Integer; Bouléen:Boolean; RandMin,RandMax:Integer);
Suppression d'un élément d'un tableau. La case vide qui en résulte prend soit la valeur zéro (Bouléen=TRUE) soit une valeur aléatoire (Bouléen=FALSE) comprise dans l'intervalle [RandMin..RandMax].
PROCEDURE Inser(Tableau:TABLEAU; BorneInf,BorneSup,Rang,Valeur:Integer);
Insertion d'un élément de valeur Valeur au rang Rang dans le tableau Tableau. La case finale en trop est tout simplement perdue !

Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -