user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 09-01-2014 12:29:00

WarLocG
#! modo de compet

Langage de Description d'Algorithme - LDA

(en construction...)

I. De quoi s'agit-il ?

Le LDA est un langage tout en français permettant de faire ses premières dents dans la programmation et entraîner sa logique. La syntaxe du LDA n'est pas normalisée en soit, j'en ai déjà aperçu avec une syntaxe proche du Pascal ainsi que proche du C, celui que je vous présenterai ici sera celui que j'ai appris en cours de Principes et Méthodes de Programmation.

II. Un exemple de LDA

Voici un petit exemple d'un algorithme écrit en LDA

Enoncé : calculer la circonférence d'un cercle.

bloc
  CONST pi = 3.14159
  VAR rayon : réél

  ECRIRE "Entrer la valeur du rayon"
  ENTRER rayon
  ECRIRE "la circonférence de ce cercle est", 2 * pi * rayon
fbloc

III. Les déclarations

A. Les variables

Une variable est un objet ("une boite") créé en mémoire dont la valeur ("le contenu")  varie lors de certaines instructions du LDA.

VAR liste d'identificateurs : type

Il existe 4 types primitifs : réél, entier, caractère, booléen
Un type composé : alphanumérique
Les types scalaires (les tableaux)
Et d'autres que l'ont abordera plus loin, plus complexes (les enregistrements, pointeurs, fichiers) ainsi que des types définis par le programmeur.

Quelques exemples de ces types dans les autres langages (je ne rentre pas dans les détails signés/non signés ou trop complexes)

entier:
   C => char, short, int, long, long long
   Java => byte, short, int, long
   Pascal => Byte, Word, Integer
   Python => {non typé}
   VBA => As Byte, As Integer

réél:
  C => float, double, long double
  Java => float, double
  Pascal => Single, Double, Extended
  Python => {non typé}
  VBA => As Single, As Double

caractère:
  Remarque: s'ecrit entre ' ' (apostrophes)
  C => {en C un caractère est un entier correspondant à une valeur ASCII}
  Java => char
  Pascal => Char
  Python => {non typé}
  VBA => As Char

booléen:
  C => {inexistant, faux = 0 et vrai = une valeur}
  C++ => bool
  Java => boolean
  Pascal => Boolean
  Python => {non typé}
  VBA => As Boolean

alphanumérique:
  Remarque: s'écrit entre " " (guillemets)
  C => tableau de char; soit char* ou char[]
  Java => objet java.lang.String
  Pascal => String
  Python => {non typé}
  VBA => As String

B. Les constantes

La déclaration d'une constante permet de donner un nom à une valeur constante.

CONST liste d'identificateurs = valeurs

Exemples:

CONST erreur = "Oops.. une erreur s'est produite." !constante alphanumérique!
CONST pi = 3.14156 !constante réélle!
CONST e = 2.71828 !idem!
CONST ok = Vrai !constante booléenne!

IV. Les Instructions simples

A. Lecture

La lecture des valeurs d'une liste de variables à partir d'un support extérieur (cartes, disques, bandes magnétiques, ...)
Par défaut, les valeurs doivent être entrées au clavier.

ENTRER liste de variables

Exemples:

VAR a,  b, c : entier

ENTRER b         ! l'ordinateur attend, l'utilisateur tapes '1' '2' 'entrer', l'entier 12 sera placé dans la variable b !
ENTRER c, a     ! l'ordinateur attend, l'utilisateur tapes '5' 'entrer' '-' '2' '1' '6' 'entrer', l'entier 5 sera placé dans c, l'entier -216 sera placé dans a !

Correspondance avec quelques autres langages:
  C => scanf(), fscanf(), getchar(), gets()
  C++ => cin >> variable
  Java => {un peu plus compliqué a mettre en place en java; avec System.in et StreamReader; mais il existe le package java.util.Scanner pour se faciliter la tache; Scanner sc = new Scanner(System.in); int i = sc.nextInt(); sc.Close(); par exemple}
  Pascal => Readln()
  Python => input(), raw_input()
  VBA => Console.ReadLine()

B. Ecriture

L'écriture sur support extérieur des valeurs d'une liste de constantes,de variables et plus généralement d'expressions.
Par défaut, les valeurs sont affichées à l'écran.

ECRIRE liste de constantes, de variables ou d'expressions

Exemple:

VAR x : entier

ECRIRE 2 * 3          ! l'expression est calculée et affichée => 6 !
ECRIRE "nb = ", x   ! affiche la constante alphanumérique et le contenu de la variable ; si x vaut 4, affiche => nb = 4 !

Correspondance avec quelques autres langages:
  C => printf(), fprintf(), putchar(), puts()
  C++ => cout << expression
  Java => System.out.println()
  Pascal => Writeln()
  Python => print()
  VBA => Console.WriteLine()

C. Assignation

L'assignation d'une valeur à une variable.

variable <- expression

Exemples:

VAR a : entier

a <- 3            ! a reçoit 3 !
a <- -5           ! a reçoit -5 !
a <- a * 2       ! l'expression est calculé : (contenu de a) * 2 = -5 * 2 = -10; correspond à a *= 2 en C, C++ et Java !

D. Les commentaires

Un commentaire est une instruction non executable qui permet d'insérer des remarques dans un programme.

! commentaire !

E. Les expressions

Une expression est la combinaison d'un opérateur et d'opérandes et donne une valeur. Les opérandes peuvent être des constantes, des variables ou des expressions.

a. Opérateurs arithmétiques et ordre de priorité

1°) L'exposant : ^
2°) Le changement de signe : -
3°) La multiplication, la division et le modulo : * / MOD
4°) L'addition et la soustraction : + -

Remarque: la division entre 2 entiers donne un entier

VAR a : entier

a <- 11 / 4    ! a reçoit 2 !

b. Opérateur de concaténation (entre alphanumériques ou caractères)

concaténation : +

Exemple:

VAR chaine : alphanumérique

chaine <- "Abc" + "dE" + 'f'   ! chaine reçoit "AbcdEf" !

c. Opérateurs relationnels

égal : =
différent : <>
inférieur : <
inférieur égal : <=
supérieur : >
supérieur égal : >=

d. Opérateurs booléens

négation logique : non
conjonction logique : et
disjonction logique : ou

Table de vérité: (voir tuto de coyotus ici)
Loi de De Morgan :

non ( p ou q ) = ( non p ) et ( non q )
non ( p et q ) = ( non p ) ou ( non q )

F. Les alternatives

a. L'alternative à 2 branches (les si)

L'alternative à 2 branches correspond à un choix entre 2 traitements selon le resultat d'un test.

La condidition est testée:
* Si                                   la condition est vraie,           le traitement1 est executé
* Sinon                              la condition est fausse,        le traitement2 est executé

Syntaxe:

-
-  ! traitement de début !
-
si condition alors  -
                           - ! traitement1 !
                           -
                  sinon -
                           - ! traitement2 !
                           -
fsi
-
- ! traitement de fin !
-

Remarque: la partie en sinon est facultative, lorsqu'elle est vide elle est ignorée et on sort directement du si en fin de traitement1.

Exemple:
  Enoncé: Entrer 2 nombres, soustraire le plus petit du plus grand.
Analyse:
  1. Au début du programme, il faut rentrer 2 nombres qu'on appelera n1 et n2.
  2. Alternative pour tester lequel est plus petit que l'autre. Selon les possibilités, une variable recevra soit n1 - n2, soit n2 - n1.
  3. A la fin du programme, il faut afficher le résultat obtenu, soit le contenu de resultat
Algorithme1:

bloc
  VAR n1, n2, resultat : réel

  ! preparation de l'alternative qui suit, c-a-d, entrer n1 et n2 !
  ECRIRE "Entrer 2 nombres à soustraire"
  ENTRER n1, n2

  ! alternative : comparaison de n1 et n2 !
  si n1 > n2 alors ! soustraire n2 de n1 car n2 est plus petit !
                          resultat <- n1 - n2
                 sinon ! soustraire n1 de n2 car n1 est plus petit ou égal à n2 !
                          resultat <- n2 - n1
  fsi
 
  ! fin du programme, afficher la valeur de resultat !
  ECRIRE "La soustraction vaut " , resultat
fbloc

Remarque: on peut se passer de la variable resultat et afficher directement le resultat obtenu lors de la soustraction => Gain de place (une variable en moins), gain de temps (instructions en moins).
Algorithme2:

bloc
  VAR n1, n2 : réel

  ECRIRE "Entrer 2 nombres à soustraire"
  ENTRER n1, n2
  ECRIRE "La soustraction vaut "

  si n1 > n2 alors ECRIRE n1 - n2
                 sinon ECRIRE n2 - n1
  fsi
fbloc

Crédits:
  Le présent tutorial est tiré du cours de Principes et Méthodes de Programmation, année 2009,
  écrit par madame De Henau, de l'institut I.S.F.C.E. d'Etterbeek (1040 Bruxelles, Belgique)

Comme la source ne vient pas entièrement de moi, il est normal que je mentionne l'auteur.


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

#2 09-01-2014 23:30:48

WarLocG
#! modo de compet

Re : Langage de Description d'Algorithme - LDA

Exercices d'entrainement

Je vous demanderai également de ne pas poster vos réponses pour deux raisons:
* D'abord par respect envers ceux qui seraient encore occupés à chercher.
* Ensuite pour éviter que des petits malins dans des écoles viennent chercher des réponses toutes faites et ne fasse pas l'effort de le faire par eux même, dans la mesure où le forum est publique, l'accès aux "réponses" à leur travaux scolaires se ferait sans la moindre difficulté, ce qui ne les aidera pas plus.

Exercices:

(A faire lorsque les expressions simples auront été abordés, sinon vous ne pourrez pas encore les faire) => Ok

* Saisir 2 horaires en heures, minutes et secondes ; calculer le temps écoulé entre les 2 (en secondes).
* Entrer 2 entiers ; afficher leur somme et leur différence.
* Entrer 3 entiers ; les permuter. (En utilisant une seule variable intermédiaire)

(A faire lorsque les alternatives et les répétitives auront été abordés, sinon vous ne pourrez pas encore les faire)

* Calculer la somme des N premiers nombres entiers positifs.
* Entrer un entier N. Afficher le plus grand entier A tel que A * A * A <= N, puis le plus petit entier B tel que N < B * B * B.
* Calculer n * a avec n entier et a réel sans utiliser l'opérateur de multiplication.
* Soit une suite d'entiers qui commence par un élément non nul et qui se termine par deux 0 consécutifs.
   L'existance d'éléments nuls détermine des sous-suites.
   Par exemple, la suite 11, 9, 3, 4, 0, 12, 3, 0, 4, 3, 9, 0, 1, 0, 0
   définit les sous-suites {11, 9, 3, 4}, {12, 3}, {4, 3, 9}, {1}
   Afficher la longueur de la plus longue sous-suite.


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

#3 13-01-2014 00:40:17

mimas
Membre

Re : Langage de Description d'Algorithme - LDA

Quel est l'intérêt de décrire un algorithme dans un langage qui ressemble à un autre langage de programmation ? L'intérêt d'une description d'un algorithme est de faire abstraction d'un langage informatique/formel afin de pouvoir transcrire l'algorithme dans n'importe quel langage tout en évitant le plus possible les écueils et spécificités liés à un langage.

Je n'arrive pas à concevoir quel est l’intérêt de LDA par apport à, puisque tu les a cité, Pascal, C (même si ce n'est pas un très bon exemple à cause de la gestion de mémoire de ce dernier) ou encore Python.

Dernière modification par mimas (13-01-2014 00:43:34)

Hors ligne

#4 15-01-2014 00:51:25

WarLocG
#! modo de compet

Re : Langage de Description d'Algorithme - LDA

C'est un langage qui permet a des débutants en programmation d'entrainer leur logique, et comme il est en français il ne bloquera pas les francophones qui sont récalcitrants avec l'anglais.

Ensuite, j'ai énoncé des correspondances avec certains langages pour ces mêmes débutants qui voient ces types dans le langages sans vraiment savoir ce a quoi ca correspond ou qui désireraient savoir quel type utiliser dans leur langage.. du moins le minimum, et pas tout les langages, je n'ai évoqué que ceux que j'ai déjà fait, ne me demande pas une correspondance en lua, haskell, ruby ou je sais pas moi, fortran, je ne les connais pas, mais libre à chacun de contribuer en me donnant des correspondances avec d'autres langages. Ensuite, le débutant doit aussi apprendre à chercher par lui même si son projet est plus ambitieux (normal tu me diras).

mimas a écrit :

Je n'arrive pas à concevoir quel est l’intérêt de LDA par apport à, puisque tu les a cité, Pascal, C (même si ce n'est pas un très bon exemple à cause de la gestion de mémoire de ce dernier) ou encore Python

Par rapport a python, et pratiquement tous les langages récents, c'est inutiles, le typage à tendance à disparaitre. Pour les autres, c'est plus simple. Tu n'as que 4 types primitifs, l 'alphanumérique pour ce qui est des string et le reste on a pas encore vu mais ca reste composés à partir de ces 5 là. (Un pointeur va pointer un des types déja cités, si tu fait un typedef en c, ca provient a la base d un des types deja cités, les enregristrements (struct) c'est composé des types deja cités, ... fichier est un cas a part comme en C (FILE*) mais ca reste plus simple de juste utiliser "entier" par exemple que de se casser la tête a savoir si on va déclarer une variable en char (1 octet), short (2 octets), ou int (2 ou 4 octets selon le compilo)...

Comme je sais que tu programmes, que tu as de l'expérience et donc une bonne logique, je me doute bien que cet outil ne te sers pas vraiment à grand chose, ne t'apprendras rien, que tu as déjà fait tes armes aussi ton expérience est plus valorisante que ce genre d'outil.

Selon les écoles, on peut apprendre les principes et méthodes de programmation a l'aide de ce langage. Il sert a apprendre les bases: variables, boucles, conditions, fonctions, ... et souvent vient avec les arbres programmatiques (AP) dont je ne ferai pas mention dans ce tuto, qui est et sera deja bien assez lourd comme ca (mais là il n'est pas fini..), avant d'apprendre un langage proprement dit, ou plutot une méthode de programmation ("langage procédural", "langage orienté gestion" et/ou "langage orienté objet" dans la plupart des ecoles, en Belgique du moins). Et LDA c'est "sur papier" (dans un fichier texte plutot dans notre cas), y a pas de compilateurs/interpréteurs LDA, lorsque j'ai appris le LDA, pour tester nos programmes, on réecrivait nos codes en Pascal... (nostalgie)...

Je rajoute que les correspondances avec les quelques langages énoncés ne viennent pas de la retranscription du cours, elles viennent de moi (c'est un ajout).

Et enfin, pour ce qui est de l'intérêt, et bien, je partage une connaissance que l'on ne retrouve pas massivement sur le net. Et que tout le monde ne connait pas, voir n'en a jamais entendu parler. Et ca c'est un plus.


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

Pied de page des forums