Pascal & C++

Copy URL Solarsystem.nasa.gov
Venus de Botticelli : L'éclat de Venus comparé à d'autres étoiles et planètes a inspiré des visions d'une belle déesse.

L'histoire de l'ordinateur est récente et son évolution très rapide.

Bien que l'homme ait atteint la Lune, on ne peut dire pour autant que nous que nous sommes dans « l'ère interplanétaire » car en fait, cet exploit n'a pu être réalise que grâce aux ordinateurs sans lesquels il aurait été très difficile, voire impossible, de calculer la trajectoire des vaisseaux spacieux et encore moins de la modifier en cours de route.

L'ordinateur est encore un jeune. Il y a longtemps que des hommes rêvaient à cette machine prodige. Sans parler « d'ordinateur » puisque ce mot n'a le sens qu'on lui donne aujourd'hui c'est-a-dire depuis 1964, les trois concepts des calculateurs électroniques actuels : « Report automatique, Programme, Mémoire » avait déjà préoccupe certains de nos ancêtres.

Le plus ancien est Blaise PASCAL, qui en 1642, imagine et réalise « la Pascaline » dont le musée technique du Conservatoire National des Arts et Métier détient un des rares exemplaires. Essentiellement mécanique cette machine est constituée de six roues dentées comprenant dix dents, chacune d'elle correspondant à une valeur de 0 à 9. Lorsqu'une dent passait de la valeur 9 à la valeur 0 elle provoquait la rotation de la valeur d'une dent de la roue suivante. Le principe du report automatique était au point. La Pascaline réalisait les opérations (pour un total maximum de 999999) et les soustractions par le principe du complément à 9.

La carte perforée, ou plus exactement son ancêtre le « carton perforé »" fut inventé par FALCON en 1728 et industrialisé par JACQUARD en 1801 qui mit au point un métier à tisser programmé.

Ces deux notions de report automatique et de programme ont été reprises par Charles BABBAGE, professeur à l'Université de Cambridge qui entreprit alors la construction d'une machine analytique à commande automatique dans la première moitié du XIXème siècle, si cette machine n'a malheureusement pas vu le jour, elle était basée sur les mêmes principes que nos ordinateurs actuels: Une mémoire, Une unité de calcul, Une unité de contrôle.
La machine de Babbage est donc bien l'ancêtre de l'ordinateur.

Parallèlement à ces inventions mécaniques, LIEBNIZ (1646-1716) entreprend l'étude du système binaire utilisé par les chinois depuis fort longtemps mais ces travaux tombent dans l'oubli. Plus tard, un anglais, Georges BOOLE écrit deux ouvrages célèbres : « The mathématical analysis of logic » en 1847 et « An investigation of the laws of thought » en 1854. Ces deux ouvrages qui préludent à la « mathématique moderne » décrivent les théories du raisonnement binaire sur des associations de propositions simples reliées par les connectifs : « ET, OU inclusif, OU exclusif, NON, Si ... ALORS ».

Ces théories appelées « algèbre de Boole » ou encore « algèbre des propositions » sont à l'origine des circuits électroniques actuellement utilisés dans un ordinateur. Ce n'est que quelques quatre vingt ans plus tard que Louis COUFFIGNAL (1938) envisage l'utilisation du code binaire pour une calculatrice.

Entre temps, la carte perforée fut inventée en 1894 par HOLLERITH et la codification des perforations qui porte son nom est devenue un code universel. Les machines qu'il mit ensuite au point préfiguraient le matériel mécanographique classique dont la fabrication industrielle fut reprise par IBM (International Business Machine Corporation) dès 1917. Dès lors, les constructeurs se succédèrent, perfectionnant chacun à sa manière les principes de la mécanographie d'Hollerith. En 1931 fut créée la « Compagnie des machines Bull » qui utilise son propre code de perforation. Elle fusionne en 1965 avec « General Electrique ». En 1959 la firme anglaise ICT est créée (International Computers and Tabulators) et devient en 1968 la société ICL (International-computers Limited).

Bien que des prototypes aient été expérimentés en 1939, la commercialisation des premiers « ensembles électroniques » a commencé avec l'UNIVAC I en 1951. Vinrent ensuite I'IBM 701 (1953) et I'IBM 704 (1955). Les progrès vont alors très vite. Ils ont atteint ce qu'ils sont aujourd'hui en trois périodes appelées « GENERATIONS ».

Premiere Generation 1954-1959. Très volumineux, ces ordinateurs utilisaient les tubes à vides. Ils étaient très bruyants (rotation des tambours et des ventilateurs de refroidissement). Le temps nécessaire pour accéder à un « caractère » de la mémoire centrale était de l'ordre de la milliseconde (ms). La programmation se faisait soit en « langue machine » ou en « langue symbolique » simple spécifique de chaque constructeur. On trouve dans cette génération, les ordinateurs IBM 705 et 650 et le Gamma de Bull à tambour.

Dexieme Generation 1959-1964. L'emploi des transistors et des circuits imprimés réduit les volumes et accélère les temps d'accès qui sont de l'ordre de quelques microsecondes. Les « systèmes d'exploitation » (Operating System) apparaissent, facilitant la programmation qui n'utilise plus la langue machine mais des langues symboliques puissantes comme l'autocodeur spécifique de chaque constructeur ou lés langues évoluées : COBOL pour les problèmes de gestion et FORTRAN pour les problèmes spécifiques. Ces derniers sont dit des langues « compatibles » théoriquement indépendant des types de matériel. On trouve dans cette génération, le GAMMA 30 de Bull et la série 1400 d'IBM.

Troisieme Ganeration depuis 1964. C'est une véritable révolution. L'apparition des micromodules et des circuits intégrés réduisent considérablement les encombrements et les temps d'accès. La taille des mémoires augmente ainsi que les capacités des périphériques. Mais la grande novation se situe du coté du software constructeur. Les systèmes d'exploitation sont de plus en plus puissants, facilitant encore les travaux de programmation. En même temps que sa série des 360, qui annonce la 3ème génération, IBM propose une nouvelle langue : le PL1. Langue universelle aussi bien capable de traiter les problèmes de gestion que les problèmes scientifiques. En 1971, IBM annonce la nouvelle série des 370. Outre les perfectionnements des 360 elle propose des possibilités nouvelles avec l'utilisation de « l'antémémoire » qui permet de gérer plus vite et à moindre prix un plus grand nombre d'informations.

Arithmetique Binaire. Tous les ordinateurs contiennent les informations au moyen du système de numération binaire.
Autrement dit, chaque élément d'information stocké par l'ordinateur peut avoir deux configurations : « on » ou « off », ce que l'on peut traduire par « présent » ou « absent », « en service » ou « hors-service », « vrai » ou « faux », « 1 » ou « 0 ».

L'ordinateur stocke ces valeurs sous forme de niveaux de tensions électriques. On n'a heureusement, pas besoin de s'occuper de tensions lorsque l'on écrit des programmes, mais seulement de nombres.
A partir de ces « 0 » et « 1 » élémentaires, on peut faire des opérations arithmétiques très complexes. Du fait de la représentation binaire des données, les ordinateurs utilisent l'arithmétique à base 2 pour effectuer leurs calculs. Cette arithmétique n'utilise que les deux chiffres « 0 et 1 ». On emploie normalement l'arithmétique à base 10 ou décimale. Dans cette arithmétique, il y a 10 chiffres différents, « 0 à 9 ». On peut considérer l'arithmétique Binaire où base 2, comme un système pour de gens n'ayant que deux doigts.

La limitation à 10 chiffres de l'arithmétique à base 10 n'empêche pas de représenter des grands nombres. On utilise des nombres contenant plusieurs chiffres dont la position indique une puissance de 10. Le chiffre le plus à droite de n'importe quel nombre indique les unités, le chiffre à sa gauche les dizaines, le suivant les centaines, et ainsi de suite. La progression, de droite à gauche, est 100,  101,  102,  etc… Le nombre 2368 est en fait 2 milliers, 3 centaines, 6 dizaines et 8 unités. La décomposition du nombre 2368, au point de vue mathématique.

2368 = 2 x 103 + 3 x 102 + 6 x 101 + 8 x 100 =   2000 + 300 + 60 + 8   (représentation décimale, note: 100 = 1   où 20 = 1)

Le langage Pascal est un langage compilé. Cela signifie que le microprocesseur, coeur de l'ordinateur, ne sait de toute façon se servir que des codes binaires suites de 0 et de 1 pour lesquels il a été construit. Il est incapable de comprendre quoi que ce soit à un langage évolué, proche du nôtre. Comme nous autres sommes peu enclins à utiliser le système Binaire, et que nous préférons de loin nous servir justement de notre langage naturel décimal, il faut bien qu'il y ait un trait d'union pour que la machine puisse comprendre l'homme. Ce trait d'union peut prendre deux formes: interpréteur ou compilateur. Dans les deux cas, on écrit le programme sous la forme d'un texte qu'on appelle programmer source ou texte source où simplement source. La source obéit aux règles syntaxiques propres à chaque langage, mais demeure assez proche du nôtre. Ou plutôt de celui de nos amis anglo-saxon pour qu'il soit facile à écrire. La différance entre interprétation et compilation intervient ensuite. Suite : Bases de numération & base 2 où Binaire Bases de numération & base 2 où Binaire

Turbo Pascal

  • Sys Binaire
  • ASCII Standard
  • Robotique
  • Cryptography
  • Codes 437us
  • Rêves
  • Numérique
  • Les Shadok
Bases de numération & base 2 où Binaire

Le système décimal, on dit Décimal, parce qu'il utilise une numérotation à 10 chiffres. Nous dirons que c'est un système en BASE 10.
L'histoire : On a utilisé un système base 10 car nos ancêtres ont commencé à compter sur leurs 10 doigts. Mais la position des chiffres a également une grande importance. Les chiffres les moins significatifs se situent à droite du nombre, et leur importance augmente au fur et à mesure du déplacement vers la gauche. Dans le nombre 502, le 5 à une plus grande importance que le 2. En réalité, chaque chiffre, que l'on peut appeler DIGIT, à une valeur qui dépend de son RANG . Cela veut dire qu'il s'agit tout simplement de l'élévation de la BASE utilisée élevé à la puissance de son RANG .

Quand vous avez compris, vous pouvez comprendrez automatiquement n'importe quel système de numérotation. Exemple le nombre 502. Veut dire, tout simplement que sa valeur est égale à 2 multiplié par la base (10) élevée à la puissance du rang du chiffre, c'est à dire 0.

Il faut savoir que le comptage du rang s'effectue toujours de droite à gauche et en commençant par 0.
Pour le nombre 502, sa valeur est donc en réalité : 502 = 2*10° + 0*101 + 5*10². Notez que le symbole * indiquer « multiplié ».
Et il faut savoir que 10° = (10/10) = 1, que 101 = 10, et que 10² = 10*10 = 100 etc.

Base (mathématiques), nombre des symboles, appelés chiffres, nécessaires dans un système de numération pour exprimer tout nombre.
Ainsi, le système de numération décimale, se compose de dix chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. Donc Il s'agit donc d'un système de base 10. Les peuples et les civilisations ont connu différents systèmes de numération. Aujourd'hui, dans la totalité des pays, on utilise le système décimal. En fait, d'un point de vue strictement mathématique, tout nombre entier supérieur à 1 peut être pris comme base.

Les Babyloniens utilisaient le système sexagésimal (base 60), les Romains se servaient parfois d'un système duodécimal (base 12), les Mayas employaient un système vicésimal (base 20), etc.

Système Binaire (base 2), il est aujourd'hui utilisé dans les ordinateurs.
Système Binaire est un nombre entre 0 et 1 que on peut représenter tous les nombres.
Système Décimal est un nombre entre 0 et 10 qu'ont peut représenter tous les nombres.
Système Hexadécimal est un nombre entre 0 et 15 on peut représenter tous les nombres.

Arithmetique Binaire

Ce le mathématicien George BOOLE (1815-1864), mathématicien et logicien anglais. Il voulait prouver l'existence de tout et de rien à partir de deux états, dans la recherche sur les lois de la pensée, George Boole décrit un système algébrique qui sera plus tard connu sous le nom d'algèbre booléenne. Dans ce système, les propositions logiques sont indiquées par des symboles et peuvent être exécutées par des opérateurs mathématiques abstraits qui correspondent aux lois de la logique. L'algèbre booléenne occupe une place primordiale dans l'étude des mathématiques pures et dans la conception des ordinateurs.

L'ordinateur stocke ces informations au moyen du système de numération binaire, sous forme de niveaux de tensions électriques de deux états, vrai ou faux chaque élément stocké peut avoir deux configurations : « ON » ou « OFF », ce que l'on peut traduire par « présent » ou « absent », en « service » ou « hors-service », « vrai » ou « faux », « 1 » ou « 0 ». A partir de « 0 » et « 1 » on peut faire des opérations arithmétiques très complexes.

On emploie normalement l'arithmétique à base 10 ou décimale où il y a 10 chiffres différents « 0 à 9 ». La limitation à 10 chiffres de l'arithmétique à base 10 n'empêche pas de représenter des grands nombres. On utilise des nombres contenant plusieurs chiffres dont la position indique une puissance de 10. Le chiffre le plus à droite de n'importe quel nombre indique les unités, le chiffre à gauche les dizaines, le suivant les centaines, et ainsi de suite. La progression de droite à gauche, est 100,  101,  102,  etc.

Le nombre 2368 est en fait 2 milliers, 3 centaines, 6 dizaines et 8 unités.   La décomposition du nombre 2368, au point de vue mathématique:

2368 = 2 x 103 + 3 x 102 + 6 x 101 + 8 x 100

= 2000 + 300 + 60 + 8    ( représentation décimale,     note: 100 = 1   où 20 = 1 )

Système Binaire

Si un chiffre décimal est un nombre de « 0 » à « 9 » et un chiffre Binaire est un nombre entre « 0 » et « 1 » c-a-d.
A l'aide de deux chiffres en binaire, on peut représenter les nombres suivants :
Soit 4 nombres ou, (22) & à l'aide de trois chiffres binaires ( trois bits ), on peut représenter 8 nombres ou, (23)

binaire 000 décimal
binaire 011 décimal
binaire 102 décimal
binaire 113 décimal
binaire 0000 décimal
binaire 0011 décimal
binaire 0102 décimal
binaire 0113 décimal
binaire 1004 décimal
binaire 1015 décimal
binaire 1106 décimal
binaire 1117 décimal
Nombre de bits Valeurs limites
  4  0 à 15
  8  0 à 255
  16  0 à 65 535
  32  0 à 4 296 967 295

Passage de binaire à décimal

A priorité, rien ne distingue le nombre 101 (cent et un) exprimé dans le système décimal traditionnel du nombre 101 (un zéro un) exprimé dans le système binaire (ou de base 2). Pour cette raison, on le notera : 101b

Chaque nombre exprimé dans le système binaire a son équivalent dans le système décimal (et vice-versa).

Chaque chiffre du nombre binaire est affecté d'un poids. Ainsi, pour le nombre 1011b

binaire

Un nombre binaire est égal à la somme de ses poids.

binaire 2

Si l'on effectuait ces opérations sur des nombres binaires à quatre chiffres, on trouverait que leurs équivalents dans le système décimal sont :

Nombre binaire équivalent décimal Nombre binaire équivalent décimal
0000 0 1000 8
0001 1 1001 9
0010 2 1010 10
0011 3 1011 11
0100 4 1100 12
0101 5 1101 13
0110 6 1110 14
0111 7 1111 15
 
Décimalbinaire
 54 110 110
 328 10 100 1000
 160 10 10 0000
 255 11 111 111
 102 11 001 10

Les additions de nombres binaires

L'addition binaire suit des règles calquées à l'arithmétique traditionnelle en base 10.

0 + 0=0
1 + 0=1
0 + 1=1
1 + 1=0 avec report

Durant cette opération, nous avons eu trois reports (d'abord de la colonne de poids 0 vers celle de poids 1, puis de celle de poids 1 vers celle de poids 2 et enfin de celle de poids 2 vers celle de poids 3).

On peut vérifier que :   5 + 3 = 8 = ( 1 x 23 + 0 x 22 + 0 x 21 + 0 x 20 )

Autre exemple

L'addition (4 + 12) a donné lieu à deux reports : 
  0100   d'abord de la colonne de poids 2 vers celle de poids 3 et puis de celle de poids 3 vers le vide
 +1100   puisque nous calculons sur 4 bits.
 -------
  0000   Un report est donc « perdu » et le résultat est erroné.

Les changements de base & Conversion binaire où décimal

Pour la notation binaire, on applique la règle de la décomposition en une somme de puissances de 2.

Exemple : convertir 10000 b en décimal   -->   Donc, 10000 b = décimal 16   -->   décimal 16 = hexadécimal 10,
en base hexadécimal on à les chifres : « 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F »    « A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 ».


Note: (20) = 1    et    1 multiplier par 0 = 0

Conversion du décimal où binaire

On effectue la division par 2 du nombre décimal, puis la division du quotient par 2 et ainsi de suite jusqu'à ce que le quotient soit égal à 0 ou 1

 division

Donc, décimal 16 = 10000b

Les restes des divisions successives, prises dans l'ordre inverse, constituent le nombre représenté en binaire.

Exemples
Binaire : 1011 Trinaire : 102 Quintal : 21 Octal : 13 Décimal : 11 Hexadécimal : B

Binaire : 1011
1x (23)+0x (22)+1x (21)+1x (20) 
1 x 8+0 x 4+1 x 2+1 x 1 
8+0+2+1décimal 11

Trinaire : 102
1x (32)+0x (31)+2x (30) 
1x9+0x3+2x1 
9+0+2 = décimal 11

Quintal : 21
2x (51)+1x (50)
2 x 5+1 x 1
10+1 = décimal 11

Octal : 13
1x (81)+3x (80)
1 x 8+3 x 1 
8+3 = décimal 11

Décimal : 11
1x (101)+1x (100)
1 x 10+1 x 1 
10+1 = décimal 11

Hexadécimal : B
B x (160) 
11 x 1 
11 = décimal 11

Table standard de valeurs
Binaire01101110010111011110001001101010111100110111101111
Trinaire012101112202122100101102110111112120
Quintal012341011121314202122232430
Octal012345671011121314151617
Décimal0123456789101112131415
Hexadécimal0123456789ABCDEF

Convertisseur décimal vers les autres Bases

  Entrez un nombre :   

Binaire
Trinaire
Qintal
Octal
Hexadecimal

La multiplication en Binaire

En binaire dans une multiplication par 2, il faut ajouter un zéro à la fin du nombre. C’est à dire décaler tous les chiffres vers la gauche.
Pour multiplier par 4 ( c’est à dire 22) il faut ajouter deux zéros, faire deux décalages successifs à gauche.

Principe d’une multiplication : Chaque décalage d’une case à gauche correspond à une multiplication par 2.


 (2 * 2)  =  ( 0010b * 2 )  =  0100 =   4 décimal 
 (6 * 2)  =  ( 0110b * 2 )  =  1100 =  12 décimal 
 (2 * 4)  =  ( 00010b * 4 )  =  1000 =   8 décimal 
 (6 * 4)  =  ( 00110b * 4 )  =  11000 =  24 décimal 
  Les 3 exemples

Complément à deux

Pour indiquer les nombres positifs et négatifs, on emploie l'arithmétique à complément à deux. Dans cette arithmétique avec signes, que l'on appelle arithmétique « signée », le bit le plus à gauche du nombre indique le signe. Les nombres positifs ont un 0 comme bit de poids fort, tandis que les nombres négatifs ont un 1. Les nombres positifs s'expriment de la même façon en arithmétique signée et non signée.

 

Complement à deux de 5
5       = 0101B
Pour changer de signe
Complémenter
Ajouter 1

-5       =

1010 B
0001 B
-----------
1011 B
Les nombres négatifs s'expriment différemment. Pour rendre un nombre négatif,
c'est-à-dire pour changer son signe, il faut le complémenter, puis ajouter 1 au résultat.

En prenant un exemple à 4 bits, la valeur 5 est 0101B, tandis que (-5) est 1011B.
Pour changer de signe
Complémenter
Ajouter 1

5       =

0100 B
0001 B
-----------
0101 B

 

DécimalBinaireDécimalBinaire
-11111-51011
-21110-61010
-31101-71001
-41100-81000
  L'exemple de la figure droite, montre que 0 se représente d'une seule façon dans l'arithmétique à complément à deux, donc, -0 est égal à 0.
Pour un nombre quelconque à ( n bits ) en complément à deux, la valeur la plus grande est 2n-1 et la plus petite est de -2n-1. Il n'y a qu'une seule représentation du 0.

Dans le système à 4 bits, le nombre le plus grand est 7, tandis que le plus petit est -8.
0       = 0000B
Pour changer de signe
Complémenter
Ajouter 1

-0   =   0   =

1111 B
0001 B
-----------
0000 B

Le processeur 8088 peut traiter les nombres comme des valeurs arithmétiques soient signées, soit non signées. Le choix est laissé au programmeur en langage d'assemblage. Cependant, quand un programme emploie l'arithmétique signée, le processeur 8088 utilise l'arithmétique à complément à deux pour effectuer les opérations.

Les Caractres ASCII Standard

Au sens informatique, ce terme désigne une position mémoire composée de 6 bits. Ne pas confondre avec son sens grammatical: caractère alphabétique, caractrere numérique etc.

Un caractère grammatical(lette,chiffre,signe) esttransmis dans caractère (sens informatique) dans une condification dite D C B (Décimal codé Binaire). Cette codification est basée sur le principe suivant: Les 4 bits de la droite constituen une zone dite numérique, Les 2 bits de gauche constituen une zone dite significative.

les tableaus suivans décrivent les codes D C B srandards. Pour introduire une donnée nouvelle en unité centrale ou pour éditer des résultats les informations devront être codées dans le système D C B. pour effectuer des opérations arithmétiques, les valeurs numériques ainsi codifiées en mémoire devront etre converties en Binaire pur.

Codification B.C.D. standard
codes ascii 437us codes ascii windows


Sur la table gauche codes ASCII utf8 437us : E = 100 0101 binaire = 69 decimal.
ou tenez la touche « ALT » enfonce et saisissez 69 dans le pave-numerique, relachez la touche « ALT »

Sur la table Codes Ascii Window : Ç = 1100 0111 binaire = 199 decimal.


Entrez un caractère pour savoir la valeur ASCII :
Entrez un numéro de 32 à 255 pour savoir le caractère ASCII correspondand :

Un robot c'est, celui qui sert son créateur sans possibilité de se rebeller

Selon les Babyloniens, les dieux vivaient dans une société inégalitaire et certains d’entre eux travaillaient au profit d’une élite oisive. Les dieux se révoltèrent, et le dieu de la technique créa des êtres doués de vie pour accomplir la besogne à leur place. Les premiers robots ce sont les hommes eux-même, serviteurs d'un système, une société principalement organisée et dirigee par organismes politique & religieux.

Dans la mythologie grecque il est souvent question d’êtres artificiels créés afin d’accomplir une tâche précise, pour défendre une cité – le colosse de Rhodes – ou une contrée – Talos devait défendre la Crète de ses envahisseurs. Homère, dans l’Iliade, présente Héphaïstos accompagné de servantes en or qui l’aidaient dans ses travaux et servaient d’aide domestique. De même, des tables autonomes apportaient le fruit de son artisanat sur le mont Olympe à sa place. On peut également penser, en élargissant un peu la définition du robot, à l’histoire de Pygmalion, qui créa la statue d’une femme d’une beauté si parfaite qu’il en tomba amoureux. Aphrodite le prit en pitié et donna vie à cette statue. Enfin, Héron d’Alexandrie, et bien d’autres encore, était réputé pour la confection de nombreux automates, le plus souvent foncionant avec d'eau.

Le robot, même s’il ne portait pas encore ce nom, apparaît dans l’esprit des hommes comme un serviteur doué de vie, ou du moins d’une certaine autonomie. C’est grâce à celle-ci que le créateur se voit délivré d’un labeur indigne ou désagréable. Le robot est l'exclave qui sert son créateur sans possibilité de se rebeller. Parce qu’il est la propriété de ce dernier. Il n’est là que pour la satisfaction et les désirs de son maître. Originellement, il doit être compris comme un outil.

Une deuxième étape importante pour comprendre la réalité actuelle de la robotique se trouve dans la création d’automates dans un but autre que de remplacer des travailleurs qu'ils demandent un salaire, ils organisent des greves de reveillon. Il peut être objet de luxe pour la bourgeoisie, ou fruit de recherches scientifiques tel le canard mécanique de Vaucanson ou, dans la Grèce antique, les automates à eau construits par Héron d’Alexandrie. Les automates se distinguent des robots tels que définis dans l’introduction par le fait qu’ils ne sont que des mécanismes, qu’ils ne possèdent pas une intelligence, même minime. Ils sont un stade antérieur du robot. Il faut cependant noter que cet ancêtre du robot n’est pas créé dans le but de travailler à la place de l’homme, mais pour manifester la puissance technicienne de l’homme.

Avec le machinisme puis la révolution industrielle se développe grandement la volonté de fabriquer des produits techniques permettant une plus grande efficacité au travail. S’il n’est pas possible de parler de robots dans les grandes chaînes de production de l’époque, il faut cependant noter que la technique prend encore ici un rôle d’aide pour l’homme, afin de l’assister dans la réalisation de tâches difficiles.

Le terme robot apparaît dans une pièce de théâtre, R. U. R. (Rossum’s Universal Robots) écrite et mise en scène par Karel Capek au début des années 1920. Le terme est dérivé de robota, qui signifie en tchèque travail forcé et qualifiait les travailleurs artificiels apparaissant dans la pièce.

L’Intelligence Artificielle

L’idée d’Intelligence Artificielle apparaît en 1956 lors d’un congrès scientifique. C’est Alan Turing qui en sera le pionnier le plus influent. La base du raisonnement est l’algorithme. C’est de la logique. Par ailleurs l’Intelligence Artificielle est bien une science, qui subit un double processus de vérification, l’un formel, l’autre empirique. On peut distinguer deux formes d’I.A. : la faible est basée sur une discipline scientifique, et est une simulation de comportements intelligents : elle vise la reproduction des activités de l’entendement. C’est la forme la plus répandue aujourd’hui. L’Intelligence Artificielle forte proposerait elle de reproduire la conscience. C’est là, pour l’instant, un mirage – par exemple celui du golem. Cette dernière forme est cependant l’objet de nombreuses recherches.

Ce n’est cependant qu’au début des années 1990 que l’Intelligence Artificielle se voit introduite dans des organismes robotiques. C’est cet être artificiel composé d’un corps mécanique et d’une Intelligence Artificielle qui est, au sens plein, un robot. Sans cette insertion, la volonté d’établir une charte éthique des droits du robot ne se serait pas développée.

Les Trois Lois de la Robotique : du manuel de la Robotique d'après Isaac Asimov

Les trois lois de la robotique développée dans les années 50 par Isaac Asimov sont un point de départ affiché aux réflexions sur les droits du robot.
Aussi, il importe de les rappeler :

Première  loi Un robot ne doit pas porter atteinte à un être humain ni, en restant passif, laisser cet être humain exposé au danger.
Deuxième loi Un robot doit obéir aux ordres donnés par un être humain sauf si de tels ordres entrent en contradiction avec la première loi.
Troisième loi Un robot doit chercher à protéger son existence dans la mesure où cette protection n’entre pas en contradiction avec la première loi ou la deuxième loi.

Qu'est donc un robot ?
Engelberger, l'un des pères de la robotique, auquel on a demandé de donner une définition du robot, a dit ceci
D'après le dictionnaire Webster : « Dispositif agissant d'une manière indépendant, ou une action humaine comme un robot »
De sources industrielles : « Manipulation Multi-articulée qui peut être programmée effectuer une variété de tâches différent d'industriel »
Le Robot Institute of America a réussi a donner comme définition : « Si vous payez vos en raison du RIA, vous produisez un robot »
Il a donné ensuite cette autre définition : « Un robot est un manipulateur multifonctionnel reprogrammable conçu pour déplacer des matériaux, pièces, outils, ou a indiqué des dispositifs par des mouvements variables de programmes pour l'exécution d'une variété de tâches »
La diversité de ces définitions nous permet d'imaginer notre robot comme cela nous plait le mieux : « Un homme, ou homme mécanique, un monstre, un esclave ou un extraterrestre »

 

 

Alice au pays des merveilles des bits.

La robotique, tout le monde à entendu parler, plus ou moins, et peut connaissent le fonctionnement dans ce nouvel univers, il y a plusieurs maniérés, Sur votre ordinateur le connecteur de l'imprimante parallèle, la sortie des bits, une petite interface qui vous permettra d'utiliser ces bits qui vont sortir à toute vitesse de votre machine, faute de quoi, ils retourneront au néant, avec cette carte ce bits seront à vous. Libre à vous, de créer un Rambo qui sera à vos ordres !

Les possibilités avec une liaison parallèle sont multiples : Les signaux présent sur les lignes d'une liaison parallèle sont en principe du type niveau logique 1 ou 0 sont représenté par des niveaux électriques haut et bas.

Le connecteur de l'imprimante parallèle possède 3 ports.
Le port 378h ou IBM 3BCh port de sortie des données
Le port 37Ah ou IBM 3BEh port de sortie des codes
Le port 379h ou IBM 3BDh port des entrées

La solution consiste à fabriquer une petite carte pour visualiser les donnes et s'en servir ensuite à volonté. Commençons par le premier le 378h, port de sortie des données : Ce port de sortie correspond, en général sur le connecteur sont les pins 2, 3, 4, 5, 6, 7, 8, 9.
Qui représentant les bits 0, 1, 2, 3, 4, 5, 6, 7, soit 8 bits. Donc avec 8 bits on peut aller de 0 à 255 possibilités.

Schéma des 8 bits : [ bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0 ] On peut également aux bits indépendamment par la méthode binaire.

Pour allumer ou étendre un bit détermine par sa valeur correspondante.
Bits = 7 6 5 4 3 2 1 0
valeur = 128 64 32 16 8 4 2 1
2 puissance = 7 6 5 4 3 2 1 0

Il suffit d’envoyer la valeur sur le port pour allumer ou étendre le bit correspondant.

Explication :

Pour allumer le bit 3 ont envoi la valeur décimale 8
Port 378h = 0
Port 378h = Port 378h + 8

Pour étendre ont fait l'inverse on soustrait la valeur
Port 378h = Port 378h - 8

On peut bien sur allumer ou éteindre plusieurs bits en même temps, en additionné lavaleur correspondante.

Methode

Allumer le bit 3 et 6.
pour le bit 3,  ce sera 8
pour le bit 6,  ce sera 64
donc 8 + 64 = 72
donc Port 378h = Port 378h + 72
Les bits 6 et 3 sont allumés, soustraire 72 pour les éteindre.

 

 

Réalisation de la carte

La méthode est simple, la carte comporte 8 voies identiques c’est à dire une voie par bit. C'est à la sotie de cette carte qu’on peut relier tout appareil électrique ou électronique à commander. Il faut un connecteur de 25 pins male avec un mètre environ de fil les pins à relier à la carte du 1 à 18.

Dans la réalisation de cette carte on utilise seulement 9 fils, huit pour les sorties donnes et un pour le commun négatif ou masse de l’ordinateur, mais par la suite si ont veut faire évoluer cette réalisation avec les Ports 37Ah et 379h le câblage du connecteur sera déjà fait une fois pour toutes.

Carte
Alimentation pour la carte 220V - 5Vcc.

On commence par inverser les signaux de huit voies avec un circuit inverseur en préférence de bonne qualité, j’employé un CMOS 14049 ou la consommation et minime, le circuit possédé 6 voies donc il faut deux circuits et ont emploi 4 voies par circuit.

En suite on amplifie les signaux avec un transistor (PNP) BC 251 A ou équivalent, le signal amplifie et destinée à commander un photo coupleur que permet de faire une isolation électrique du montage avec l’extérieur tans que sécurité ou voltage, une petite Lede rouge pour visualiser l’état du bit.

Les sorties du photo coupleur son relies à un bornés qu’on peut fabriquer avec de barrettes de dominos électriques, il faut 2 dominos par photo coupleur soit 16 dominos ou 8 à deux liaisons.

Pho photo coupleur SL 5500
T1 BC 251 A
C1 Sextuple Non inverseur 14094
R1 5,6 Ko.
R2 390 Homs
R3 560 Homs.
R4 100 Homs.
Lede Lede rouge
a1, a2 pastilles sur la carte
TR Transfo 3VA 12V
C1 1000 µF.
C2 100 nF.
C3 100 nF.
C4 100 µF.
REG Régulateur 7805 à 5Vols.
F1 Fusible 315 mA.
F2 fusible 125 mA.
V voyant 220 V
int interructeur
P Pont de diodes.


Programme démo pour tester la carte
¤ Programme teste
¤ Programme teste moteur pas à pas

 

Structure d'un moteur Pas à Pas

Contrairement aux moteurs à courant continu qui fonctionnent pendant le temps sous lequel ils sont sous tension, un moteur pas à pas fonctionne par impulsion. D'autre part, un moteur à courant continu ne peut rester alimenté tout en étant immobilisé : il se transforme alors en radiateur et ne tarde pas à être détérioré. Dans sa position de repos, il doit donc obligatoirement être débranché et alors, il n'est pas bloqué en position. Au contraire, les moteurs pas à pas peuvent rester alimentés au repos et permettent alors un blocage en position.

Le mode de commande d'un moteur pas à pas est très différent de celui d'un moteur à courant continu et pour le comprendre, nous sommes obligés de nous intéresser à la structure d'un tel moteur. Un moteur pas à pas comporte un nombre de fils plus important qu'un moteur à courant continu ordinaire (6 ou 8 le plus généralement), ce qui permet souvent de les reconnaître (attention, ce n'est pas toujours vrai). Les moteurs pas à pas : modèles à 6 fils, le rôle de chacun d'eux étant défini sur le schéma ci-contre.

A1 A2 B1 B2 décimal
0 0 1 0 2
0 1 1 0 6
0 1 0 0 4
0 1 0 1 5
0 0 0 1 1
1 0 0 1 9
1 0 0 0 8
1 0 1 0 10

 

Méthode d'un moteur Pas à Pas

Les fils du commun seront reliés soit à la borne plus, soit à la borne moins de l'alimentation suivant les cas d'utilisation. Dans notre raisonnement, nous choisirons la borne moins et une entrée sera activée si elle est reliée au plus (niveau logique 1). Les schémas permettent de comprendre le fonctionnement du moteur par description d'un cycle complet. Le moteur est commandé en rotation par l'envoi sur les entrées des combinaisons suivantes :

Chaque enroulement, de par son sens de bobinage, détermine les pôles magnétiques indiqués sur le stator.

Le rotor (c'est un aimant permanent dans le modèle choisi) est supposé, pour la commodité du raisonnement, n'avoir qu'un pôle Nord et un pôle sud. Il trouve la position d'équilibre indiquée et est bloqué dans cette position. On remarque que les phénomènes intervenant ici sont électromagnétiques, donc c'est l'intensité du courant de commande qui intervient plus que la tension.En changeant la combinaison présente, on change certains pôles magnétiques, ce qui implique un nouvel équilibre : le rotor change de position.

Résume

Pour obtenir un pas, il suffit de passer d'un code à un autre et l'on peut obtenir la rotation théorique en continu d'un tel moteur en envoyant successivement la série de codes l'intermédiaire de l'ordinateur notamment :

L'envoi de codes dans l'ordre inverse se traduit par la rotation de sens contraire. Rotation dans le sens horaire ou une rotation de sens antihoraire. On peut utiliser des moteurs RTC série ID 3IE004 qui sont similaires aux moteurs pas à pas utilisés sur le bras du robot CYBER 310 En particulier, le nombre de pas est le même, les puissances étant différentes.

Pour informations
R1 18k
R2 150 homs
R3 100 homs
C1 100 nf
Cx SAA 1027
Moteur Pas à Pas 6 fils

Les peuples et les civilisations ont connu différents systèmes de numération. Aujourd'hui, dans la totalité des pays, on utilise le système décimal. En fait, d'un point de vue strictement mathématique, tout nombre entier supérieur à 1 peut être pris comme base… [ Ici : les systèmes de numération ]

 

Le futur du corps humain

Dans un avenir proche, la technologie de tige-cellule nous permettra de regrow les membres ou le tissu accidentellement divisés ou endommagés. Le démembrement, le paraplégie, et les désordres tels que le :maladie de Parkinson seront tout des choses du passé. Le Cancer, aussi, sera entièrement durcissable. Et on éliminera l'obésité, la maladie cardiaque, et d'autres maux. Nous aurons également les défenses absolues contre l'infection virale et bactérienne - la mort, ou même les jours perdus, par la maladie sera presqu'inconnu.

Le clonage des humains est des années, pas siècles, loin. Sûrement par une grande partie du millénium suivant on le considérera une de plusieurs options normales pour la reproduction humaine : les dynasties étirant en arrière mille ans existeront par l'année 3000, chaque membre dont est génétiquement identique au fondateur.

Le clonage, ajouté au développement des utérus artificiels, aura des implications profondes pour les structures humaines de sexualité et de famille : les mâles ne seront plus nécessaires afin de commencer la vie, femelles ne seront plus nécessaires pour apporter des foetus nommer. Les individus pourront se reproduire sans associés, s'ils souhaitent, et les associations même sexes seront entièrement capables de la reproduction. Un éventail de structures parenting/famille sera considéré normal.

Mais la reproduction copiant même et sexuelle sera par la suite considérée étrange. Plus populaire être le final dans des bébés d'essai-tube : véritable la progéniture de concepteur, dont l'ADN est créée pas des gamètes fournies par les parents mais est plutôt nucléotide accumulé par le nucléotide, codant avec précision pour la création d'un nouvel être humain avec des traits demandés spécifiques. Nous saurons ce que chaque combinaison de gène fait, et pourrons créer l'ADN qui produira, par exemple un enfant qui aimera le base-ball, soit un ventilateur de la science-fiction, chantent fabuleusement, ont une aptitude pour des mathématiques, et comme pour manger a fait cuire des légumes. (Naturellement, nous découvrirons que quelques possibilités, en raison de la corrélation entre les gènes, ne seront pas réalisables : il peut être impossible de produire un enfant humain qui est a fortement - boxeur habile et aime également faire les jouets des enfants.)

En effet, les programmeurs de la vie pourront aller plus loin, faisant de nouvelles sortes des êtres humains : les humains avec les ouïes qui peuvent vivre sous l'eau (menant au développement de vastes villes submergées et de flottements, ouvrant de nouveaux territoires pour soulager le surchargèrent), les humains adaptés pour des conditions arctiques, et les humains qui peuvent vivre sur la surface de Mars avant qu'elle terraformed (voient mes spéculations le futur du système solaire).

Mais, n'importe comment un enfant est produit, sa durée de vie sera beaucoup plus longue que le nôtres sont aujourd'hui. Bâtiment sur la recherche du 20ème siècle sur des télomères, nous apprendrons comment faire des cellules se reproduire pour toujours sans former des tumeurs ; les humains vivront pour des milliers de centaines sinon d'années. (Nous apprendrons également comment stocker des mémoires dans des implants cybernétiques, de sorte que notre tissu de cerveau puisse continuer à régénérer durant toute nos vies sans nous la voie perdante de nos passé.)

En attendant, le clonage sélectif des organes et des tissus de corps augmentera également nos durées de vie : les gens remplaceront par habitude leurs yeux, coeurs, poumons, reins, et d'autres pièces par des versions copiées et plus jeunes développées de la manière prescrite sans besoin - ou les dilemmes moraux épineux - de produire des clones de plein-corps.

Et nous éliminerons cet ennui embêtant connu sous le nom de sommeil ; avec quelques coups secs génétiques, ces durées de vie prolongées seront entièrement éveillées dépensé, les faisant semblent bien plus généreuses. Nous éliminerons également la consommation et la digestion, d'une manière affreuse manières inefficaces d'alimenter un corps, se passant de elles en faveur des paquets bon marché de bioénergie de froid-fusion.

De telles sources d'énergie, et les implants mentionnés ci-dessus de mémoire, seront seulement une des quelques dispositifs artificiels enterrés dans nos corps. D'autres amplifieront notre résistance physique et augmenteront nos possibilités mentales.

Les implants d'ordinateur nous fourniront l'accès instantané à l'information ; penser simplement à une matière sera assez pour télécharger des informations sur lui dans nos cerveaux (au revoir, surfer de Web ; bonjour, conscience globale). En outre, nous ne pourrons communiquer par les émetteurs récepteurs intégrés avec d'autres n'importe où sur la planète - plus de portables ; juste la pensée que vous voudriez avoir d'un mot avec votre tante Molly sera assez pour vous mettre dans le contact avec elle : télépathie simulé par la technologie.

Après quarante milléniums de stabilité biologique - humains entièrement modernes a émergé il y a 40.000 ans - nous prendrons le plein contrôle de notre évolution dans le prochain millénium, production saine, heureux, êtres de proche-immortels avec des capacités énormément augmentées.

La Science du millénium suivant
Le futur du corps humain par Robert J. Sawyer
© 2000 de copyright par Robert J. Sawyer.

Milan Kundera

Milan Kundera

«Il n'y a aucun mérite à bien se conduire avec ses semblables. [...] On ne pourra jamais déterminer avec certitude dans quelle mesure nos relations avec autrui sont le résultat de nos sentiments, de notre bienveillance ou haine, et dans quelle mesure elles sont conditionnées par les rapports de force entre individus.

La vraie bonté de l'homme ne peut se manifester en toute pureté et en toute liberté qu'à l'égard de ceux qui ne représentent aucune force. Le véritable test moral de l'humanité (le plus radical, qui se situe à un niveau si profond qu'il échappe à notre regard), ce sont les relations avec ceux qui sont à sa merci: les animaux. Et c'est ici que s'est produite la faillite fondamentale de l'homme, si fondamentale que toutes les autres en découlent.»

Dans L'Insoutenable légèreté de l'être

Léonardo di Ser Piero da Vinci

Léonard de Vinci

"J'ai rejeté la viande depuis très tôt dans mon enfance, et le temps viendra où les hommes, comme moi, regarderont le meurtre des animaux comme ils regardent maintenant le meurtre de leurs semblables."
Citation de Léonard de Vinci, attribué par Dimitri Merejkovski dans "Le roman de Léonard de Vinci"

« La simple idée de permettre l'existence de souffrance inutile, et encore plus celle d'enlever la vie, était quelque chose qu'il détestait. »
L'Esprit de Léonard de Vinci (1928), Edward MacCurdy

« Léonard aimait tant les animaux qu'il est devenu végétarien. »
En découvrant la vie de Léonard de Vinci, traduction de 1991, Serge Bramly

Léon Tolstoï

Léon Tolstoï

Léon Tolstoï adopta une diète végétarienne en 1885.
Il préconisa le « pacifisme végétarien » et prona le respect de la vie sous toutes ses formes même les plus insignifiantes.

Il écrit qu'en tuant les animaux « l'homme réprime inutilement en lui-même la plus haute aptitude spirituelle - la sympathie et la pitié envers des créatures vivantes comme lui - et qu'en violant ainsi ses propres sentiments, il devient cruel ». (Léon Tolstoï, 1900 - The morals of diet, or, the first step).

Il considérait par conséquent que la consommation de chair animale est « absolument immorale, puisqu'elle implique un acte contraire à la morale: la mise à mort » (Léon Tolstoï, 1987 - Writings on Civil Disobedience and Nonviolence).

Plutarque

Plutarque

« Il (l'humain) mange de la viande sans y être poussé par la nécessité ou le manque de vivre puisqu'au fil des saisons il peut successivement moissonner, cueillir, engranger toutes sortes de végétaux et de céréales jusqu'à satiété ; mais le dégoût des nourritures naturelles et l'envie de plaisirs nouveaux le poussent à rechercher des aliments défendus, souillés par le meurtre des animaux, et il se montre alors bien plus cruel que les bêtes les plus féroces ». Pour un petit morceau de viande, nous volons une âme de lumière et l’espace de temps dans laquelle elle est née et pour lequel elle se réjouissait.

« Comment ses yeux purent-ils souffrir de voir un meurtre ? » De voir tuer ? Écorcher, démembrer une pauvre bête ? « Comment son odorat pu-t-il en supporter l'odeur ? Comment son goût ne fût-il pas dégoûté d'horreur, quand il vint à manier l'ordure des blessures, à recevoir le sang et le suc sortant des plaies mortelles d'autrui ? »

« Si lu veux t'obstiner à soutenir que la nature t'a créé pour manger telle viande, tue-la donc toi-même le premier, je dis toi-même, sans user de couperet ni de couteau, mais comme le font les loups, les ours et les lions qui, à mesure qu'ils mangent, tuent la bête. » (Trois traités sur les animaux, Plutarque » éditions POL, 1992).

Dans l'époque 2011 ont peut conclure cette définition d'un ROBOT

« Un homme qu'il se lève à 5heues du matin et âpres 2heures de trajet par métro, bus, mobilité, bicyclette ou machine à 4 roues très polluante, travaille 8 heures pour son maitre, et il retourne chez lui avec 2 heures de trajet comme au début, regarde 2 heures la TV pour laver son cerveau de mauvais idées qui peut avoir de révolte, il se couche pour dormir 6 heure avec un somnifère pour repos de sont mécanisme, et il recommence le demain-matin la même chose et ainsi pendant 365 jour le temps que la planète à fait un tour où tour du soleil, et voila un ROBOT parfait ! ».

Voila la grand évolution des l'hommes terrestres de 2011, converti scientifiquement et techniquement en ROBOTS formates comme un disque-dur pré à l'emploi pour la grande consommation BIO !

Pansez-vous qu'il sera temps de ce révolter, avant que vous souillez prés à être classe dans la boîte des oubliettes.
Êtes-vous rentable pour votre gourou le grand patron ? Savez vous coder et décoder des documents écrits Binaire et Hexadécimal ?
Voulez-vous déclarer la guerre au système ?

  • Êtes-vous prés à faire la révolution pour 2011 ?
  • Votez-vous pour le mondialisme qu'il vous dit ce qu'il faut faire et ce que vous devez panser pour être retable au système ?
  • Pansez-vous que le mondialisme vous à converti en un robot docile et rentable ?
  • Pansez-vous que la Liberté, Egalité et Fraternité c'est bon pour ceux qu'ils crèvent de faim ?
  • Aimez-vous les riches qu'ils vous exploitent pour devenir un peut plus riches ?
  • Achetez vous des pilules pour garder votre ligne ?
  • Portez vous Jeans-levis 501 MADE in USA fabriques un MADE in Chine ?
  • Pansez-vous que la bêtise humaine, fait grossir ou maigrir ?
  • Pansez-vous que c'est bien ou mal, de faire une pose de 10 minutes pour fumer dans la cour une cigarette qui tue ?
  • Pansez-vous, si c'est bien la cigarette qui tue ? Ou celui qui la fume qu'il tue la cigarette ?
  • Connaissez-vous la Bio machine ? L'œuf en bouteille ?
  • Savez-vous qui à fait la première bouteille ?
  • Savez-vous qui à fait le premier œuf ?
  • Savez-vous qui à fait la première poule ?
  • Pansez-vous que la première poule à fait la première bouteille ?
  • Pansez-vous que c'est la première poule qu'il à fait le premier œuf ?
  • Achetez-vous des œufs en bouteille ?

Le saviez-vous que Einstein avait dit : « Deux choses sont infinies, l'Univers et la sottise humaine, mais je ne suis pas sûr de ce que j'affirme au sujet de l'Univers ».

 

Coder et Décoder un texte ASCII en BINAIRE

Avec cette méthode vous pouvez coder et décoder des textes confidentiels. Il code en binaire, le codage et très simple, une lettre est remplacée par un chiffre en binaire Pour le décodage et c'est l'inverse le chiffre en binaire et transforme en décimal qui lui et transforme en une lettre du alphabet code ASCII, coder un texte de caractères ASCII.
Exemple : (non correcte: " œuf " ) (Correcte: " oeuf " ).
Vous pouvez coder un message où un article en binaire, il suffit ensuite de copier et le coller sur le « textarea » et lancer le codage/décodage.

Ecrivez un texte en Ascii : lettre, numéros, espaces, retour de ligne etc.

               

Coder et Décoder un texte ASCII en BASE-64

Avec cette méthode vous pouvez Coder & décoder de textes caractères en utilisant l'algorithme BASE-64 des textes confidentiels. Pour le décodage et c'est l'inverse il transforme le texte à l'orinine de l'alphabet ASCII.
Exemple : (non correcte: " bœuf " où "cœur") Remplacer par : (Correcte: " boeuf " et coeur ).
(Non correcte "… = & hellip;" remplazez le par trois points ="...').
Vous pouvez coder un message où un article en Base-64, il suffit ensuite de copier et le coller sur le « textarea » et lancer le codage & décodage.


               

 

Avec la logique ont peut arriver à garde la tète

Un homme a commis un crime et est passible de la peine de mort
Il à le droit de faire une déclaration.

  1. Si la déclaration, est vraie, il sera noyé !
  2. Si la déclaration, elle est fausse, il sera pendu !

Que déclaration doit-il énoncer pour que le bourreau ne sache plus quoi faire ?

Le condamné doit déclare :    

 

© Cryptography Tools

Codes ASCII 437 US caractéres 32 à 255

Le sommeil & rêves chez les animaux.

Sommeil et rêve chez les animaux Tous les animaux dorment et beaucoup, comme l'homme, rêvent.

Certains oiseaux sommeillent en volant tandis que les poissons rouges se reposent sans se noyer. Le sommeil représente un moment précieux durant lequel l'animal refait le plein d'énergie. Mais, au-delà d'une simple nécessité physiologique, dormir et se reposer constituent aussi des stratégies de survie. Le réflexe qui pousse un nourrisson à serrer le poing dès qu'il sent quelque chose lui caresser la paume de la main n'est qu'un souvenir de l'époque où notre espèce, luttait elle aussi, pour sa survie.

Quand les animaux rêvent

Pour être sûr d'avoir à faire à un véritable dormeur, il faut que l'absence de mouvements s'accompagne au moins de la posture de sommeil inhérente à l'espèce.
Chaque espèce possède une position spécifique :

  • Le chien se met en boule
  • La guêpe garde la tête baissée, antennes enserrées entre les pattes antérieures
  • La chauve-souris se pend à l'envers
  • l'Ara se tait quand il dort et adopte une position typique des oiseaux, tête et bec enfouis sous une aile
  • Les chevaux sauvages dorment généralement debout, les uns serrés contre les autres
  • Le flamand rose replie l'une de ses pattes pour dormir

La seule preuve que l'animal dort vraiment est en fait invisible. Il s'agit d'une onde électrique. Lorsqu'un animal s'endort, les ondes électriques émises par son cerveau se ralentissent et prennent de l'amplitude.

De plus, les mammifères et plus faiblement les oiseaux, présentent durant leur sommeil une phase appelé " sommeil paradoxal ".

Cette phase est liée aux rêves

Chez l'homme, ce sommeil paradoxal est également associé, dans 90% des cas, aux rêves. Bien sûr, aucun animal ne peut raconter ses rêves. Il a donc fallu inventer un protocole expérimental. Dans les années 1950, Michel Jouvet imagina une procédure originale. Il localisa chez le chat les neurones qui font que, pendant ce sommeil paradoxal, les muscles restent immobiles. Ces neurones neutralisés, le chat pouvait donc manifester ses éventuels rêves.

De fait, les yeux fermés, le chat en sommeil paradoxal, se met à courir comme s'il poursuivait une souris et à hérisser son poil comme si un danger approchait. Tout porte à penser que les rêves animaliers reflètent les préoccupations de chaque espèce. Ce sont les primates qui bénéficient d'un sommeil identique à celui de l'homme avec un sommeil paradoxal qui intervient toutes les 90 minutes.

Ni les insectes, ni les animaux à sang froid ne présentent de sommeil paradoxal. En revanche, le sommeil des oiseaux abrite des périodes de sommeil paradoxal embryonnaire.


A quoi peut bien rêver un tigre ?


Une stratégie de vie et de survie

Le sommeil constitue d'abord un moyen de s'économiser et de conserver les calories indispensables. On connaît bien le crocodile qui se repose, gueule ouverte, pour emmagasiner de la chaleur.

Mais, le sommeil est également une stratégie pour éviter les prédateurs. Les proies s'activent quand leurs prédateurs dorment et lorsque les ennemis s'agitent, elles se dissimulent dans un abri.

Dans la nature, la trêve du sommeil est fragile. Il faut toujours faire face à la dure loi de la jungle.

Deux stratégies s'imposent et s'opposent :
  1. Soit s'économiser en dormant beaucoup
  2. Soit s'activer, manger et donc chasser ce qui revient à dormir peu

Carnassiers et herbivores ne sont pas égaux face à ce choix. Les herbivores doivent ingurgiter une très grande quantité de végétaux car leur alimentation est peu énergétique. Les herbivores, proies par excellence, dorment d'un sommeil inquiet, léger et par courtes périodes.

Aussi, de manière générale, les herbivores dorment-ils moins que les carnassiers qui, eux, s'octroient de longues siestes digestives.


Le Paresseux - une mère et son petit


Le paresseux est le champion du sommeil puisqu'il dort une vingtaine d'heures par jour. Pendu à sa branche, tête en bas, son plus grand effort consiste à descendre de son arbre une fois par semaine pour déféquer au sol.

Le koala dont la nourriture est peu énergétique passe également une grande partie de son temps à dormir ou somnoler dans les arbres.



A l'inverse le Manchot Royal et le Manchot Empereur sont de petits dormeurs. Droits comme des « i », ils ne sommeillent jusqu'à 80 minutes par jour. Le manchot est le seul oiseau vivant et se reproduisant dans des conditions climatiques extrêmes (jusqu'à -50 degrés). Pourtant les manchots et les pingouins présentent la quantité la plus importante de sommeil paradoxal chez les oiseaux.

Le sommeil constitue un danger

Le sommeil constitue un danger pour l'animal et surtout sa progéniture. De ce fait, chaque espèce, en fonction des dangers qui la menacent, à développer une position idéale pour se reposer. Le babouin dort assis sur une branche en position instable. Le moindre balancement de la branche le réveille. La girafe dort peu et surtout debout. La position couchée pourrait lui être fatale étant donné sa taille. Les rares fois où l'on voit des girafes couchées, elles se mettent dos à dos pour s'avertir mutuellement du danger mais alors, elles ne dorment pas.
Par contre, le lion ne craint personne il dort, étalé au sol de tout son long. Il ne s'éveille que pour bailler, s'étirer et reprendre sa sieste.




Le bâillement n'est pas le propre de l'homme. Dans un troupeau d'éléphants, si un individu se met à bailler, les autres l'imitent par contagion et le groupe se dirige vers une clairière qui servira de dortoir. Certains éléphants se couchent, la tête sur un oreiller de feuilles, confectionné du bout de la trompe. A l'abri entre les pattes de sa mère, l'éléphanteau suce sa trompe, comme un bébé son pouce.

L'éléphant, le plus gros des mammifères, semble faire des plus petits dormeurs avec moins de 4 heures de sommeil par jour. Ainsi, il semble qu'il y ait une corrélation inverse entre le poids du corps et les quantités journalières de sommeil total et de sommeil paradoxal.



Le poisson-perroquet secrète chaque nuit un sac de couchage avec une étrange substance qui se solidifie au contact de l'eau. C'est un système automatique de la vessie natatoire qui permet aux poissons d'arrêter de nager pour dormir. Cette vessie de stabilisation communique avec l'intestin. Pour la gonfler, le poisson avale de l'air à la surface, juste assez pour atteindre la profondeur qui lui convient. Pour modifier sa position, il dégaze en faisant des bulles.

Un sommeil qui suit l'évolution du cerveau Il est certain que le repos s'est complexifié au fur et à mesure que s'élaborait un cerveau de plus en plus sophistiqué. Seuls les animaux les plus évolués, oiseaux et mammifères, connaissent un sommeil véritable présentant deux phases principales : « Le sommeil lent » et « Le sommeil paradoxal » Le sommeil lent est vital pour la régénération de l'organisme.

Le sommeil paradoxal aurait plutôt des prérogatives cérébrales. Les nouveaux-nés, de même que les prématurés humains, connaissent un taux de sommeil paradoxal deux fois supérieur à celui de l'âge adulte.

On suppose donc que la maturation cérébrale, non achevée à la naissance, se poursuit durant le sommeil paradoxal. De même, l'hormone de croissance est secrétée, chez les juvéniles, durant le sommeil. En dormant bien, en rêvant, animaux et hommes deviennent grands.
ref. bibliographie : Le sommeil des animaux, Corine Lacrampe Editions l'Iconoclaste.


Découverte du sommeil paradoxal
« la physiologie du rêve » Dr Jean-Michel Crabbé.

Les plantes du sommeil
  • ANIS L'anis vert possède une action hypnogène, l'anis étoilé possède les mêmes vertus.
  • ASPÉRULE ODORANTE Son action principalement antispasmodique peut secondairement aider à la continuité du sommeil.
  • AUBÉPINE Une des causes principales d'insomnie est l'hypertension. La fleur d'aubépine est un régulateur de la tension. Elle peut donc secondairerr4 agir sur l'insomnie.
  • BALLOTE Elle est sédative et conseillée dans les insomnies psychophysiologiques chroniques.
  • BASILIC (feuille) Essentiellement tranquillisant, il convient pour les insomnies liées au stress.
  • CAPUCINE (feuilles) Intéressante pour les troubles du sommeil dus à un problème respiratoire (asthme, bronchite, etc.).
  • COQUELICOT (pétales) A conseiller lors de troubles du sommeil provoqués par des atteintes de l'arbre respiratoire, le coquelicot est un remarquable calmant.
  • HOUBLON (cônes) Son action soporifique est particulièrement utile contre les insomnies d'origines nerveuses.
  • LAITUE Tire ses propriétés calmantes du lactucarium, substance hypnotique douce.
  • LAVANDE (fleurs) Dans la cas d'insomnie rebelle, il convient de mélanger chaque soir à l'eau du bain, une infusion de lavande ou de romarin ou de menthe. A chaque bain on change d'infusion.
  • MANDARINE (fruit) II convient d'en manger deux ou trois au repas du soir.
  • MARJOLAINE Ses effets soporifiques sont puissants.
  • MÉLISSE L'eau de mélisse est connue depuis l'antiquité pour ses propriétés calmantes, elle améliore la digestion.
  • ORANGER L'eau de fleur d'orange doit être prise avec parcimonie car à doses élevées elle est excitante.
  • PASSIFLORE Ses vertus soporifiques sont connues et elle constitue le remède contre les insomnies accompagnant les troubles anxieux et dépressifs.
  • REINE DES PRÉS Les insomnies dues à des douleurs peuvent être soulagées par ses composantes calmantes et analgésiques.
  • ROMARIN Particulièrement conseillé dans les difficultés de sommeil dues à un dysfonctionnement de l'appareil digestif.
  • THYM A les mêmes propriétés que la capucine et le coquelicot.
  • TILLEUL Contrairement à ce que l'on croit habituellement, la prise de tilleul ne peut dépasser 5g par demi-litre d'eau, car au-delà de cette dose, il possède un effet stimulant.
  • VALERIANE Prescrite pour toutes les formes d'insomnie depuis la plus haute antiquité. C'est l'infusion de sa racine séchée qui contient le principe actif.

Commande Numerique

L'usinage sur les machines à commande numérique contraint l'utilisateur à se servir de langages de programmation. Le dialogue homme-machine s'établit grâce à ces langages, mais précédant la rédaction de programme proprement dit, la phase d'analyse offre une activité fructueuse car elle permet de développer des aptitudes transférables en programmation: analyse de la situation initiale ( énonce du problème à traiter ); analyse de la situation finale ( résultat obtenu ); - analyse descendante par décomposition successive du problème en difficultés élémentaires; - analyse ascendante ou l'on commence par résoudre des problème simples dont on sait qu'ils vont contribuer à la résolution du problème initial […]

Une analyse structurée cherche à énoncer le problème, à le décomposer en parties élémentaires afin que la solution soit exprimée comme une suite d'actions faciles à appréhender. S'il n'existe heureusement pas de dogme, l'analyse structurée permet un apprentissage plus cohérent de la programmation, indépendamment de tout langage utilisé. L'équipement des entreprises en machines-outils à commande numérique suppose, bien entendu, une formation adaptée des futurs techniciens et techniciens supérieurs appelés à les utiliser […]


La Programmation en Commande Numerique

Une Machine-outil à Commande Numérique par Calculateur (MO CNC ou plus simplement CNC) est capable de commander ses propres mouvements suivant deux ou trois axes (voire davantage), et de mesurer avec précision les déplacements des organes mobiles (porte-pièces et/ou porte-outils).
Ces automatismes sont gérés par un système électronique qui garde en mémoire la description des différentes opérations à effectuer, le programme […]


Regles d'utilisation des decalages

La mesure de position est toujours repérée par rapport à l'origine mesure. Les cotes programmées peuvent être exprimées dans les formes suivantes
Programmation absolue (G90) La cote est repérée par rapport à l'origine programme.
Programmation relative (G91) La cote est repérée par rapport à la position précédente.
Programmation absolue par rapport à l'origine mesure (G52) La cote est repérée par rapport à 1 'origine mesure.
N10 G52 X ± 5.3 Y ± 5.3 Z ± 5.3
Les décalages et corrections d'outils ne sont pas pris en compte. Cette fonction est révoquée en fin de bloc et doit être programmée avant les adresses des axes et sans correction de rayon (G41 - G42). Cette programmation est utilisée pour amener le point piloté sur un point fixe (changement d'outil automatique par exemple).

G52 programmation par rapport à l'origine mesure. | G52 programmation par rapport à l'origine mesure pour axes parallèles.


La Programmation

La programmation consiste à décrire les opérations prévues dans un langage codé assimilable par le calculateur de la machine. Ce travail peut être manuel où partiellement automatisé grâce à des dispositifs d'aide à la programmation (logiciels intégrés ou externes). Les logiciels d'aide à la programmation (logiciels de Fabrication Assistée par Ordinateur, F.A.O.) permettent d'éviter de fastidieux calculs de points. A partir du dessin de la pièce à usiner, ils calculent puis traduisent en ordres compréhensibles par la machine les déplacements à réaliser. Le programmeur en commande numérique reste responsable de l'analyse et de la structuration du programme.

Stockage et trasfert de l'information

La description du programme est matérialisée par un support (bande perforée ou support magnétique de micro-ordinateur). Le stockage sur support magnétique offre des avantages certains par rapport au stockage sur bande. Le volume et le coût du support sont très inférieurs ; les modifications d'un programme sont rapides et ne nécessitent pas la création d'une nouvelle bande ; l'écriture d'un programme n'immobilise pas le clavier de la machine. Le transfert micro-ordinateur - CNC s'effectue par un logiciel spécialisé, ce qui est plus fiable et plus rapide qu'un transfert par lecture optique de bande perforée.

Arithmétique - compter en Shadok

Malgré ses moyens intellectuels limités, le professeur Shadoko finira quand même par inventer une façon de compter en base 4 avec comme chiffres, BU ZO MEU. Le devin plombier décréta que les écoliers shadoks avaient un jour pour apprendre à compter et que si, au bout de ce délai ils s'en trouvaient incapables, on brûlerait le professeur Shadoko. Les écoliers shadoks, bien sûr, apprendre à compter, ça les intéressait beaucoup mais brûler le professeur, ça les intéressait aussi !
Finalement, le lendemain, tous les écoliers shadoks savaient compter, au-delà de 4.

Voici donc cette fameuse méthode « Quand on a MEU shadoks, et qu'on en ajoute BU, il n'y a plus de place. On les met alors dans une poubelle. Il y a donc BU poubelle et GA shadok à côté » Ce qui donne BU GA, soit 4 en décimal.

0 Ga 6 Bu-Zo
1 Bu 7 Bu-Meu
2 Zo 8 Zo-Ga
3 Meu 9 Zo-Bu
4 Bu-Ga 10 Zo-Zo
5 Bu-Bu 11 Zo-Meu

L'analogie avec les quatre nucléotides de l'ADN, A, T, C et G, seuls utilisateurs du système quaternaire, est remarquable.

Un logiciel existe permettant de convertir un nombre en écriture décimale (base 10), en Shadok. Il est naturellement possible d'effectuer la conversion inverse, du Shadok en Décimal.

Reproduction

La reproduction, chez les Shadoks, a toujours été un grand problème. Les Shadoks pondent des œufs, dès qu'ils savent compter jusqu'à 4. Au début, ils pondaient des œufs ordinaires, mais ceux-ci se cassaient à chaque fois en raison des grandes pattes des Shadoks. Alors, ils ont commencé à pondre des œufs en fer. Mais il y avait encore un inconvénient, car comme le bébé Shadok à l'intérieur de l'œuf ne pouvait pas sortir, il fallait attendre que l'œuf rouille.

Le « bébé » Shadok était alors déjà très vieux quand il en sortait... Selon un cours magistral du professeur Shadoko — sur la lune; série ZO — l'œuf se composait de trois sous-ensembles : l'intérieur, l'extérieur, et l'entre-deux (la coquille), mais l'intérieur étant composé de la même chose que l'extérieur, on en déduit donc que l'œuf est composé essentiellement de l'extérieur.

Logique

Sa plus notable manifestation est le cours magistral du professeur Shadoko sur les passoires, dans le cadre du grand programme d'éducation des Shadoks. La logique des Shadoks revêt, en les caricaturant, les caractéristiques propres à la logique de réalisation des programmes informatiques et des mathématiques. Cette forme d'humour provient en partie des concepteurs de l'Animographe et d'une amorce d'anti-bourbakisme.

Par exemple :
  • Il y a deux sortes de passoires : celles qui laissent passer l'eau et pas les nouilles, et celles qui laissent passer les nouilles et pas l'eau
  • une passoire qui ne laisse passer ni l'eau ni les nouilles est une casserole
  • une casserole sans queue est un autobus.
  • la notion de trou est indépendante de la notion de passoire.
Punition - Le Goulp

Le Goulp est une sorte de trou dans la planète Shadok. On y entasse tous les Shadoks ne donnant pas entière satisfaction. Il est également appelé Enfer, puisque ceux qui sont jetés dedans sont enfermés. Seul le Chef Shadok a le pouvoir d'envoyer au Goulp. Le professeur Shadoko, parce que sa Cosmopompe produira des résultats médiocres, en fera d'ailleurs l'expérience.
Voir la suite wikipedia : Le sytemme SHADOK… et Le moteur perpétuel par les Shadoks

La logique des Shadoks
« Mais pourquoi faire simple quand on peut faire compliqué ¡ »

Voir aussi les vidéos "Les Shadoks. Episodes 6 à 10 et 11 à 15 de la Première série (1968).
Google vidéos

          Contenu du fichier :

Phases lunaires


Les phases de la Lune


Les phases de la Lune caractérisent l'aspect que présente la Lune pour un observateur terrestre.
En effet, la Lune se présente soit entre le Soleil et la Terre, soit au-delà de la Terre par rapport au Soleil. L'éclairement de la Lune apparaît donc très différent pour un observateur terrestre.

L'apparence de la Lune varie continûment sur une période de 29 jours et demi environ, correspondant à la période de rotation synodique de la Lune que l'on appelle lunaison. On fait conventionnellement commencer la lunaison à la Nouvelle Lune (NL) date a laquelle les longitudes géocentriques de la Lune et du Soleil sont égales. A ce moment, la Lune est entre le Soleil et la Terre et est donc quasiment invisible pour un observateur terrestre, sauf en cas d'éclipse totale de Soleil.

L'âge de la Lune est le temps écoule depuis la dernière Nouvelle Lune; le jour de la Lune est un nombre entier associe aux jours d'une lunaison en les numérotant consécutivement, le jour numéro un étant attribua‚ au jour durant lequel se produit la Nouvelle Lune.

La Pleine Lune se produit lorsque les longitudes géocentriques de la Lune et du Soleil différent de 180 (la Terre se trouve alors entre le Soleil et la Lune et un observateur terrestre voit la Lune complètement ‚ clairée durant la nuit). Pleine Lune et Nouvelle Lune portent le nom de syzygies.

Les éclipses de Lune se produisent nécessairement au voisinage de la Pleine Lune, celles de Soleil au voisinage de la Nouvelle Lune. Les quadratures sont les époques auxquelles les longitudes géocentriques de la Lune et du Soleil différent de 90 ou de 270.

Le Premier Quartier (PQ) a lieu entre la Nouvelle Lune et la Pleine Lune.
Le Dernier Quartier a lieu entre la Pleine Lune et la Nouvelle Lune.
Les données concernant les éphémérides sont des données officielles du Ministère de l'éducation Nationale.

Les calculs mathématiques sont Copyright 2000 Institut de Mécanique Céleste.
Traduction du programme sur langage Turbo Pascal, le 22/10/2004 par le programmeur A.ARA.

Contenu : unité Lunaire.pas, unite Box13.pas, unité get_key.pas et le programme démo phases de la Lune.

{==============  LES PHASES DE LA LUNE ==================}
{ Unite Lunaire.pas                                      }
{ programmation Turbo Pascal - Borland                   }
{ Copyright (S) 1997-2011                                }
{ programmeur du programme A.Ara                         }
{ 64150 Mourenx - France.                                }
{ Licence d'utilisation accord dans un but démonstratif. }
{ Unite de calcul sur les Phases de la Lune.             }
{========================================================}
{ Clalculs: Copyright 2000 Institut de Mecanique Celeste }
{ traduction sur langage pascal le 22/10/2004 par A.ARA. }
{ Le heure de la lune variable de 1 minute a 4 minutes.   }
{========================================================}

Unit Lunaire;

Interface

{*********************************************************}
{* Infos : procedure couran calculer phases de lune      *}
{* l'annee : entre -4000 et +2500                        *}
{* Les dates des phases de la Lune sont donnees avec une *}
{* precision de quelques minutes. Elles sont en temps    *} 
{* universel coordonné‚(UTC).                            *}
{*********************************************************}

Procedure PhasesLunaire(AAnee,MMois:integer);   {**couran**}

{* fenetre 15,3,68,9 color: 0,7    *}
{* Phases de la lune, jour semaine,*}
{* jour du mois, Heure, minutes    *}


Procedure affiche_jour_de_lunes(xx1,yy1,xx2,yy2:Byte);
 var
     Lunes      : Array[1..6] of string;      {**jours de lune de (4 a 5) note 1 de securite**}
     JourMois   : Array[1..31] of string;     {**definition de jours du mois avec lunes**}
     date_NBJRS : integer;
     Erreur_Date: integer;

Implementation

Uses Crt,Dos,Box13,Get_Key;

Label Debut, fin_Programme;

    const blanc='                                    ';
    
Type
    D_date = Record
               JJD   :extended;
               AN    :integer;
               MOIS  :integer;
               JOUR  :integer;
               TYPEA :boolean;
               NBMOIS:integer;
               NBJRS :integer;        {**nombre de jours du selectione**}
             end;

       O_oar = Record                 
                 OK        :boolean;
                 CODE1     :integer;
                 CODE2     :integer;
                 n_jrl     :integer;
                 JR_courant:integer;
                 bool      :boolean;
                 chaine    :string;
               end;

        f_form = Record
                  nyear  :integer; {*value=date.AN*}
                  nmonth :integer; {*value=date.MOIS*}
                  PHASES :string;  {*variable de lunes value="" *}
                  CAL_JR :string;  {*variable de jours du lois value=""*}
                end;

Var ch      :char;
    date    :D_date;
    oar     :O_oar;
    form    :f_form;
    AA1,MM1,
    JJ1,JS1 :word;
    xpos    :integer;
    varnum,iiii :integer;


    Procedure testmoi(i,pMOIS:integer);  Forward;
    Procedure init_jrl(xmois:integer); Forward;
    Procedure affmoph(i:integer);  Forward;
    Procedure affich_age;  Forward;


Procedure alert(S:string);
begin
   Gotoxy(2,1);
   WriteCn(2,'Erreur: '+S+'  -  presse une touche ');
   csoff;
   ch:=Readkey;
end;



Function mod_x(result,R:real):extended;
 var a,x:extended;

begin
   x := trunc(result) / R;
   a := result-(trunc(x) * R);
   mod_x:=a;
end;



Procedure JJDATEJ;
 var Z1,Z,A,B,C,D,E:extended;

begin
     Z1:=date.JJD+0.5;
     Z:=trunc(Z1);
     A:=Z;
     B:=A+1524;
     C:=trunc((B-122.1)/365.25);
     D:=trunc(365.25*C);
     E:=trunc((B-D)/30.6001);
     date.JOUR:=trunc(B-D-trunc(30.6001*E));

     if(E<13.5) then  date.MOIS := trunc(E-1)
     else  date.MOIS := trunc(E-13);
     if(date.MOIS>=3) then  date.AN := trunc(C-4716)
     else   date.AN := trunc(C-4715);

end; {*ends JJDATEJ*}



Procedure JJDATE;
 var Z1,Z,A,B,C,D,E,ALPHA:extended;

begin
     Z1:=date.JJD+0.5;
     Z:=trunc(Z1);

     if (Z<2299161) then A:=Z
     else
      begin
         ALPHA:=trunc((Z-1867216.25)/36524.25);
         A:=Z+1+ALPHA-trunc(ALPHA/4);
      end;

     B:=A+1524;
     C:=trunc((B-122.1)/365.25);
     D:=trunc(365.25*C);
     E:=trunc((B-D)/30.6001);
     date.JOUR:=trunc(B-D-trunc(30.6001*E));

     if(E<13.5) then date.MOIS:=trunc(E-1)
     else date.MOIS:=trunc(E-13);
     if(date.MOIS>=3) then date.AN:=trunc(C-4716)
     else  date.AN := trunc(C-4715);

end; {*end JJDATE*}



{**TYPEA = 0 annee no-bissextile. TYPEA = 1 annee bissextile.**}

Procedure BISG;
begin
   date.NBMOIS:=12;
   date.TYPEA:=false;

   if ((date.AN mod 4) = 0) then date.TYPEA:=true;
   if ((date.AN mod 100) = 0) and ((date.AN mod 400) <> 0) then
    date.TYPEA:=false;

end;{*ends function BISG*}



Procedure BISJ;
begin
   date.NBMOIS:=12;
   if ((date.AN mod 4) = 0) then date.TYPEA:=true
   else date.TYPEA:=false;

end;{*ends BISJ*}



{**Donne les nombre de jour du mois de une date**}

Procedure Jour_Mois_Max;
begin
   date.NBJRS:=31;
   if (date.MOIS=2) And (Not date.TYPEA) Then
     date.NBJRS:=28
   else
   if (date.MOIS=2) And (date.TYPEA) Then
     date.NBJRS:=29
   else
   if (date.MOIS Mod 2 = 0) And ((date.MOIS>2) And (date.MOIS<7)) Then
     date.NBJRS:=30
   else
   if ((date.MOIS=9) Or (date.MOIS=11)) Then
     date.NBJRS:=30;
end;{*Jour_Mois_Max*}



Procedure Nombre_Jour_Mois_Max;
begin
   if (date.MOIS = 2) and (not date.TYPEA) then date.NBJRS:=28
   else
   if (date.MOIS = 2) and (date.TYPEA) then date.NBJRS:=29
   else
    begin
       if(date.MOIS < 8) and ((date.MOIS mod 2)<> 0) then  date.NBJRS:=31
       else
       if(date.MOIS < 8) and ((date.MOIS mod 2) = 0) then  date.NBJRS:=30
       else
       if ((date.MOIS mod 2) <> 0) then  date.NBJRS:=30
       else
       if ((date.MOIS mod 2) = 0) then  date.NBJRS:=31;
    end;
end;{*ends Nombre_Jour_Mois_Max*}


{**calculant les phases de la Lune**}

Procedure moonph;
 
  Const tabm:Array[0..11] of Real=(0.041e0, 0.126e0, 0.203e0, 0.288e0,
                                   0.370e0, 0.455e0, 0.537e0, 0.622e0,
                                   0.707e0, 0.789e0, 0.874e0, 0.956e0);

        PI314=pi;  {**3.141592653589793**}

var mm,i,ii,nx,xMOIS : longint;
    rad,lik,rk,k,an  : extended;
    j,t,t2,t3,mp,m,f : extended;

begin
    xMOIS:=date.MOIS;
    oar.CODE1:=date.AN;
    oar.CODE2:=date.MOIS;

    if(date.MOIS =1) then
     begin
        an:=date.AN-1;
        date.MOIS:=12;
     end
    else begin
            an:=date.AN;
            dec(date.MOIS);
         end;

    an:=an+tabm[date.MOIS-1];
    k:=(an-1900)*12.3685e0;
    lik:=trunc(k);
    rk:=lik;
    k:=rk-0.25e0;

    if(k<0.e0) then  k:=k-1;

    rad:=PI314/180e0;
    nx:=0;

    for ii:=0 to 11 Do
     begin
        k := k+0.25;
        t:=k/1236.85e0;
        t2:=t*t;
        t3:=t*t2;
        j:= 2415020.75933e0 + 29.5305888531e0*k
             + 0.0001337e0*t2 - 0.000000150e0*t3
             + 0.00033e0*sin(rad*(166.56e0 + 132.87*t - 0.009*t2));
        m:= rad*(359.2242e0 + 29.10535608e0*k
                  - 0.0000333e0*t2 - 0.00000347e0*t3);

        m:=mod_x(m,(2*pi)); {m:=m%(2*PI314);}
        mp:= rad*(306.0253e0 + 385.81691806e0*k
                   + 0.0107306e0*t2 + 0.00001236e0*t3);
        mp:=mod_x(mp,(2*pi)); { mp=mp%(2*PI314);}
        f:=rad*(21.2964e0 + 390.67050646e0*k
                - 0.0016528e0*t2 - 0.00000239e0*t3);
        f:=mod_x(f,(2*pi)); {f=f%(2*PI314);}
        oar.OK:=False;
        i:=(ii mod 4); {i=ii%4;}
        if (i=0) OR (i=2) then
         begin
            j:=j+(0.1734e0 - 0.000393e0*t)*sin(m)
                  + 0.0021e0*sin(2*m) - 0.4068e0*sin(mp)
                  + 0.0161e0*sin(2*mp) - 0.0004e0*sin(3*mp)
                  + 0.0104e0*sin(2*f) - 0.0051e0*sin(m+mp)
                  - 0.0074e0*sin(m-mp) + 0.0004e0*sin(2*f+m)
                  - 0.0004e0*sin(2*f-m) - 0.0006e0*sin(2*f+mp)
                  + 0.001e0*sin(2*f-mp) + 0.0005e0*sin(m+2*mp);
            date.JJD := j;
            testmoi(i,xMOIS); 
            if (oar.OK = True) Then affmoph(i);
         end
         else
          begin
             j := j + (0.1721e0 - 0.0004e0*t)*sin(m)
                       + 0.0021e0*sin(2*m) - 0.6280e0*sin(mp)
                       + 0.0089e0*sin(2*mp) - 0.0004e0*sin(3*mp)
                       + 0.0079e0*sin(2*f) - 0.0119e0*sin(m+mp)
                       - 0.0047e0*sin(m-mp) + 0.0003e0*sin(2*f+m)
                       - 0.0004e0*sin(2*f-m) - 0.0006e0*sin(2*f+mp)
                       + 0.0021e0*sin(2*f-mp) + 0.0003e0*sin(m+2*mp)
                       + 0.0004e0*sin(m-2*mp) - 0.0003e0*sin(2*m+mp);
             if(i = 1) then
              begin     {* Premier quartier *}
                 date.JJD := j + 0.0028e0 - 0.0004*cos(m)
                               + 0.0003e0*cos(mp);
                 testmoi(i,xMOIS);
                 if(oar.OK = true) then affmoph(i); {affmoph(form,i);}
              end
              else
                begin {* Dernier quartier *}
                   date.JJD:=j - 0.0028e0 + 0.0004*cos(m)
                               - 0.0003e0*cos(mp);
                   testmoi(i,xMOIS);
                   if(oar.OK = true) then affmoph(i);
                end;
          end; {*end else*}
     end; {**for..**}

    if (oar.OK = true) then inc(nx);
    if (nx>=4) and (oar.OK = false) then
     begin
         alert('***** break *****');
         csoff;
         ch:=Readkey;
         Erreur_Date:=-1;
         Exit;
     end;

   date.AN:=oar.CODE1;
   date.MOIS:=oar.CODE2;

   Jour_Mois_Max;          {** nombre de jour du mois **}
                           {* editer les derniers jours du mois*}
   while (oar.JR_courant <= date.NBJRS) do
    affich_age;
end; {*ends moonph*}


{** Fonction calculant les phases de la Lune        ***}
{** le test sur le mois doit etre fait sur JJD final **}
{** et non sur sa valeur brute.                      **}


Procedure testmoi(i,pMOIS:integer);

 var D,TETUS,TETUJ : extended;

begin
    D:=oar.CODE1/100.0;                     {*** TE-TU (P.B.) en secondes***}
    TETUS := 32.23*(D-18.30)*(D-18.30)-15;
    TETUJ := TETUS/86400e0;

    {**ajout de 30s pour arrondi sur la minute avant troncature**}
    {**lors de l'affichage**}

    date.JJD:=date.JJD + 0.0003472222e0;
    date.JJD:=date.JJD+(TETUJ);

    if (date.JJD<2299160.5e0) then
     begin
       JJDATEJ;
       BISJ;
     end
    else
      begin
         JJDATE;
         BISG;
      end;

    oar.OK:=false;
    if (date.MOIS = pMOIS) then oar.OK:=true;

    if (i = 0) then
    if (pMOIS>date.MOIS) then init_jrl(pMOIS)
    else
     if (date.MOIS = 12) and (pMOIS = 1) then init_jrl(pMOIS);

end;{*ends testmoi*}




{* le test sur le mois doit etre fait sur JJD final*}
{* et non sur sa valeur brute.                     *}
{* calcul no jour lune du 1er du mois              *}


Procedure init_jrl(xmois:integer);
begin
   if (oar.bool = false) then
    begin
       Jour_Mois_Max; {** Done le nombre de jour du mois **}
       oar.JR_courant:=0;
       oar.n_jrl:=date.NBJRS-date.JOUR+1;
    end;

end;{*ends init_jrl*}



{** calcul no jour lune du 1er du mois **}


Procedure Ajoute_Jour(i:longint);
begin
   JourMois[i]:=form.CAL_JR;
end;



{** affichage phase Lune **}

Procedure affmoph(i:integer);
Const
      mois:Array[0..12] of string[9]=('nul      ','janvier  ','fevrier  ',
                                      'mars     ','avril    ','mai      ',
                                      'juin     ','juillet  ','aout     ',
                                      'septembre','octobre  ','novembre ',
                                      'decembre ');

      mois_fix:Array[0..12] of string[9]=('nul      ','janvier  ','fevrier  ',
                                      'mars     ','avril    ','mai      ',
                                      'juin     ','juillet  ','aout     ',
                                      'septembre','octobre  ','novembre ',
                                      'decembre ');

      nompha:Array[0..3] of string[17]=('NOUVELLE LUNE    ',
                                        'PREMIER  QUARTIER',
                                        'PLEINE   LUNE    ',
                                        'DERNIER  QUARTIER');

      sigpha : Array[0..3] of string[2]=('NL','PQ','PL','DQ');

      tabjm:Array[0..11] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

var F1,FRACJ,HH,hh1,MM,mm1 : extended;
    nombre,jfin,jour       : longint;
    SAN, Shh1,Smm1,Sjour,
    Snombre1,Snombre2,Snombre3 : string;

begin
   Snombre1:='';
   Sjour:='';
   Snombre2:='';Snombre3:='';

   {**date et heure**}

   if (date.JJD < 2299160.5e0) then
     JJDATEJ
   else
     JJDATE;

   FRACJ:=mod_x(date.JJD+0.5e0,1.0);

   jour:=date.JOUR;
   HH:=FRACJ*(24e0);

   hh1:=Trunc(HH);  

   FRACJ:=FRACJ-(hh1/24.e0); 

   MM:=FRACJ * 1440.e0;

   mm1:=Trunc(MM);    

   if(hh1 = 24) then  
    begin
       jfin:=tabjm[date.MOIS-1];
       if(date.JJD < 2299160.5e0) then BISJ
       else
         BISG;

       if ((date.MOIS = 2) and (date.TYPEA = true)) then jfin:=29;
       if(date.JOUR < jfin) then
        begin
           hh1:=0;
           jour:=date.JOUR+1;
        end;
    end;

   while (oar.JR_courant < date.JOUR) do 
    begin
       form.CAL_JR:='';

       oar.JR_courant:=oar.JR_courant+1;

      if (oar.JR_courant<=9) then
       begin
          Str(oar.JR_courant,Snombre1);
          Snombre1:='0'+Snombre1;
       end
      else
       begin
          Str(oar.JR_courant,Snombre1);
       end;

{*A1*}
       
      form.CAL_JR:=form.CAL_JR + Snombre1;

      oar.n_jrl:=oar.n_jrl+1;

      if (oar.n_jrl<=9) then
       begin
          Str(oar.n_jrl,Snombre2);
          Snombre2:='0'+Snombre2;
       end
      else
        begin
           Str(oar.n_jrl,Snombre2);
        end;

      if (date.AN>=-9) and (date.AN<=99) then
       begin
          Str(date.AN,oar.chaine);
          oar.chaine:=' ' + oar.chaine;
       end
      else
        begin
           Str(date.AN,oar.chaine);
        end;

{*A2*}

       form.CAL_JR:=form.CAL_JR + ' '+mois_fix[date.MOIS] +
         ' ' + oar.chaine +' ' + Snombre2;                  

       Ajoute_Jour(oar.JR_courant);
       form.CAL_JR:='';

    end; {*ends while**}

   {** Marquer phase**}

   if (oar.JR_courant<=9) then
    begin
       Str(oar.JR_courant,Snombre3);
       Snombre3:='0' + Snombre3;
    end
   else
     begin
        Str((oar.JR_courant),Snombre3);
     end;

   oar.JR_courant:=oar.JR_courant+1;

{B1} 
   
   form.CAL_JR:=form.CAL_JR + Snombre1;

   if (date.AN>=-9) and (date.AN<=99) then
    begin
       Str(date.AN,Snombre2);
       oar.chaine:=' ' + Snombre2; {date.AN;}
    end
   else
     begin
        Str(date.AN,Snombre2); {oar.chaine=date.AN;}
        oar.chaine:=Snombre2;
     end;

{*B2*}

   form.CAL_JR:=form.CAL_JR + ' '+ mois_fix[date.MOIS] + ' ' +
                             oar.chaine +' ' + sigpha[i];
   oar.JR_courant:=oar.JR_courant-1;
   oar.n_jrl:=oar.n_jrl-1;
   Ajoute_Jour(oar.JR_courant);
   form.CAL_JR:='';

   if (i = 0) then
    begin
        oar.n_jrl:=1;
        oar.bool:=true;
    end
   else oar.n_jrl:=oar.n_jrl+1;

   if (jour<=9) then
    begin
       Str(Abs(jour),Sjour);
       Sjour:='0'+ Sjour;
    end
    else Str(Abs(jour),Sjour);

   Str(date.AN,SAN);
   Str(Abs(hh1):0:0,Shh1);

   if Abs(hh1)<10 Then Shh1:='0'+Shh1;
   Str(Abs(mm1):0:0,Smm1);
   if Abs(mm1)<10 Then Smm1:='0'+Smm1;

   {**Phases de Lunes**}

   form.PHASES:=form.PHASES + nompha[i] + ' ' + Sjour + ' ' +
   mois[date.MOIS] + ' ' +
   SAN + ' … ' + Shh1 + 'h' + Smm1 +  'm UTC';

   Lunes[iiii]:=form.PHASES;
   inc(iiii);
   
   form.PHASES:='';

end;{*ends affmoph**}




{**affichage phase Lune**}

Procedure affich_age;
const
   mois_fix:Array[0..12] of string[9]=('nul      ','janvier  ','fevrier  ',
                                       'mars     ','avril    ','mai      ',
                                       'juin     ','juillet  ','aout     ',
                                       'septembre','octobre  ','novembre ',
                                       'decembre ');
var Snombre1,Snombre2 : string;

begin
   oar.JR_courant:=oar.JR_courant+1;

   if (oar.JR_courant<=9) then
    begin
       Str(oar.JR_courant,Snombre1);
       Snombre1:='0'+Snombre1;
    end
   else
    begin
        Str(oar.JR_courant,Snombre1);
    end;

{C1}

   form.CAL_JR:=form.CAL_JR + Snombre1;

   oar.n_jrl:=oar.n_jrl+1;

   if (oar.n_jrl<=9) then
    begin
       Str(oar.n_jrl,Snombre2);
       Snombre2:='0'+Snombre2;
    end
   else
    begin
       Str(oar.n_jrl,Snombre2);
    end;

   if (date.AN>=-9) and (date.AN<=99) then
    begin
       Str(date.AN,oar.chaine);
       oar.chaine:='  ' + oar.chaine;
    end
   else  Str(date.AN,oar.chaine);

{C2}

   form.CAL_JR:=form.CAL_JR + ' '+
   mois_fix[date.MOIS] + ' ' + oar.chaine +' ' + Snombre2;
   Ajoute_Jour(oar.JR_courant);
   form.CAL_JR:='';

end;{*ends affich_age*}




Procedure Initialise_Moon;
begin
   form.PHASES:='';
   form.CAL_JR:='';
   oar.bool:=false;
 
   Lunes[1]:='';
   Lunes[2]:='';
   Lunes[3]:='';
   Lunes[4]:='';
   Lunes[5]:='';
   Lunes[6]:='';
 
   for iiii:=1 to 31 do
    JourMois[iiii]:='';
 
   iiii:=1;

end;{*ends Initialise_Moon*}



Procedure dateinit;
 var Todays:Word;
begin
   GetDate(AA1,MM1,JJ1,JS1);
   Todays:=AA1; {new Date();}

   if (Todays < 1000) then
     form.nyear:=1900 + Todays
   else
     form.nyear:=Todays;
  
   form.nmonth:=MM1;

end;{*ends dateinit*}



{**function principal  calcul de lune**}

Procedure PhasesLunaire(AAnee,MMois:integer);   {**couran**}
 label fin;

begin
   dateinit;

   if (AAnee<-4000) OR (AAnee>2500) then
    begin
       Erreur_Date:=-1;
       goto fin;
    end
   else
     form.nyear:=AAnee;

   if (MMois<1) OR (MMois>12) then
    begin
       Erreur_Date:=-1;
       goto fin;
    end
   else
     form.nmonth:=MMois;

   date.AN:=form.nyear;
   date.MOIS:=form.nmonth;
   Initialise_Moon;
   oar.bool:=false;
   moonph;
   fin:
end;{*ends PhasesLunaire*}



Procedure affiche_jour_de_lunes(xx1,yy1,xx2,yy2:Byte); {fenetre 15,3,68,9}  {color 9,7}
  Label FinFin;
begin
   if (Erreur_Date= -1) Then goto finFin;
   Window(xx1,yy1,xx2,yy2);   {**15,3,68,9**}
  
   for iiii:=1 to 6 Do
    if Lunes[iiii]<>'' then Writeln(Lunes[iiii]);

   iiii:=WhereY+2;

   Window(1,1,80,25);
   date_NBJRS:=date.NBJRS;
   finFin:
end;{*ens affiche_jour_de_lunes*}

end.

Deno Phases Lunaire

{============  DEMO LES PHASES DE LA LUNE ===============}
{ Demo Demolune.pas                                      }
{ programmation Turbo Pascal - Borland                   }
{ Copyright (S) 1997-2011                                }
{ programmeur du programme A.Ara                         }
{ 64150 Mourenx - France.                                }
{ Licence d'utilisation accord dans un but démonstratif  }
{ avec: unite lunaire.pas +Date30.pas : lunes utilitaire }
{========================================================}
Program Phases_de_lune;

Uses crt,Dos,Box13,Get_Key,Lunaire,Date30;

Procedure Info_Lunaires;

 const blanc='                                    ';

 var Ch            :Char;
     uuu,color,iiii:byte;
     xpos          :integer;
     face,Sface,Jface,Mface,Hface : Array[1..5] of String[19];
     LLL : Array[1..5] of String[52];

 Procedure AfficheLunes(mmm,aaa:Integer);
 var jx,err,i:Integer;

  begin
    Window(15,5,66,11);
    for i:=1 to 5 Do
    begin
      if Lunes[i]<>'' Then
      Begin
        face[i]:=Copy(Lunes[i],1,17);
        Jface[i]:=Copy(Lunes[i],19,2);
        {$R-}
          Val(Jface[i],Jx,err);
        {$R+}
        Mface[i]:=Copy(Lunes[i],22,8);
        Hface[i]:=Copy(Lunes[i],39,10);
        Sface[i]:=GetJourSemaine(Jx,mmm,aaa);
        Sface[i]:=Sface[i]+Copy(blanc,1,8-Length(Sface[i]));
        LLL[i]:=face[i]+' '+Sface[i]+' '+Jface[i]+' '+ Mface[i]+' '+Hface[i];
        Writeln(LLL[i]);
      end;
    end;
   Window(1,1,80,25);
 end;

begin
  color:=7;
  SetColor(1,color);

  BoxFill(5,3,75,23,' ');
  Rectangle(5,3,75,23,Simple);

  SetColor(4,color);
  WriteCn(3,' Phases de la Lune ');
  SetColor(1,color);

  PhasesLunaire(2011,7); {**date: Annee et mois**}

  AfficheLunes(7,2011);  {**date: mois et Annee**}

  {*******************}

  iiii:=31;
  SetColor(4,color);
  Window(1,1,80,25);
  iiii:=11;
  SetColor(1,color);
  Window(7,11,73,iiii+11);

  SetColor(5,color);
  Writeln('Jour  mois      Lune   Jour  mois      Lune   Jour  mois      Lune');

  SetColor(1,color);
  for iiii:=1 to 10 do
   begin
     if (JourMois[iiii]<>'') then
      begin
        if (pos('DQ',JourMois[iiii])>0) OR
           (pos('NL',JourMois[iiii])>0) OR
           (pos('PQ',JourMois[iiii])>0) OR
           (pos('PL',JourMois[iiii])>0) Then SetColor(4,color)
        else Setcolor(8,color);
        Write(JourMois[iiii]+'   ');
      end;
     if (JourMois[10+iiii]<>'') then
      begin
        if (pos('DQ',JourMois[10+iiii])>0) OR
           (pos('NL',JourMois[10+iiii])>0) OR
           (pos('PQ',JourMois[10+iiii])>0) OR
           (pos('PL',JourMois[10+iiii])>0) Then SetColor(4,color)
         else Setcolor(8,color);
        Write(JourMois[10+iiii],'   ');
      end;
      if (JourMois[20+iiii]<>'') then
       begin
         if (pos('DQ',JourMois[20+iiii])>0) OR
            (pos('NL',JourMois[20+iiii])>0) OR
            (pos('PQ',JourMois[20+iiii])>0) OR
            (pos('PL',JourMois[20+iiii])>0) Then SetColor(4,color)
         else Setcolor(8,color);
         xpos:=WhereX;
         Writeln(JourMois[20+iiii]);
       end
      else
       Writeln(copy(Blanc,1,length(JourMois[1])));
   end; {**end for...**}

   if (date_NBJRS>30) Then
    begin
        if (pos('DQ',JourMois[31])>0) OR
           (pos('NL',JourMois[31])>0) OR
           (pos('PQ',JourMois[31])>0) OR
           (pos('PL',JourMois[31])>0) Then SetColor(4,color)
        else Setcolor(8,color);
        Gotoxy(xpos,Wherey);
        Write(JourMois[31]);
    end;

    Window(1,1,80,25);
    ch:=Readkey;

end;{*ends Info_Lunaires;*}

Begin
   Info_Lunaires;
end.

Gestion de dates et l'Horoscope

{============== UNITE de DATES HOROSCOPE ================}
{ Unite Dates30.pas                                      }
{ programmation Turbo Pascal - Borland                   }
{ Copyright (S) 1997-2011                                }
{ programmeur du programme A.Ara                         }
{ 64150 Mourenx - France.                                }
{ Licence d'utilisation accord dans un but démonstratif  }
{ Unite date30.pas : getion de dates utilitaire          }
{========================================================}

Unit Date30;

Interface

Uses Dos,Crt;

Const jse : Array[0..6] Of  string[8] = ('dimanche','lundi','mardi',
                                         'mercredi','jeudi','vendredi','samedi');

      MMois : Array[1..12] Of  string[9] = ('janvier','fevrier','mars','avril',
                                            'mai','juin','juillet','aout',
                                            'septembre','octobre','novembre',
                                            'decembre');

Type Str3  =  string[3];
     Str4  =  string[4];
     Str5  =  string[5];
     STR10 =  string[10];


Var
    AneMax      : word;      {**limite la annee pour le texte de dates**}
    SDate       : Str10;     {**prend la date actuelle de forme  string  'jj/MM/AA'**}
    Annee       : Str4;      {**donne la annee actuel forme  string**}
    Xsiecle     : word;
    jour5,mois5,
    ane5,js5    : word;      {**Donne: jour mois annee jour de semaine**}
    Semj1,Semj2,
    Semj3       : byte;


Function  TextDate(DD:Str10):Str10;
Function  DoneAge(D:Str10):Str3;

Function  Oroscope(DD:Str10):Str10;
Function  HoroscopeChine(i:integer): string;
Function  HorsTibet(j,m,a:word;var simb: string): string;

Function  JourSemaine(JJ,mm,aa:integer):integer;
Function  GetJourSemaine(JJ,mm,aa:integer): string;
Function  Jour_Annee(JJ,MM,AA:integer):integer;
Procedure Donne_Jour_Annee(Jur,Mis,Ane:word;Var Numj:integer;Var Strjour: string);

Function  Date_num(S: string;var jj:integer;var mm:integer;var aa:integer):boolean;
Procedure Jours_Signe_Annee(var aa1:byte;var aa2:byte;var aa3:byte);
Function  Bissextile(AAn:integer):boolean;


Implementation


const  Nbissex : Array[1..12] of integer=(0,31,59,90,120,151,181,212,243,273,304,334);



Function Bissextile(AAn:integer):boolean;
begin
   if AAn Mod 4=0 Then Bissextile:=True
   else 
     Bissextile:=False;
end;{*ends*}


Function JourSemaine(JJ,mm,aa:integer):integer;
 var  valeur,nb,an : integer;
      Siecle       : integer;

begin
   if mm>2 then dec(mm,2)
   else 
     begin
        inc(mm,10);
        dec(aa);
     end;
   
   An:=(aa mod 100);
   Siecle:=Trunc(AA/100);
   NB:=Trunc((13*mm-1)/5) +Trunc(An/4)+TRunc(Siecle/4);
   valeur:=((Nb+An+jj-2*Siecle) Mod 7);
   if valeur<0 then valeur:=7-(valeur*-1);
   JourSemaine:=Valeur; 
end;{*ends*}




Function GetJourSemaine(JJ,mm,aa:integer): string;
 var  valeur,nb,an : integer;
      Siecle       : integer;
      JourSemaine  : string[8];

begin
   if mm>2 then dec(mm,2)
   else 
     begin
        inc(mm,10);
        dec(aa);
     end;

   An:=(aa mod 100);
   Siecle:=Trunc(AA/100);
   NB:=Trunc((13*mm-1)/5) +Trunc(An/4)+TRunc(Siecle/4);
   valeur:=((Nb+An+jj-2*Siecle) Mod 7);
   
   if valeur<0 then valeur:=7-(valeur*-1);
   JourSemaine:=jse[Valeur];
   GetJourSemaine:=JourSemaine
end;{*ends*}



Function Jour_Annee(JJ,MM,AA:integer):integer;
begin
   if Not Bissextile(aa) Then Jour_Annee:=Nbissex[MM]+JJ
   else
   if (Bissextile(aa)) And (MM>2) then jour_Annee:=Nbissex[MM]+JJ+1
   else Jour_Annee:=Nbissex[MM]+JJ;
end;{*ends*}



Procedure Donne_Jour_Annee(Jur,Mis,Ane:word; Var Numj:integer; Var Strjour:string);
Const Mej = 'ce jour n''existe pas.';

var NumJour     : integer;
    StrRetur    : string;
    Sjour,Sannee: string[4];

begin
   NumJour:=0;
   StrRetur:='';
  
   if ((jur>0) And (jur<=31)) And ((Mis>0) and (Mis<=12)) And ((Ane>0) And (Ane<=9000)) Then
    begin
       if (Mis=2) And (Not Bissextile(Ane)) And (Jur>28) Then StrRetur:=Mej
       else
       if (Mis=2) And (Bissextile(Ane)) And (Jur>29) Then StrRetur:=Mej
       else
       if (Mis Mod 2 = 0) And ((Mis>2) And (Mis<7)) And (jur>30) Then StrRetur:=Mej
       else
       if ((Mis=9) Or (Mis=11)) And (Jur>30) Then StrRetur:=Mej
       else
         begin
            Str(Jur:2,Sjour);
            Str(Ane:4,Sannee);
            StrRetur:=Jse[JourSemaine(Jur,Mis,Ane)]+' '+Sjour+' '+MMois[Mis];
            StrRetur:=StrRetur+' '+Sannee;
            NumJour:=Jour_Annee(Jur,Mis,Ane);{ jour de l'annee }
         end;
    end
   else StrRetur:='Error! dans la date.';

   Strjour:=StrRetur;
   Numj:=Numjour;

end;{*Donne_Jour_Annee*}



Function TextDate(DD:Str10):Str10;

Const nn:Array[1..40] of  string[2] =('01','02','03','04','05','06','07',
                                      '08','09','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');
 var s       : string[1];
    S1,S2,S3 : Str10;
    N1,N2,i  : byte;
    Correcte : boolean;
    J,M      : byte;
    A,Err    : integer;


   Function ControlDate(Jour,Mois:byte;Annee:integer):boolean;
    begin
       if (Mois=2) And (Not Bissextile(Annee)) And (Jour>28) Then ControlDate:=False
       else
       if (Mois=2) And (Bissextile(Annee)) And (Jour>29) Then ControlDate:=False
       else
       if (Mois Mod 2 = 0) And ((Mois>2) And (Mois<7)) And (jour>30) Then ControlDate:=False
       else
       if ((Mois=9) Or (Mois=11)) And (Jour>30) Then ControlDate:=False
       else 
         ControlDate:=True;
    end;{*ends*}

begin
   if DD<>'' Then
    begin
       N1:=0;N2:=0;s:='';S1:='';S2:='';S3:='';
       J:=32;M:=13;A:=2000;

       {**defini la position de barres**}

       for i:=1 To Length(DD) DO
        begin
           S:=Copy(dd,i,1);
           if (N1=0) And (s='/') Then N1:=i
           else
           if (N1>0) And (N2=0) And (S='/') Then N2:=i;
        end;

       {**dechifre la date**}

       if n1 in [2,3] Then
        begin
           S1:=Copy(DD,1,N1-1);

           if N2>0 Then
            begin
               S2:=Copy(Dd,N1+1,(N2-N1)-1);
               S3:=Copy(Dd,N2+1,(length(dD)-N2));
            end
           else 
              S2:=Copy(dD,N1+1,(length(dD)-N1));

           {**texte le jour**}

           Correcte:=False;
    
           i:=1;
           while (Not Correcte) and (i<41) Do
            begin
               if S1=nn[i] Then Correcte:=True;
               i:=i+1;
            end;
          
           if Correcte Then
            begin
               Val(S1,J,Err);
               if Length(S1)=1 then S1:='0'+S1;

               {**texte le mois**}

               Correcte:=False;

               i:=1;
               while (Not Correcte) and (i<22) DO
                begin
                   if S2=nn[i] Then Correcte:=True;
                   i:=i+1;
                end;
               if correcte Then
                begin
                   Val(S2,M,Err);
                   if Length(S2)=1 then S2:='0'+S2;

                   {**controle le mois de 1900 … AneMax**}

                   Correcte:=False;

                   {$R-}  
                     Val(S3,A,Err);
                   {$R-}

                   if (Err=0) And (A>=1900) And (A<=AneMax) Then Correcte:=True
                   else
                   if (Err=0) And ((A+Xsiecle)>=Xsiecle) And ((A+Xsiecle)<=AneMax) Then
                    begin
                       A:=A+Xsiecle;
                       Str(A,S3);
                       Correcte:=True;
                    end
                   else Correcte:=False;

                end 
               else Correcte:=False;

            end 
           else Correcte:=False;

        end else Correcte:=False;

       if (Correcte) and ControlDate(j,m,a) Then TextDate:=S1+'/'+S2+'/'+S3
       else TextDate:='Nul';

    end else TextDate:='';
end;{**ends textdate**}




Function NewDate:Str10;
 var j,m : string[2];
     a   : string[4];
begin
   GetDate(Ane5,mois5,jour5,Js5);
   Str(jour5,j);
   Str(mois5,m);
   Str(ane5,a);
   Annee:=a;
   if length(j)=1 Then j:='0'+j;
   if length(M)=1 Then m:='0'+m;
   NewDate:=j+'/'+m+'/'+a;
   Annee:=A;
end;{*ends newdate*}



{*********************************************}
{**Donne l'age par raport a la date naisance**}
{*********************************************}

Function DoneAge(D:Str10):Str3;
 var Ag       : byte;
     Aa,An    : Str4;
     Sag,ja,
     ma,jn,Mn : Str3;
     Err,Na,Nn: integer;

begin
   if D<>'0' Then
    begin
       Ja:=Copy(SDate,1,2);
       Ma:=Copy(SDate,4,2);
       Aa:=Copy(SDate,7,4);

       Jn:=Copy(D,1,2);
       Mn:=Copy(D,4,2);
       An:=Copy(D,7,4);

       Val(Aa,Na,Err);
       Val(An,Nn,Err);
       Ag:=Na-Nn;

       if Mn>Ma then Ag:=Ag-1;
       if (Mn=Ma) And (Jn>Ja) Then Ag:=Ag-1;

       Str(Ag,Sag);
       DoneAge:=Sag;
    end
   else DoneAge:='';

end;{*fin doneAge*}


{*================================================*}
{* Belier     (du 21 mars au 20 avril).           *}
{* Taureau    (du 21 avril au 21 mai).            *}
{* Gemeaux    (du 22 mai au 21 juin).             *}
{* Cancer     (du 22 juin au 22 juillet).         *}
{* Lion       (du 23 juillet au 23 aout).         *}
{* Vierge     (du 24 aout au 23 septembre).       *}
{* Balance    (du 24 septembre au 23 octobre).    *}
{* Scorpion   (du 24 octobre au 22 novembre).     *}
{* Sagittaire (du 23 novembre au 22 decembre).    *}
{* Capricorne (du 23 decembre au 20 janvier).     *}
{* Verseau    (du 21 janvier au 19 fevrier).      *}
{* Poissons   (du 20 fevrier au 20 mars).         *}
{*================================================*}

{**********************************************************}
{* donne le signe astrologique par rapor a date naissance *}
{**********************************************************}

Function Oroscope(DD:Str10):Str10;
 var jj,MM,n   : byte;
     Oro       : Str10;
     jn,Mn     : Str3;
     err       : integer;

begin
   Oro:='';
   n:=0;
 
   if (DD<>'0') and (DD<>'') Then
    begin
       jn:=Copy(dd,1,2);
       Mn:=Copy(dd,4,2);
       Val(Jn,jj,Err);
       Val(Mn,mm,Err);
       Case MM Of

           3: begin
                 if (jj>=21) Then n:=1;  {21/3 … 20/4  belier}
                 if (jj<=20) Then n:=12; {20/2 … 20/3  poissons }
              end;
           4: begin
                 if (jj>=21) Then n:=2;  {21/4 … 21/5  taureau}
                 if (jj<=20) Then n:=1;  {21/3 … 20/4  belier }
              end;
           5: begin
                 if (jj>=22) Then n:=3;  {22/5 … 21/6  gemeaux}
                 if (jj<=21) Then n:=2;  {21/4 … 21/5  taureau}
              end;
           6: begin
                 if (jj>=22) Then n:=4;  {22/6 … 22/7   cancer}
                 if (jj<=21) Then n:=3;  {22/5 … 21/6   gemaux}
              end;
           7: begin
                 if (jj>=23) Then n:=5; {23/7 … 23/8  lion}
                 if (jj<=22) Then n:=4; {22/6 … 22/7  cancer }
              end;
           8: begin
                 if (jj>=24) Then n:=6; {24/8 … 23/9  vierge}
                 if (jj<=23) Then n:=5; {23/7 … 23/8  lion}
              end;
           9: begin
                 if (jj>=24) Then n:=7;  {24/9 … 23/10 balance}
                 if (jj<=23) Then n:=6;  {24/8 … 23/9  vierge}
              end;
          10: begin
                 if (jj>=24) Then n:=8;  {24/10 … 22/11 scorpion}
                 if (jj<=23) Then n:=7;  {24/9 … 23/10  balance}
              end;
          11: begin
                 if (jj>=23) Then n:=9; {23/11 … 22/12 sagittaire}
                 if (jj<=22) Then n:=8; {24/10 … 22/11 scorpion}
              end;
          12: begin
                 if (jj>=23) Then n:=10; {23/12 … 20/01 capricorne}
                 if (jj<=22) Then n:=9;  {23/11 … 22/12 sagittaire}
              end;
           1: begin
                 if (jj>=21) Then n:=11;  {21/01 … 19/02 belier}
                 if (jj<=20) Then n:=10;  {23/12 … 20/01 capricorne}
              end;
           2: begin
                 if (jj>=20) Then n:=12;  {20/02 … 20/03 poissons}
                 if (jj<=19) Then n:=11;  {21/01 … 19/02 verseau}
              end;

       end;

       Case n Of
         1: Oro:='BELIER';
         2: Oro:='TAUREAU';
         3: Oro:='GEMEAUX';
         4: Oro:='CANCER';
         5: Oro:='LION';
         6: Oro:='VIERGE';
         7: Oro:='BALANCE';
         8: Oro:='SCORPION';
         9: Oro:='SAGITTAIRE';
        10: Oro:='CAPRICORNE';
        11: Oro:='VERSEAU';
        12: Oro:='POISSONS';
       end;{*ends*}

      if Oro<>'' then Oroscope:=Oro
      else Oroscope:='';
    end
     else Oroscope:='';
end;{*ends Oroscope*}




Function HoroscopeChine(i:integer): string;

 var A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12 : boolean;
     Anne,HoroCh : string[8];     
     u           : integer;

begin
   u:=0;
   if (i=1912) or (i=1924) or (i=1936) or (i=1948) or
      (i=1960) or (i=1972) or (i=1984) or (i=1996) or
      (i=2008) or (i=2020) or (i=2032) or (i=2044)   Then u:=1;
   if (i=1913) or (i=1925) or (i=1937) or (i=1949) or
      (i=1961) or (i=1973) or (i=1985) or (i=1997) or
      (i=2009) or (i=2021) or (i=2033) or (i=2045)   Then u:=2;
   if (i=1914) or (i=1926) or (i=1938) or (i=1950) or
      (i=1962) or (i=1974) or (i=1986) or (i=1998) or
      (i=2010) or (i=2022) or (i=2034) or (i=2046)   Then u:=3;
   if (i=1915) or (i=1927) or (i=1939) or (i=1951) or
      (i=1963) or (i=1975) or (i=1987) or (i=1999) or
      (i=2011) or (i=2023) or (i=2035) or (i=2047)   Then u:=4;
   if (i=1916) or (i=1928) or (i=1940) or (i=1952) or
      (i=1964) or (i=1976) or (i=1988) or (i=2000) or
      (i=2012) or (i=2024) or (i=2036) or (i=2048)   Then u:=5;
   if (i=1917) or (i=1929) or (i=1941) or (i=1953) or
      (i=1965) or (i=1977) or (i=1989) or (i=2001) or
      (i=2013) or (i=2025) or (i=2037) or (i=2049)   Then u:=6;
   if (i=1918) or (i=1930) or (i=1942) or (i=1954) or
      (i=1966) or (i=1978) or (i=1990) or (i=2002) or
      (i=2014) or (i=2026) or (i=2038) or (i=2050)   Then u:=7;
   if (i=1919) or (i=1931) or (i=1943) or (i=1955) or
      (i=1967) or (i=1979) or (i=1991) or (i=2003) or
      (i=2015) or (i=2027) or (i=2039) or (i=2051)   Then u:=8;
   if (i=1920) or (i=1932) or (i=1944) or (i=1956) or
      (i=1968) or (i=1980) or (i=1992) or (i=2004) or
      (i=2016) or (i=2028) or (i=2040) or (i=2052)   Then u:=9;
   if (i=1921) or (i=1933) or (i=1945) or (i=1957) or
      (i=1969) or (i=1981) or (i=1993) or (i=2005) or
      (i=2017) or (i=2029) or (i=2041) or (i=2053)   Then u:=10;
   if (i=1922) or (i=1934) or (i=1946) or (i=1958) or
      (i=1970) or (i=1982) or (i=1994) or (i=2006) or
      (i=2018) or (i=2030) or (i=2042) or (i=2054)   Then u:=11;
   if (i=1923) or (i=1935) or (i=1947) or (i=1959) or
      (i=1971) or (i=1983) or (i=1995) or (i=2007) or
      (i=2019) or (i=2031) or (i=2043) or (i=2055)   Then u:=12;

   HoroCh:='';
   case u of
    1: HoroCh:='RAT';
    2: HoroCh:='BUFFLE';
    3: HoroCh:='TIGRE';
    4: HoroCh:='LIEVRE';
    5: HoroCh:='DRAGON';
    6: HoroCh:='SERPENT';
    7: HoroCh:='CHEVAL';
    8: HoroCh:='CHEVRE';
    9: HoroCh:='SINGE';
   10: HoroCh:='COQ';
   11: HoroCh:='CHIEN';
   12: HoroCh:='COCHON';
   end;{*ends case*}

   Str(i,Anne);
   if Anne[length(Anne)] in ['8','9'] Then Anne:='TERRE'
   else
   if Anne[length(Anne)] in ['0','1'] Then Anne:='METAL'
   else
   if Anne[length(Anne)] in ['2','3'] Then Anne:='EAU'
   else
   if Anne[length(Anne)] in ['4','5'] Then Anne:='BOIS'
   else
   if Anne[length(Anne)] in ['6','7'] Then Anne:='FEU';

   {*==================================================*}
   {* Les annees TERRE  annees se terminant par 8 ou 9 *}
   {* Les annees METAL  annees se terminant par 0 ou 1 *}
   {* Les annees EAU    annees se terminant par 2 ou 3 *}
   {* Les annees BOIS   annees se terminant par 4 ou 5 *}
   {* Les annees FEU    annees se terminant par 6 ou 7 *}
   {*==================================================*}

  if (HoroCh<>'') then HoroscopeChine:=HoroCh+' '+Anne
  else
   HoroscopeChine:='';

end;{*ends HoroscopeChine*}



{*******************************************}
{***  Astrologie et Bouddhisme Tib‚tain  ***}
{*******************************************}

Function HorsTibet(j,m,a:word;var simb: string): string;
 var Simbol : Str5;
     HoroCh : string[12];

begin
   HoroCh:='';
   if (a=1924) and ((M>2) OR ((M=2) and (J>=5))) then HoroCh:='RAT' else
   if (a=1925) and ((M=1) or ((M=2) and (J in[1..22]))) then HoroCh:='RAT' else
   if (a=1925) and (M>=2) {and (J>=23)} then HoroCh:='BUFFLE' else
   if (a=1926) and ((M=1) or ((M=2) and (J in[1..12]))) then HoroCh:='BUFFLE' else
   if (a=1926) and (M>=2) {and (J>=13)} then HoroCh:='TIGRE' else
   if (a=1927) and ((M<3) or ((M=3) and (J in[1..3])))  then HoroCh:='TIGRE' else
   if (a=1927) and (M>=3) {and (J>=4)}  then HoroCh:='LIEVRE' else
   if (a=1928) and ((M=1) or ((M=2) and (J in[1..21]))) then HoroCh:='LIEVRE' else
   if (a=1928) and (M>=2) {and (J>=22)} then HoroCh:='DRAGON' else
   if (a=1929) and ((M=1) or ((M=2) and (J in[1..9])))  then HoroCh:='DRAGON' else
   if (a=1929) and (M>=2) {and (J>=10)} then HoroCh:='SERPENT' else
   if (a=1930) and ((M=1) or ((M=2) and (J in[1..28]))) then HoroCh:='SERPENT' else
   if (a=1930) and (M>=3) {and (J>=1)}  then HoroCh:='CHEVAL' else
   if (a=1931) and ((M=1) or ((M=2) and (J in[1..17]))) then HoroCh:='CHEVAL' else
   if (a=1931) and (M>=2) {and (J>=18)} then HoroCh:='CHEVRE' else
   if (a=1932) and ((M=1) or ((M=2) and (J in[1..6]))) then HoroCh:='CHEVRE' else
   if (a=1932) and (M>=2) {and (J>=7)}  then HoroCh:='SINGE' else
   if (a=1933) and ((M=1) or ((M=2) and (J in[1..24]))) then HoroCh:='SINGE' else
   if (a=1933) and (M>=2) {and (J>=25)} then HoroCh:='COQ' else
   if (a=1934) and ((M=1) or ((M=2) and (J in[1..13]))) then HoroCh:='COQ' else
   if (a=1934) and (M>=2) {and (J>=14)} then HoroCh:='CHIEN' else
   if (a=1935) and ((M<3) or ((M=3) and (J in[1..4]))) then HoroCh:='CHIEN' else
   if (a=1935) and (M>=3) {and (J>=5)} then HoroCh:='COCHON' else
   if (a=1936) and ((M=1) or ((M=2) and (J in[1..22]))) then HoroCh:='COCHON' else
   if (a=1936) and (M>=2) {and (J>=23)} then HoroCh:='RAT' else
   if (a=1937) and ((M=1) or ((M=2) and (J in[1..11]))) then HoroCh:='RAT' else
   if (a=1937) and (M>=2) {and (J>=12)} then HoroCh:='BUFFLE' else
   if (a=1938) and ((M<3) or ((M=3) and (J in[1..2]))) then HoroCh:='BUFFLE' else
   if (a=1938) and (M>=3) {and (J>=3)} then HoroCh:='TIGRE' else
   if (a=1939) and ((M=1) or ((M=2) and (J in[1..19]))) then HoroCh:='TIGRE' else
   if (a=1939) and (M>=2) {and (J>=20)} then HoroCh:='LIEVRE' else
   if (a=1940) and ((M=1) or ((M=2) and (J in[1..8]))) then HoroCh:='LIEVRE' else
   if (a=1940) and (M>=2) {and (J>=9)}  then HoroCh:='DRAGON' else
   if (a=1941) and ((M=1) or ((M=2) and (J in[1..26]))) then HoroCh:='DRAGON' else
   if (a=1941) and (M>=2) {and (J>=27)} then HoroCh:='SERPENT' else
   if (a=1942) and ((M=1) or ((M=2) and (J in[1..15]))) then HoroCh:='SERPENT' else
   if (a=1942) and (M>=2) {and (J>=16)} then HoroCh:='CHEVAL' else
   if (a=1943) and ((M=1) or ((M=2) and (J in[1..4]))) then HoroCh:='CHEVAL' else
   if (a=1943) and (M>=2) {and (J>=5)} then HoroCh:='CHEVRE' else
   if (a=1944) and ((M=1) or ((M=2) and (J in[1..23]))) then HoroCh:='CHEVRE' else
   if (a=1944) and (M>=2) {and (J>=24)} then HoroCh:='SINGE' else
   if (a=1945) and ((M=1) or ((M=2) and (J in[1..12]))) then HoroCh:='SINGE' else
   if (a=1945) and (M>=2) {and (J>=13)} then HoroCh:='COQ' else
   if (a=1946) and ((M<3) or ((M=3) and (J in[1..3]))) then HoroCh:='COQ' else
   if (a=1946) and (M>=3) {and (J>=4)} then HoroCh:='CHIEN' else
   if (a=1947) and ((M=1) or ((M=2) and (J in[1..20]))) then HoroCh:='CHIEN' else
   if (a=1947) and (M>=2) {and (J>=21)} then HoroCh:='COCHON' else
   if (a=1948) and ((M=1) or ((M=2) and (J in[1..9]))) then HoroCh:='COCHON' else
   if (a=1948) and (M>=2) {and (J>=10)} then HoroCh:='RAT' else
   if (a=1949) and ((M=1) or ((M=2) and (J in[1..27]))) then HoroCh:='RAT' else
   if (a=1949) and (M>=2) {and (J>=28)} then HoroCh:='BUFFLE' else
   if (a=1950) and ((M=1) or ((M=2) and (J in[1..16]))) then HoroCh:='BUFFLE' else
   if (a=1950) and (M>=2) {and (J>=17)} then HoroCh:='TIGRE' else
   if (a=1951) and ((M=1) or ((M=2) and (J in[1..6]))) then HoroCh:='TIGRE' else
   if (a=1951) and (M>=2) {and (J>=7)} then HoroCh:='LIEVRE' else
   if (a=1952) and ((M=1) or ((M=2) and (J in[1..25]))) then HoroCh:='LIEVRE' else
   if (a=1952) and (M>=2) {and (J>=26)} then HoroCh:='DRAGON' else
   if (a=1953) and ((M=1) or ((M=2) and (J in[1..13]))) then HoroCh:='DRAGON' else
   if (a=1953) and (M>=2) {and (J>=14)} then HoroCh:='SERPENT' else
   if (a=1954) and ((M<3) or ((M=3) and (J in[1..14]))) then HoroCh:='SERPENT' else
   if (a=1954) and (M>=3) {{and (J>=15)}  then HoroCh:='CHEVAL' else
   if (a=1955) and ((M=1) or ((M=2) and (J in[1..22]))) then HoroCh:='CHEVAL' else
   if (a=1955) and (M>=2) {and (J>=23)} then HoroCh:='CHEVRE' else
   if (a=1956) and ((M=1) or ((M=2) and (J in[1..11]))) then HoroCh:='CHEVRE' else
   if (a=1956) and (M>=2) {and (J>=12)} then HoroCh:='SINGE' else
   if (a=1957) and ((M<3) or ((M=3) and (J in[1..1]))) then HoroCh:='SINGE' else
   if (a=1957) and (M>=3) {and (J>=2)} then HoroCh:='COQ' else
   if (a=1958) and ((M=1) or ((M=2) and (J in[1..18]))) then HoroCh:='COQ' else
   if (a=1958) and (M>=2) {and (J>=19)} then HoroCh:='CHIEN' else
   if (a=1959) and ((M=1) or ((M=2) and (J in[1..7]))) then HoroCh:='CHIEN' else
   if (a=1959) and (M>=2) {and (J>=8)} then HoroCh:='COCHON' else
   if (a=1960) and ((M=1) or ((M=2) and (J in[1..26]))) then HoroCh:='COCHON' else
   if (a=1960) and (M>=2) {and (J>=27)} then HoroCh:='RAT' else
   if (a=1961) and ((M=1) or ((M=2) and (J in[1..15]))) then HoroCh:='RAT' else
   if (a=1961) and (M>=2) {and (J>=16)} then HoroCh:='BUFFLE' else
   if (a=1962) and ((M=1) or ((M=2) and (J in[1..4]))) then HoroCh:='BUFFLE' else
   if (a=1962) and (M>=2) {and (J>=5)} then HoroCh:='TIGRE' else
   if (a=1963) and ((M=1) or ((M=2) and (J in[1..23]))) then HoroCh:='TIGRE' else
   if (a=1963) and (M>=2) {and (J>=24)} then HoroCh:='LIEVRE' else
   if (a=1964) and ((M=1) or ((M=2) and (J in[1..13]))) then HoroCh:='LIEVRE' else
   if (a=1964) and (M>=2) {and (J>=14)} then HoroCh:='DRAGON' else
   if (a=1965) and ((M<3) or ((M=3) and (J in[1..3]))) then HoroCh:='DRAGON' else
   if (a=1965) and (M>=3) {and (J>=4)} then HoroCh:='SERPENT' else
   if (a=1966) and ((M=1) or ((M=2) and (J in[1..20]))) then HoroCh:='SERPENT' else
   if (a=1966) and (M>=2) {and (J>=21)} then HoroCh:='CHEVAL' else
   if (a=1967) and ((M=1) or ((M=2) and (J in[1..9]))) then HoroCh:='CHEVAL' else
   if (a=1967) and (M>=2) {and (J>=10)} then HoroCh:='CHEVRE' else
   if (a=1968) and ((M=1) or ((M=2) and (J in[1..28]))) then HoroCh:='CHEVRE' else
   if (a=1968) and (M>=2) {and (J>=29)} then HoroCh:='SINGE' else
   if (a=1969) and ((M=1) or ((M=2) and (J in[1..16]))) then HoroCh:='SINGE' else
   if (a=1969) and (M>=2) {and (J>=17)} then HoroCh:='COQ' else
   if (a=1970) and ((M=1) or ((M=2) and (J in[1..6]))) then HoroCh:='COQ' else
   if (a=1970) and (M>=2) {and (J>=7)} then HoroCh:='CHIEN' else
   if (a=1971) and ((M=1) or ((M=2) and (J in[1..24]))) then HoroCh:='CHIEN' else
   if (a=1971) and (M>=2) {and (J>=25)} then HoroCh:='COCHON' else
   if (a=1972) and ((M=1) or ((M=2) and (J in[1..14]))) then HoroCh:='COCHON' else
   if (a=1972) and (M>=2) {and (J>=15)} then HoroCh:='RAT' else
   if (a=1973) and ((M<3) or ((M=3) and (J in[1..4]))) then HoroCh:='RAT' else
   if (a=1973) and (M>=3) {and (J>=5)} then HoroCh:='BUFFLE' else
   if (a=1974) and ((M=1) or ((M=2) and (J in[1..22]))) then HoroCh:='BUFFLE' else
   if (a=1974) and (M>=2) {and (J>=23)} then HoroCh:='TIGRE' else
   if (a=1975) and ((M=1) or ((M=2) and (J in[1..11]))) then HoroCh:='TIGRE' else
   if (a=1975) and (M>=2) {and (J>=12)} then HoroCh:='LIEVRE' else
   if (a=1976) and ((M=1) or ((M=2) and (J in[1..29]))) then HoroCh:='LIEVRE' else
   if (a=1976) and (M>=3) {and (J>=1)} then HoroCh:='DRAGON' else
   if (a=1977) and ((M=1) or ((M=2) and (J in[1..18]))) then HoroCh:='DRAGON' else
   if (a=1977) and (M>=2) {and (J>=19)} then HoroCh:='SERPENT' else
   if (a=1978) and ((M=1) or ((M=2) and (J in[1..7]))) then HoroCh:='SERPENT' else
   if (a=1978) and (M>=2) {and (J>=8)} then HoroCh:='CHEVAL' else
   if (a=1979) and ((M=1) or ((M=2) and (J in[1..26]))) then HoroCh:='CHEVAL' else
   if (a=1979) and (M>=2) {and (J>=27)} then HoroCh:='CHEVRE' else
   if (a=1980) and ((M=1) or ((M=2) and (J in[1..16]))) then HoroCh:='CHEVRE' else
   if (a=1980) and (M>=2) {and (J>=17)} then HoroCh:='SINGE' else
   if (a=1981) and ((M=1) or ((M=2) and (J in[1..4]))) then HoroCh:='SINGE' else
   if (a=1981) and (M>=2) {and (J>=5)} then HoroCh:='COQ' else
   if (a=1982) and ((M=1) or ((M=2) and (J in[1..23]))) then HoroCh:='COQ' else
   if (a=1982) and (M>=2) {and (J>=24)} then HoroCh:='CHIEN' else
   if (a=1983) and ((M=1) or ((M=2) and (J in[1..12]))) then HoroCh:='CHIEN' else
   if (a=1983) and (M>=2) {and (J>=13)} then HoroCh:='COCHON' else
   if (a=1984) and ((M<3) or ((M=3) and (J in[1..2]))) then HoroCh:='COCHON' else
   if (a=1984) and (M>=3) {and (J>=3)} then HoroCh:='RAT' else
   if (a=1985) and ((M=1) or ((M=2) and (J in[1..19]))) then HoroCh:='RAT' else
   if (a=1985) and (M>=2) {and (J>=20)} then HoroCh:='BUFFLE' else
   if (a=1986) and ((M=1) or ((M=2) and (J in[1..8]))) then HoroCh:='BUFFLE' else
   if (a=1986) and (M>=2) {and (J>=9)} then HoroCh:='TIGRE' else
   if (a=1987) and ((M=1) or ((M=2) and (J in[1..27]))) then HoroCh:='TIGRE' else
   if (a=1987) and (M>=2) {and (J>=28)} then HoroCh:='LIEVRE' else
   if (a=1988) and ((M=1) or ((M=2) and (J in[1..17]))) then HoroCh:='LIEVRE' else
   if (a=1988) and (M>=2) {and (J>=18)} then HoroCh:='DRAGON' else
   if (a=1989) and ((M=1) or ((M=2) and (J in[1..6]))) then HoroCh:='DRAGON' else
   if (a=1989) and (M>=2) {and (J>=7)} then HoroCh:='SERPENT' else
   if (a=1990) and ((M=1) or ((M=2) and (J in[1..25]))) then HoroCh:='SERPENT' else
   if (a=1990) and (M>=2) {and (J>=26)} then HoroCh:='CHEVAL' else
   if (a=1991) and ((M=1) or ((M=2) and (J in[1..14]))) then HoroCh:='CHEVAL' else
   if (a=1991) and (M>=2) {and (J>=15)} then HoroCh:='CHEVRE' else
   if (a=1992) and ((M<3) or ((M=3) and (J in[1..4]))) then HoroCh:='CHEVRE' else
   if (a=1992) and (M>=3) {and (J>=5)} then HoroCh:='SINGE' else
   if (a=1993) and ((M=1) or ((M=2) and (J in[1..21]))) then HoroCh:='SINGE' else
   if (a=1993) and (M>=2) {and (J>=22)} then HoroCh:='COQ' else
   if (a=1994) and ((M=1) or ((M=2) and (J in[1..10]))) then HoroCh:='COQ' else
   if (a=1994) and (M>=2) {and (J>=11)} then HoroCh:='CHIEN' else
   if (a=1995) and ((M<3) or ((M=3) and (J in[1..1]))) then HoroCh:='CHIEN' else
   if (a=1995) and (M>=3) {and (J>=2)} then HoroCh:='COCHON' else
   if (a=1996) and ((M=1) or ((M=2) and (J in[1..18]))) then HoroCh:='COCHON' else
   if (a=1996) and (M>=2) {and (J>=19)} then HoroCh:='RAT' else
   if (a=1997) and ((M=1) or ((M=2) and (J in[1..7]))) then HoroCh:='RAT' else
   if (a=1997) and (M>=2) {and (J>=8)} then HoroCh:='BUFFLE' else
   if (a=1998) and ((M=1) or ((M=2) and (J in[1..26]))) then HoroCh:='BUFFLE' else
   if (a=1998) and (M>=2) {and (J>=27)} then HoroCh:='TIGRE' else
   if (a=1999) and ((M=1) or ((M=2) and (J in[1..16]))) then HoroCh:='TIGRE' else
   if (a=1999) and (M>=2) {and (J>=17)} then HoroCh:='LIEVRE' else
   if (a=2000) and ((M=1) or ((M=2) and (J in[1..5]))) then HoroCh:='LIEVRE' else
   if (a=2000) and (M>=2) {and (J>=6)} then HoroCh:='DRAGON' else
   if (a=2001) and ((M=1) or ((M=2) and (J in[1..23]))) then HoroCh:='DRAGON' else
   if (a=2001) and (M>=2) {and (J>=24)} then HoroCh:='SERPENT' else
   if (a=2002) and ((M=1) or ((M=2) and (J in[1..12]))) then HoroCh:='SERPENT' else
   if (a=2002) and (M>=2) {and (J>=13)} then HoroCh:='CHEVAL' else
   if (a=2003) and ((M<3) or ((M=3) and (J in[1..2]))) then HoroCh:='CHEVAL' else
   if (a=2003) and (M>=3) {and (J>=3)} then HoroCh:='CHEVRE' else
   if (a=2004) and ((M=1) or ((M=2) and (J in[1..20]))) then HoroCh:='CHEVRE' else
   if (a=2004) and (M>=2) {and (J>=21)} then HoroCh:='SINGE' else
   if (a=2005) and ((M=1) or ((M=2) and (J in[1..8]))) then HoroCh:='SINGE' else
   if (a=2005) and (M>=2) {and (J>=9)} then HoroCh:='COQ' else
   
   (**if (a=2006) and ((M=1) or ((M=2) and (J in[1..27]))) then HoroCh:='COQ' else***)
   
   if (a=2006) and ( (M=1) and (J in[1..27]) ) then HoroCh:='COQ' else
   if (a=2006) and ((M>=2) or (M=1)){and (J>=28)} then HoroCh:='CHIEN' else
   if (a=2007) and ((M=1) or ((M=2) and (J in[1..17]))) then HoroCh:='CHIEN' else
   if (a=2007) and (M>=2) {and (J>=18)} then HoroCh:='COCHON' else
   if (a=2008) and ((M=1) or ((M=2) and (J in[1..6]))) then HoroCh:='COCHON' else
   if (a=2008) and (M>=2) {and (J>=7)} then HoroCh:='RAT' else
   if (a=2009) and ((M=1) or ((M=2) and (J in[1..24]))) then HoroCh:='RAT' else
   if (a=2009) and (M>=2) {and (J>=25)} then HoroCh:='BUFFLE' else
   if (a=2010) and ((M=1) or ((M=2) and (J in[1..13]))) then HoroCh:='BUFFLE' else
   if (a=2010) and (M>=2) {and (J>=14)} then HoroCh:='TIGRE' else
   if (a=2011) and ((M<3) or ((M=3) and (J in[1..4]))) then HoroCh:='TIGRE' else
   if (a=2011) and (M>=03) {and (J>=05)} then HoroCh:='LIEVRE';

   {** (a=2012) and ((M=1) or ((M=2) and (J in[1..--]))) then HoroCh:='LIEVRE';**}

   Simbol:='';
   if (a=1924) and (M=2) and (J>=5) then Simbol:='BOIS' else
   if (a=1924) and (M>2) {and (J>=5)} then Simbol:='BOIS' else
   if (a=1925) and ((M=1) or ((M=2) and (J in[1..22]))) then Simbol:='BOIS' else
   if (a=1925) and (M>=2) {and (J>=23)} then Simbol:='BOIS' else
   if (a=1926) and ((M=1) or ((M=2) and (J in[1..12]))) then Simbol:='BOIS' else
   if (a=1926) and (M>=2) {and (J>=13)} then Simbol:='FEU' else
   if (a=1927) and ((M<3) or ((M=3) and (J in[1..3])))  then Simbol:='FEU' else
   if (a=1927) and (M>=3) {and (J>=4)}  then Simbol:='FEU' else
   if (a=1928) and ((M=1) or ((M=2) and (J in[1..21]))) then Simbol:='FEU' else
   if (a=1928) and (M>=2) {and (J>=22)} then Simbol:='TERRE' else
   if (a=1929) and ((M=1) or ((M=2) and (J in[1..9])))  then Simbol:='TERRE' else
   if (a=1929) and (M>=2) {and (J>=10)} then Simbol:='TERRE' else
   if (a=1930) and ((M=1) or ((M=2) and (J in[1..28]))) then Simbol:='TERRE' else
   if (a=1930) and (M>=3) {and (J>=1)}  then Simbol:='METAL' else
   if (a=1931) and ((M=1) or ((M=2) and (J in[1..17]))) then Simbol:='METAL' else
   if (a=1931) and (M>=2) {and (J>=18)} then Simbol:='METAL' else
   if (a=1932) and ((M=1) or ((M=2) and (J in[1..6]))) then Simbol:='METAL' else
   if (a=1932) and (M>=2) {and (J>=7)}  then Simbol:='EAU' else
   if (a=1933) and ((M=1) or ((M=2) and (J in[1..24]))) then Simbol:='EAU' else
   if (a=1933) and (M>=2) {and (J>=25)} then Simbol:='EAU' else
   if (a=1934) and ((M=1) or ((M=2) and (J in[1..13]))) then Simbol:='EAU' else
   if (a=1934) and (M>=2) {and (J>=14)} then Simbol:='BOIS' else
   if (a=1935) and ((M<3) or ((M=3) and (J in[1..4]))) then Simbol:='BOIS' else
   if (a=1935) and (M>=3) {and (J>=5)} then Simbol:='BOIS' else
   if (a=1936) and ((M=1) or ((M=2) and (J in[1..22]))) then Simbol:='BOIS' else
   if (a=1936) and (M>=2) {and (J>=23)} then Simbol:='FEU' else
   if (a=1937) and ((M=1) or ((M=2) and (J in[1..11]))) then Simbol:='FEU' else
   if (a=1937) and (M>=2) {and (J>=12)} then Simbol:='FEU' else
   if (a=1938) and ((M<3) or ((M=3) and (J in[1..2]))) then Simbol:='FEU' else
   if (a=1938) and (M>=3) {and (J>=3)} then Simbol:='TERRE' else
   if (a=1939) and ((M=1) or ((M=2) and (J in[1..19]))) then Simbol:='TERRE' else
   if (a=1939) and (M>=2) {and (J>=20)} then Simbol:='TERRE' else
   if (a=1940) and ((M=1) or ((M=2) and (J in[1..8]))) then Simbol:='TERRE' else
   if (a=1940) and (M>=2) {and (J>=9)}  then Simbol:='METAL' else
   if (a=1941) and ((M=1) or ((M=2) and (J in[1..26]))) then Simbol:='METAL' else
   if (a=1941) and (M>=2) {and (J>=27)} then Simbol:='METAL' else
   if (a=1942) and ((M=1) or ((M=2) and (J in[1..15]))) then Simbol:='METAL' else
   if (a=1942) and (M>=2) {and (J>=16)} then Simbol:='EAU' else
   if (a=1943) and ((M=1) or ((M=2) and (J in[1..4]))) then Simbol:='EAU' else
   if (a=1943) and (M>=2) {and (J>=5)} then Simbol:='EAU' else
   if (a=1944) and ((M=1) or ((M=2) and (J in[1..23]))) then Simbol:='EAU' else
   if (a=1944) and (M>=2) {and (J>=24)} then Simbol:='BOIS' else
   if (a=1945) and ((M=1) or ((M=2) and (J in[1..12]))) then Simbol:='BOIS' else
   if (a=1945) and (M>=2) {and (J>=13)} then Simbol:='BOIS' else
   if (a=1946) and ((M<3) or ((M=3) and (J in[1..3]))) then Simbol:='BOIS' else
   if (a=1946) and (M>=3) {and (J>=4)} then Simbol:='FEU' else
   if (a=1947) and ((M=1) or ((M=2) and (J in[1..20]))) then Simbol:='FEU' else
   if (a=1947) and (M>=2) {and (J>=21)} then Simbol:='FEU' else
   if (a=1948) and ((M=1) or ((M=2) and (J in[1..9]))) then Simbol:='FEU' else
   if (a=1948) and (M>=2) {and (J>=10)} then Simbol:='TERRE' else
   if (a=1949) and ((M=1) or ((M=2) and (J in[1..27]))) then Simbol:='TERRE' else
   if (a=1949) and (M>=2) {and (J>=28)} then Simbol:='TERRE' else
   if (a=1950) and ((M=1) or ((M=2) and (J in[1..16]))) then Simbol:='TERRE' else
   if (a=1950) and (M>=2) {and (J>=17)} then Simbol:='METAL' else
   if (a=1951) and ((M=1) or ((M=2) and (J in[1..6]))) then Simbol:='METAL' else
   if (a=1951) and (M>=2) {and (J>=7)} then Simbol:='METAL' else
   if (a=1952) and ((M=1) or ((M=2) and (J in[1..25]))) then Simbol:='METAL' else
   if (a=1952) and (M>=2) {and (J>=26)} then Simbol:='EAU' else
   if (a=1953) and ((M=1) or ((M=2) and (J in[1..13]))) then Simbol:='EAU' else
   if (a=1953) and (M>=2) {and (J>=14)} then Simbol:='EAU' else
   if (a=1954) and ((M<3) or ((M=3) and (J in[1..14]))) then Simbol:='EAU' else
   if (a=1954) and (M>=3) {and (J>=15)} then Simbol:='BOIS' else
   if (a=1955) and ((M=1) or ((M=2) and (J in[1..22]))) then Simbol:='BOIS' else
   if (a=1955) and (M>=2) {and (J>=23)} then Simbol:='BOIS' else
   if (a=1956) and ((M=1) or ((M=2) and (J in[1..11]))) then Simbol:='BOIS' else
   if (a=1956) and (M>=2) {and (J>=12)} then Simbol:='FEU' else
   if (a=1957) and ((M<3) or ((M=3) and (J in[1..1]))) then Simbol:='FEU' else
   if (a=1957) and (M>=3) {and (J>=2)} then Simbol:='FEU' else
   if (a=1958) and ((M=1) or ((M=2) and (J in[1..18]))) then Simbol:='FEU' else
   if (a=1958) and (M>=2) {and (J>=19)} then Simbol:='TERRE' else
   if (a=1959) and ((M=1) or ((M=2) and (J in[1..7]))) then Simbol:='TERRE' else
   if (a=1959) and (M>=2) {and (J>=8)} then Simbol:='TERRE' else
   if (a=1960) and ((M=1) or ((M=2) and (J in[1..26]))) then Simbol:='TERRE' else
   if (a=1960) and (M>=2) {and (J>=27)} then Simbol:='METAL' else
   if (a=1961) and ((M=1) or ((M=2) and (J in[1..15]))) then Simbol:='METAL' else
   if (a=1961) and (M>=2) {and (J>=16)} then Simbol:='METAL' else
   if (a=1962) and ((M=1) or ((M=2) and (J in[1..4]))) then Simbol:='METAL' else
   if (a=1962) and (M>=2) {and (J>=5)} then Simbol:='EAU' else
   if (a=1963) and ((M=1) or ((M=2) and (J in[1..23]))) then Simbol:='EAU' else
   if (a=1963) and (M>=2) {and (J>=24)} then Simbol:='EAU' else
   if (a=1964) and ((M=1) or ((M=2) and (J in[1..13]))) then Simbol:='EAU' else
   if (a=1964) and (M>=2) {and (J>=14)} then Simbol:='BOIS' else
   if (a=1965) and ((M<3) or ((M=3) and (J in[1..3]))) then Simbol:='BOIS' else
   if (a=1965) and (M>=3) {and (J>=4)} then Simbol:='BOIS' else
   if (a=1966) and ((M=1) or ((M=2) and (J in[1..20]))) then Simbol:='BOIS' else
   if (a=1966) and (M>=2) {and (J>=21)} then Simbol:='FEU' else
   if (a=1967) and ((M=1) or ((M=2) and (J in[1..9]))) then Simbol:='FEU' else
   if (a=1967) and (M>=2) {and (J>=10)} then Simbol:='FEU' else
   if (a=1968) and ((M=1) or ((M=2) and (J in[1..28]))) then Simbol:='FEU' else
   if (a=1968) and (M>=2) {and (J>=29)} then Simbol:='TERRE' else
   if (a=1969) and ((M=1) or ((M=2) and (J in[1..16]))) then Simbol:='TERRE' else
   if (a=1969) and (M>=2) {and (J>=17)} then Simbol:='TERRE' else
   if (a=1970) and ((M=1) or ((M=2) and (J in[1..6]))) then Simbol:='TERRE' else
   if (a=1970) and (M>=2) {and (J>=7)} then Simbol:='METAL' else
   if (a=1971) and ((M=1) or ((M=2) and (J in[1..24]))) then Simbol:='METAL' else
   if (a=1971) and (M>=2) {and (J>=25)} then Simbol:='METAL' else
   if (a=1972) and ((M=1) or ((M=2) and (J in[1..14]))) then Simbol:='METAL' else
   if (a=1972) and (M>=2) {and (J>=15)} then Simbol:='EAU' else
   if (a=1973) and ((M<3) or ((M=3) and (J in[1..4]))) then Simbol:='EAU' else
   if (a=1973) and (M>=3) {and (J>=5)} then Simbol:='EAU' else
   if (a=1974) and ((M=1) or ((M=2) and (J in[1..22]))) then Simbol:='EAU' else
   if (a=1974) and (M>=2) {and (J>=23)} then Simbol:='BOIS' else
   if (a=1975) and ((M=1) or ((M=2) and (J in[1..11]))) then Simbol:='BOIS' else
   if (a=1975) and (M>=2) {and (J>=12)} then Simbol:='BOIS' else
   if (a=1976) and ((M=1) or ((M=2) and (J in[1..29]))) then Simbol:='BOIS' else
   if (a=1976) and (M>=3) {and (J>=1)} then Simbol:='FEU' else
   if (a=1977) and ((M=1) or ((M=2) and (J in[1..18]))) then Simbol:='FEU' else
   if (a=1977) and (M>=2) {and (J>=19)} then Simbol:='FEU' else
   if (a=1978) and ((M=1) or ((M=2) and (J in[1..7]))) then Simbol:='FEU' else
   if (a=1978) and (M>=2) {and (J>=8)} then Simbol:='TERRE' else
   if (a=1979) and ((M=1) or ((M=2) and (J in[1..26]))) then Simbol:='TERRE' else
   if (a=1979) and (M>=2) {and (J>=27)} then Simbol:='TERRE' else
   if (a=1980) and ((M=1) or ((M=2) and (J in[1..16]))) then Simbol:='TERRE' else
   if (a=1980) and (M>=2) {and (J>=17)} then Simbol:='METAL' else
   if (a=1981) and ((M=1) or ((M=2) and (J in[1..4]))) then Simbol:='METAL' else
   if (a=1981) and (M>=2) {and (J>=5)} then Simbol:='METAL' else
   if (a=1982) and ((M=1) or ((M=2) and (J in[1..23]))) then Simbol:='METAL' else
   if (a=1982) and (M>=2) {and (J>=24)} then Simbol:='EAU' else
   if (a=1983) and ((M=1) or ((M=2) and (J in[1..12]))) then Simbol:='EAU' else
   if (a=1983) and (M>=2) {and (J>=13)} then Simbol:='EAU' else
   if (a=1984) and ((M<3) or ((M=3) and (J in[1..2]))) then Simbol:='EAU' else
   if (a=1984) and (M>=3) {and (J>=3)} then Simbol:='BOIS' else
   if (a=1985) and ((M=1) or ((M=2) and (J in[1..19]))) then Simbol:='BOIS' else
   if (a=1985) and (M>=2) {and (J>=20)} then Simbol:='BOIS' else
   if (a=1986) and ((M=1) or ((M=2) and (J in[1..8]))) then Simbol:='BOIS' else
   if (a=1986) and (M>=2) {and (J>=9)} then Simbol:='FEU' else
   if (a=1987) and ((M=1) or ((M=2) and (J in[1..27]))) then Simbol:='FEU' else
   if (a=1987) and (M>=2) {and (J>=28)} then Simbol:='FEU' else
   if (a=1988) and ((M=1) or ((M=2) and (J in[1..17]))) then Simbol:='FEU' else
   if (a=1988) and (M>=2) {and (J>=18)} then Simbol:='TERRE' else
   if (a=1989) and ((M=1) or ((M=2) and (J in[1..6]))) then Simbol:='TERRE' else
   if (a=1989) and (M>=2) {and (J>=7)} then Simbol:='TERRE' else
   if (a=1990) and ((M=1) or ((M=2) and (J in[1..25]))) then Simbol:='TERRE' else
   if (a=1990) and (M>=2) {and (J>=26)} then Simbol:='METAL' else
   if (a=1991) and ((M=1) or ((M=2) and (J in[1..14]))) then Simbol:='METAL' else
   if (a=1991) and (M>=2) {and (J>=15)} then Simbol:='METAL' else
   if (a=1992) and ((M<3) or ((M=3) and (J in[1..4]))) then Simbol:='METAL' else
   if (a=1992) and (M>=3) {and (J>=5)} then Simbol:='EAU' else
   if (a=1993) and ((M=1) or ((M=2) and (J in[1..21]))) then Simbol:='EAU' else
   if (a=1993) and (M>=2) {and (J>=22)} then Simbol:='EAU' else
   if (a=1994) and ((M=1) or ((M=2) and (J in[1..10]))) then Simbol:='EAU' else
   if (a=1994) and (M>=2) {and (J>=11)} then Simbol:='BOIS' else
   if (a=1995) and ((M<3) or ((M=3) and (J in[1..1]))) then Simbol:='BOIS' else
   if (a=1995) and (M>=3) {and (J>=2)} then Simbol:='BOIS' else
   if (a=1996) and ((M=1) or ((M=2) and (J in[1..18]))) then Simbol:='BOIS' else
   if (a=1996) and (M>=2) {and (J>=19)} then Simbol:='FEU' else
   if (a=1997) and ((M=1) or ((M=2) and (J in[1..7]))) then Simbol:='FEU' else
   if (a=1997) and (M>=2) {and (J>=8)} then Simbol:='FEU' else
   if (a=1998) and ((M=1) or ((M=2) and (J in[1..26]))) then Simbol:='FEU' else
   if (a=1998) and (M>=2) {and (J>=27)} then Simbol:='TERRE' else
   if (a=1999) and ((M=1) or ((M=2) and (J in[1..16]))) then Simbol:='TERRE' else
   if (a=1999) and (M>=2) {and (J>=17)} then Simbol:='TERRE' else
   if (a=2000) and ((M=1) or ((M=2) and (J in[1..5]))) then Simbol:='TERRE' else
   if (a=2000) and (M>=2) {and (J>=6)} then Simbol:='METAL' else
   if (a=2001) and ((M=1) or ((M=2) and (J in[1..23]))) then Simbol:='METAL' else
   if (a=2001) and (M>=2) {and (J>=24)} then Simbol:='METAL' else
   if (a=2002) and ((M=1) or ((M=2) and (J in[1..12]))) then Simbol:='METAL' else
   if (a=2002) and (M>=2) {and (J>=13)} then Simbol:='EAU' else
   if (a=2003) and ((M<3) or ((M=3) and (J in[1..2]))) then Simbol:='EAU' else
   if (a=2003) and (M>=3) {and (J>=3)} then Simbol:='EAU' else
   if (a=2004) and ((M=1) or ((M=2) and (J in[1..20]))) then Simbol:='EAU' else
   if (a=2004) and (M>=2) {and (J>=21)} then Simbol:='BOIS' else
   if (a=2005) and ((M=1) or ((M=2) and (J in[1..8]))) then Simbol:='BOIS' else
   if (a=2005) and (M>=2) {and (J>=9)} then Simbol:='BOIS' else
   if (a=2006) and ((M=1) or ((M=2) and (J in[1..27]))) then Simbol:='BOIS' else
   if (a=2006) and (M>=2) {and (J>=28)} then Simbol:='FEU' else
   if (a=2007) and ((M=1) or ((M=2) and (J in[1..17]))) then Simbol:='FEU' else
   if (a=2007) and (M>=2) {and (J>=18)} then Simbol:='FEU' else
   if (a=2008) and ((M=1) or ((M=2) and (J in[1..6]))) then Simbol:='FEU' else
   if (a=2008) and (M>=2) {and (J>=7)} then Simbol:='TERRE' else
   if (a=2009) and ((M=1) or ((M=2) and (J in[1..24]))) then Simbol:='TERRE' else
   if (a=2009) and (M>=2) {and (J>=25)} then Simbol:='TERRE' else
   if (a=2010) and ((M=1) or ((M=2) and (J in[1..13]))) then Simbol:='TERRE' else
   if (a=2010) and (M>=2) {and (J>=14)} then Simbol:='METAL' else
   if (a=2011) and ((M<3) or ((M=3) and (J in[1..4]))) then Simbol:='METAL' else
   if (a=2011) and (M>=3) {and (J>=05)} then Simbol:='METAL';

   {** (a=2012) and ((M=1) or ((M=2) and (J in[1..--]))) then Simbol:='METAL';**}

   Semj1:=0;Semj2:=0;Semj3:=0;

   if HoroCh='RAT'    then begin Semj1:=3; Semj2:=2; Semj3:=6; end else
   if HoroCh='BUFFLE' then begin Semj1:=6; Semj2:=3; Semj3:=4; end else
   if HoroCh='TIGRE'  then begin Semj1:=4; Semj2:=6; Semj3:=5; end else
   if HoroCh='LIEVRE' then begin Semj1:=4; Semj2:=6; Semj3:=5; end else
   if HoroCh='DRAGON' then begin Semj1:=0; Semj2:=3; Semj3:=4; end else
   if HoroCh='SERPENT'then begin Semj1:=2; Semj2:=5; Semj3:=3; end else
   if HoroCh='CHEVAL' then begin Semj1:=2; Semj2:=5; Semj3:=3; end else
   if HoroCh='CHEVRE' then begin Semj1:=5; Semj2:=1; Semj3:=4; end else
   if HoroCh='SINGE'  then begin Semj1:=5; Semj2:=4; Semj3:=2; end else
   if HoroCh='COQ'    then begin Semj1:=5; Semj2:=4; Semj3:=2; end else
   if HoroCh='CHIEN'  then begin Semj1:=1; Semj2:=3; Semj3:=4; end else
   if HoroCh='COCHON' then begin Semj1:=3; Semj2:=3; Semj3:=6; end;

   simb:=Simbol;
   HorsTibet:=HoroCh;

end;{*ends HorsTibet*}


Function ControlDate(Jour,Mois:byte;Annee:integer):boolean;
begin
   if (Mois=2) And (Not Bissextile(Annee)) And (Jour>28) Then
     ControlDate:=False
   else
   if (Mois=2) And (Bissextile(Annee)) And (Jour>29) Then
     ControlDate:=False
   else
   if (Mois Mod 2 = 0) And ((Mois>2) And (Mois<7)) And (jour>30) Then
     ControlDate:=False
   else
   if ((Mois=9) Or (Mois=11)) And (Jour>30) Then
     ControlDate:=False
   else ControlDate:=True;

end;{*ends ControlDate*}



Procedure Jours_Signe_Annee(var aa1:byte;var aa2:byte;var aa3:byte);
 var 
     jours        : Array[1..3] of byte;
     okj,ok,egale : boolean;
     jmax,nx,i,u  : byte;
     d1,m1,y1,dow1: word;

begin
   GetDate(y1,m1,d1,dow1);
   i:=1;

   if ControlDate(31,m1,y1) then jmax:=31
   else
   if ControlDate(30,m1,y1) then jmax:=30
   else
   if ControlDate(29,m1,y1) then jmax:=29
   else
   if ControlDate(28,m1,y1) then jmax:=28
   else
   Jmax:=27;
  
   inc(Jmax);
   Randomize;
   while i<=3 DO
    begin
        okj:=False;
        ok:=False;

        Repeat
           jours[i]:=Random(Jmax);
           nx:=JourSemaine(jours[i],m1,y1);
           if (i=1) And (nx =Semj1) then  okj:=True
           else
           if (i=2) And (nx =Semj2) then  okj:=True
           else
           if (i=3) And (nx =Semj3) then  okj:=True;

           if (i>1) and (okj) then
            begin
               if (jours[i]>0) and (i>1) Then
                 begin
                    egale:=False;
                    for u:=1 to i-1 Do
                     begin
                        if (jours[i]=jours[u]) then
                         begin
                            egale:=True;
                         end;
                     end;

                    if (Not egale) Then
                     begin
                        Ok:=True;
                     end;

                 end;
            end
           else
           if (i=1) and (okj) then
            begin
               Ok:=True;
            end;

        Until ok;

        inc(i);
    end;
   aa1:=jours[1];aa2:=jours[2];aa3:=jours[3];

end;{*ens Jours_Signe_Annee*}




Function Date_num(S: string;var jj:integer;var mm:integer;var aa:integer):boolean;
 var Err : integer;
     ssn : string;

begin
    {**anee**}

    ssn:=Copy(S,7,Length(S));

    {$R-}
    Val(ssn,aa,Err);
    {$R+}

    if Err=0 Then
     begin {mois}
        ssn:=S[4]+S[5];
        {$R-}
          Val(ssn,mm,Err);
        {$R+}
     end;

    if Err=0 Then
     begin              {**jour**}
        ssn:=S[1]+S[2];
        {$R-}
          Val(ssn,jj,Err);
        {$R+}
     end;

   if Err=0 Then  Date_num:=True
   else Date_num:=False;

end;{*ens Date_num*}

begin
    Semj1  :=0;
    Semj2  :=0;
    Semj3  :=0;
    SDate  :=NewDate;
    AneMax :=2500;
    Xsiecle:=2000;
end.

Logiciel EDnum Pascal & C++

ORGANIGRAMME DU LOGICIEL EDNUM POUR MACHINES COMMANDE NUMERIQUE SUR LE BOIS


 

{================= FICHIER DE EDNUM ======================}
{ Unite de Graphe Trace Usinage machines a c.n. NUM750    }
{ programmation Turbo Pascal de Borland                   }
{ Copyright (S) 1997-2011                                 }
{ programmeur du programme A.Ara                          }
{ 64150 Mourenx France.                                   }
{ Licence d'utilisation accorde dans un but démonstratif  }
{ Unite mathes.pas -- unite de EDnum c.n du bois  NUM750  }
{=========================================================}

Unit Mathes;

Interface

{=============================================}
{ Converti Degres Minutes Secondes en Decimal }
{=============================================}
 Function DegreD (Deg,Min,Seg:byte):Real;

{=============================================} 
{ Converti Un Angle en degres en Radians      }
{=============================================}			  
 Function Radian (Angle:Real):Real;

{=============================================} 
{ Converti Radians en degres                  }
{=============================================}
 Function Radian_Degre (Radi:Real):Real;
 
{=============================================}
{ Converti Radians En Degres                  }
{=============================================}
 Function DegreR (Radian:real):Real;
 
{=============================================}
{ Eleve un nombre a la puisance x             }
{=============================================}
 Function PUISANCE (Nombre:Real;Puisances:REAL):Real;

 Function Sinu   (degres : Real):Real;
 Function ArcSin (Sinus  : Real):Real;
 Function Cosi   (degres : Real):Real;
 Function ArcCos (Cosinus: Real):Real;
 Function Tang   (degres : Real):Real;
 Function Cotang (degres : Real):Real;

 Implementation


 Const  ExpLimit_M  = 11356; 

{=================================================}
{ Converti Degres Minutes Secondes en Decimal     }
{=================================================}

 Function DegreD(Deg,Min,Seg:Byte):Real;
 begin
    if ((deg>0) AND (deg<=360)) And (Min<=60) And (Seg<=60) Then
     DegreD:=Deg+(Min/60)+(Seg/3600);
 end;

{=================================================}
{ Converti Un Angle en degres En Radians          }
{=================================================}

 Function Radian(Angle:Real):Real;
 begin
     if (Angle>0) And (Angle<=360) Then
      Radian:=Pi*angle/180;
 end;


 Function Radian_Degre(Radi:Real):Real;
 begin
     Radian_Degre:=Radi*(360/(2*Pi));
 end;

{=================================================}
{ Converti Radians En Degres                      }
{=================================================}

 Function DegreR(Radian:real):Real;
 begin
     DegreR:=180*Radian/Pi;
 end;

 Function ArcSin(Sinus:Real):Real;
 begin
    if Sinus>=0.9999 Then ArcSin:=1.5707515955
    else
    if (Sinus>=-1) And (Sinus<1) Then
      ArcSin:=ArcTan(Sinus/Sqrt(1-Sqr(Sinus)));
 end;


 Function ArcCos(Cosinus:Real):Real;
 begin
    if Cosinus>=0.9999 Then ArcCos:=0.004472137
    else
    if (CoSinus>=-1) And (CoSinus<1) Then
     ArcCos:=1.570796-ArcTan(CoSinus)/Sqrt(1-Sqr(CoSinus));
 end;


 Function Sinu(degres:Real):Real;
 begin
     if degres=0 Then Sinu:=0
     else
     if degres=90 Then sinu:=1
     else
     Sinu:=Sin(Pi*degres/180);
 end;


 Function Cosi(degres:Real):Real;
 begin
    if degres=0 Then cosi:=1
    else
    if degres=90 Then Cosi:=0
    else
    Cosi:=Cos(Pi*degres/180);
 end;


 Function Tang(Degres:Real):Real;
 begin
     if (Degres > 0) And (Degres <90) Then
      Tang:=(sinu(degres)/Cosi(Degres))
     else
     Tang:=0;
 end;


 Function Cotang(Degres:Real):Real;
 begin
     if Degres=0 Then cotang:=343.7737
     else
     if degres=90 Then Cotang:=0
     else
     Cotang:=(Cosi(degres)/sinu(Degres));
 end;


 Function PUISANCE(Nombre:Real;Puisances:Real):Real; {Puissance}
 begin
     if Nombre <= 0 Then PUISANCE:=0
     else
     if ((Puisances * Ln(Nombre)) < -ExpLimit_M) Or
        ((Puisances * Ln(Nombre)) > ExpLimit_M) Then Puisance:=0
     else
     Puisance:=Exp(Puisances * Ln(Nombre));
 end;


{=================================================================}
{ conversion base : Binaire, Termary, Quintal, Octal, Hexadecimal }
{=================================================================}
function Conversion_base_num(n:Word;base:byte):string;
const hex  : Array[0..15] of char =('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
var _ss,_s : string;
    _nx    : word;

begin
   _s:='';
   _ss:='';
   while n>=base Do
    begin
       _Nx:=n Mod base;
       _S:=_S + hex[_nx];
       n := n div base;
    end;
   _S:=_s + hex[n];
   if Length(_s)>8  then insert(' ',_s,9);
   if Length(_s)>4  then insert(' ',_s,5);
   for _nx:=Length(_s) downto 1  do _ss:=_ss + _s[_nx];
   Conversion_base_num:=_ss;
end;

end. {**end Unite**}

{==Exemples ========================================================================}
{ Writeln('(Binaire)    1000 = ', Conversion_base_num(1000,2));  total = 1111101000 }
{ Writeln('(Trinaire)   1000 = ', Conversion_base_num(1000,3));  total = 1101001    }
{ Writeln('(Qintal )    1000 = ', Conversion_base_num(1000,5));  total = 13000      }
{ Writeln('(Octal)      1000 = ', Conversion_base_num(1000,8));  total = 1750       }
{ Writeln('(decimal)    1000 = ', Conversion_base_num(1000,10)); total = 1000       }
{ Writeln('(hexadecimal)1000 = ', Conversion_base_num(1000,16)); total = 3e8        }
{===================================================================================}
Suite Dans une autre Galaxie :: Editeur de texte…[2]    Programmation Turbo pascal…[3]

© 2009 - 2012   Parti Pour Les Animaux - Pays : France | All GNU  CopyLeft WebSite  |  Last Updated : Mai 13, 2012   |  Page Editor: A. Ara  | SiteMap
Cet emplacement web non-commercial, et totalement libre & indépendant de tout les parti politique ou d'organisme officiel de toute nature.
Nous réflexions sont exclusivement l'avis de personnes qui rejettent le massacre que la société fait aux animaux pour tout motif.