Tout d'abord merci d'avoir pris le mal de me répondre.
même si tu apprends bien la programmation en Pascal, tu apprends cependant à
formuler ton problème sous forme de texte, même si c'est un peu mélangé avec la syntaxe de Pascal
Nous ne sommes pas obligés, nous élèves, de formuler la réponse en texte.
Donc pour le moment, je ne suis pas réellement capable d'écrire un "vrai" algorithme qui serait traduisible en n'importe quel langage dans une seconde étape.
Dans les tests qu'on passe, on nous pose un problème de ce genre:
Remplissez un tableau T par n entiers positifs avec n>=2. L'utilisateur entre un nombre k, le programme doit afficher si k existe dans le tableau ou non.
1) Divisez le problème en modules.
2) Analysez et écrivez les algorithmes de la question 1).
3) Traduisez votre solution en Pascal.
C'est à nous faire croire qu'écrire un algorithme de cette manière signifie écrire une solution traduisible en n'importe quel langage de programmation. La preuve, on est amené à le traduire en Pascal !
L'analyse elle, consiste à écrire l'algorithme de bas en haut, chose ignoble insensée que je désapprouve. Mon professeur a accepté que je fasses une "spécification" qui est la solution en langage naturel. Même si ça me prend plus de temps à rédiger et à trouver les bons mots, je préfère ça que leur analyse qui n'a aucune raison d'être.
quitte à avoir à changer quelques notations comme le :=
c'est vrai le := c'est du Pascal, en algorithmique l'opération d'affectation telle qu'elle est décrite dans mon livre, qui n'est ni une bible ni un coran, est représentée par une flèche vers la gauche, pointant la variable dont on veut changer la valeur.
Je ne sais plus si les tableaux commencent à 0 ou 1.
à n'importe quelle valeur entière (ou plutôt scalaire puisqu'on peut utiliser des caractères) si j'ai bien compris mes cours, tout dépend de la déclaration
T : array[vd..vf] of type (vd : valeur de début)
Maintenant, si l'on compare la solution que tu as soumise à l'idée de ce qu'est l'algorithmique dans ma tête... Ta solution est un mélange de spécification et d'algorithmique. Dans mon livre, la boucle pour, de son nom structure itérative complète, a la syntaxe suivante :
Pour Cp de Vi à Vf faire
Instruction 1
Instruction 2
...
...
Instruction n
FinPour
Ce qui est différent de
pour chaque i entre a+1 et b
Laquelle est de l'algorithmique ?
Moi, j'ai soumis un algorithme (toujours suivant ce que je crois). Si c'était un examen j'aurais rédigé une spécification et cela aurait donnait ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
Spécification de la fonction pos_min
Résultat : la position de la chaîne la mieux classée dans l'ordre alphabétique entre la case a et b d'un tableau de chaînes.
Traitement : Tant qu'on est pas sûr de quelle chaîne est la première entre les cases a et b du tableau, il faut parcourir tout le tableau (utilisation d'un boucle pour) ensuite comparer la chaîne supposée minimale avec l'élément du tableau en cours. Comparer deux chaînes signifie les comparer lettre par lettre de même rang j, jusqu'à pouvoir conclure laquelle est placée devant l'autre.
Exemple : la lettre "b" quand on compare "abbe" et "abba"
Ce qui signifie qu'on a deux cas :
1) la lettre comparée de rang j est la même
-Soit c'est la dernière lettre de l'une des deux chaînes et là on peut conclure que la moins longue en nombre de caractère est plus petite
-Soit ce n'est pas la dernière lettre, ce qui nous oblige à comparer la lettre de rang j+1 (donc pas de conclusion)
2) ou la lettre comparée de rang j est différente
Là nous pouvons tout de suite conclure:
-Soit la lettre est plus petite ; nous supposons alors que cette chaîne comparée est la chaîne minimale (en affectant i à posmin)
-Soit la lettre est plus grande, nous ne changeons pas de supposition
Données : les positions de début et de fin a et b : entiers
T : tab |
Ensuite j'écris l'algorithme sans oublier le TDO, là où l'on déclare les objets, plus précisément, les variables locales dans une procédure ou une fonction.
Très étrange tout cela, qu'en pensez-vous ?
Partager