Vous n'êtes pas identifié(e).
Pages : 1
(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éélECRIRE "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éelECRIRE "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.
Hors ligne
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.
Hors ligne
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
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).
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.
Hors ligne
Pages : 1