IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Trier des chaînes et questions d'ordre général sur l'algorithmique


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut Trier des chaînes et questions d'ordre général sur l'algorithmique
    Voici un algorithme que j'ai écrit hier dans le but d'utiliser le tri par selection pour trier un tableau de chaînes de caractères. Cette fonction doit servir à trouver l'indice de la chaîne qui se trouve en première position dans l'ordre alphabétique entre la case a et la case b du tableau.
    D'abord je vous demande si c'est correct ensuite, est-ce que ça sert à quelque chose ? Parce que j'ai remarqué qu'en Pascal, par exemple, on peut comparer deux chaînes à l'aide d'un opérateur ">" ou "<".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    fonction posmin(t:tab, a,b:entier):entier
    min := a
    pour i de a+1 à b faire
    	ok := faux
    	j := 0
    	répéter
    		j := j+1
    		si (t[i][j]=t[min][j]) alors
    			si j=long(t[min]) alors
    				ok := vrai
    				si long(t[min])>long(t[i]) alors min := i
    			fsi
     
    		sinon
    			ok := vrai
    			si t[i][j]<t[min][j] alors min := i
    		finsi
    	jusqu'à ( ok = vrai ) ou ( j = long(t[min]) )
     
    fin pour
    posmin:=min
    fin posmin
     
    i est un compteur donc un entier, 
    min étant la position du minimum est un entier
    ok est de type booléen
    Puisque c'est ici qu'il y a des gens sympathiques et que c'est l'endroit idéal pour poser ses questions et qu'en ce moment je m'en pose pas mal... Je suis en bac -1 section Sciences de l'Informatique, la matière principale se nomme "Algorithmique et Programmation", on y apprend ce que je connais au nom d'algorithmique c'est à dire les boucles pour, répéter, les structures conditionnelles si, cas de, algorithmes de tri et de recherche... le tout en faisant des applications en Pascal, le seul langage qu'on apprend. Seulement, je me demande ce que c'est que l'algorithmique exactement. Ce que j'ai retenu de tout ce qu'on m'a dit c'est que c'est le langage en quelque sorte universel qu'on utilise pour programmer avant de passer à la traduction en un langage "compilable". La définition que je retiens ne me plaît pas beaucoup car je suis de plus en plus conscient de la différence qu'il y a entre les langages. Alors, je me dis qu'on ne peut peut-être pas utiliser le même algorithme dans deux différents langages. En d'autres termes, je ne suis pas en train d'apprendre LA programmation mais plutôt la programmation en Pascal. Si vous pouvez lever ce doute de mon esprit, je vous en serais très reconnaissant.
    Merci.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tes questions sur l'algorithmie sont vastes...

    D'abord , même en se limitant à Wikipédia, qui n'est pas une bible et encore moins un dictionnaire réel, la définition en est :

    Étude de la résolution de problèmes par la mise en œuvre de suites d'opérations élémentaires selon un processus défini aboutissant à une solution
    Comme tu vois c'est vaste

    En gros, ça regroupe tous les processus logiques que l'on peut trouver dans le monde touché par l'informatique (pour ce forum, mais ça peut être aussi dans les maths ou la physique pures), si possible exprimés soit en maths, soit en langage courant, mais pas en langage informatique, en évitant si possible les parties trop peu liées aux maths ou calculs (disons par exemple les choses comme demander le nom d'un fichier, ou afficher quelque chose).

    C'est en ça que c'est universel : ce devrait être en mélange de langage courant et de maths, mais sans référence à un langage de programmation particulier.

    Dans la pratique on s'adapte assez souvent, les langages n'étant pas trop éloignés les uns des autres en ce qui concerne les calculs de maths.

    Dans ce sens, c'est bien de l'algorithmie, car on peut exprimer (même si c'est plus long) en phrases et symboles de maths la solution au problème, et donc c'est ensuite programmable dans n'importe quel langage.

    Dans l'exemple que tu donnes, en fait, il y a un peu de mélange avec la syntaxe Pascal. Donc ce n'est pas exactement de l'algorithmie pure.

    Mais pour ton problème "existentiel", 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. Et donc tu apprends quand même ce qui te servira pour n'importe quel langage plus tard ,quitte à avoir à changer quelques notations comme le := .

    Enfin pour ton problème "technique", comme le Pascal est loin, il y des choses dont je ne suis pas sûr. Je ne sais plus si les tableaux commencent à 0 ou 1.
    Mais je ferais de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    min = Démarrer en position a
     
    pour chaque i entre a+1 et b
        si  1er caractère de i < 1er caractère de min
              min = i
        sinon
              si 1er caractère de i = 1er caractère de min
                    pour j = 1  jusqu'à plus petit(longueur i, longueur de min)
                           si caractère de i,j < caractère de min,j
                                  min = i
                                  fin pour
                           fin si
                     fin pour
              fin si
         fin sinon
    fin pour

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut Re:
    Citation Envoyé par katrena99
    est-ce que ça sert à quelque chose ? Parce que j'ai remarqué qu'en Pascal, par exemple, on peut comparer deux chaînes à l'aide d'un opérateur ">" ou "<".
    Je ne pense quand même pas qu'on peut également comparer des enregistrements avec les opérateurs '<' ou '>'. Donc comment vas tu faire pour trier un tableau d'enregistrements par exemple?
    je me demande ce que c'est que l'algorithmique exactement
    C'est la science des algorithmes .
    Ce que j'ai retenu de tout ce qu'on m'a dit c'est que c'est le langage en quelque sorte universel qu'on utilise pour programmer avant de passer à la traduction en un langage "compilable".
    Pas vrai. Ce langage dont tu parles est ce qu'on appelle un pseudo-language et il n'est utilisé qu'à des fins pédagogiques. Un algorithme est une méthode de résolution de problème et en principe chacun est libre de la formuler comme ca lui chante (en pseudo-langage par exemple ).
    En d'autres termes, je ne suis pas en train d'apprendre LA programmation mais plutôt la programmation en Pascal
    En apprenant la programmation en Pascal, tu apprends la programmation

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Par défaut
    En effet, en algorithmique, tu apprend a formuler un probleme et une solution en pseudo-language destine a decrire ce qu'il faut faire pour resoudre le probleme avec un pseudo-language.

    Le passage du pseudo-language a un language varie enormement dependant du language (VB6 et C# sera tres tres tres different).

    En d'autres termes, l'algorithmique est tres proche des Mathematiques, alors que le programmation est plutot a part, proche de la logique (enfin ca depend du programmeur )

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    En effet, en algorithmique, tu apprend a formuler un probleme et une solution en pseudo-language destine a decrire ce qu'il faut faire pour resoudre le probleme avec un pseudo-language.
    Si c'est un pseudo-langage, pourquoi tient-on autant à ce qu'il soit respecté ? Dans un examen, une dérivation d'un mot-clé est considérée comme une erreur de syntaxe et c'est entre 1/2 et 1 pt de moins. N'est-ce pas quelque peu ridicule s'il s'agit d'un pseudo-langage ?

    Merci à tous ceux qui ont répondu.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par katrena99
    Si c'est un pseudo-langage, pourquoi tient-on autant à ce qu'il soit respecté ? Dans un examen, une dérivation d'un mot-clé est considérée comme une erreur de syntaxe et c'est entre 1/2 et 1 pt de moins. N'est-ce pas quelque peu ridicule s'il s'agit d'un pseudo-langage ?

    Merci à tous ceux qui ont répondu.
    Je suppose que c'est pour vous apprendre la rigueur ....

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    Nous c'est la même matière, et avec un raisonnement très très tiré par les cheveux, on peut avoir aisément un 16 ou même un 17/20 à condition de respecter la syntaxe. Et tout cela sans que l'on nous demande de traduire en Pascal. En réalité, on teste nos facultés à apprendre les mots-clés ou plus généralement la syntaxe du pseudo-langage.
    Mais au moins, dîtes-moi est-ce qu'au moins, grâce à mes professeurs, mon algorithme (plus haut) est facilement compréhensible ?

  9. #9
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par katrena99
    N'est-ce pas quelque peu ridicule s'il s'agit d'un pseudo-langage ?
    Je suis 100% d'accord avec toi. Mais ...
    c'est pour vous apprendre la rigueur

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 63
    Par défaut
    Et puis aussi c'est pas la meme matiere, en algo on juge la logique du resonnement et de la solution, en exam de programmation, on va te juger sur ta connaissance du language et des mots clefs.

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/03/2015, 09h54
  2. Question d'ordre général sur les parseurs
    Par myzu69 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 04/09/2010, 15h00
  3. Réponses: 0
    Dernier message: 13/08/2010, 16h53
  4. Question d'ordre général sur les macros sur excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 29/08/2007, 05h16
  5. [Portlet] Questions d'ordre général sur les portlets
    Par Chabin dans le forum Portails
    Réponses: 1
    Dernier message: 25/06/2007, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo