L'écriture de code est-elle toujours considérée comme une représentation algorithmique? [fermé]

StackOverflow https://stackoverflow.com/questions/263834

  •  06-07-2019
  •  | 
  •  

Question

Je viens de perdre 50% de ma réponse à un test parce que j’écrivais le code au lieu d’un algorithme à mi-parcours, me faisant passer d’un A à un C. L’écriture de code est-elle toujours considérée comme une représentation algorithmique?

Wikipedia: représentation de l'algorithme (le style de programmation est basé sur le consensus)

EDIT: Ok, permettez-moi de préciser quelques points:

  1. Le test a demandé un pseudo-code, que nous n'avons jamais vraiment défini. en classe; nous venons d'écrire l'anglais pour nos algorithmes.

  2. Il s’agit d’une classe Java et a écrit la solution complète dans une méthode Java, avec des commentaires. Tout cela était écrit à la main et a pris plus de temps que le pseudo-code. Je pensais que ce serait plus clair.

  3. Normalement, je ne parlerais pas de ce genre de choses, mais c'est la différence entre un A et un C, et j'ai une bourse d'études pour mes examens.

  4. Enfin, je fais ce post pour deux raisons:

    4.1 Je veux montrer ce que la communauté de programmation moderne pense de la représentation pseudo-code et algorithmique.

    4.2 Je veux savoir ce qui est acceptable dans le "monde réel"; Je programme depuis un certain temps, mais je veux pouvoir contribuer rapidement à des projets open source, et je ne veux pas marcher sur les pieds de quelqu'un. (Même si je suis à peu près sûr que ce sujet a peu de chance de se poser dans le monde réel).

Encore une fois, merci pour votre aide / conseil.

Était-ce utile?

La solution

Vous voudrez peut-être donner un exemple. Si votre code est trop axé sur des spécificités linguistiques qui ne font pas partie de l'algorithme, il est compréhensible que votre non-algorithme ait été mélangé à votre algorithme, ce qui a donné un résultat incorrect.

Je pense que le raisonnement veut que l’objet de l’apprentissage soit de montrer que vous comprenez le concept, de ne pas vous pencher et de cocher toutes les bonnes cases.

On peut apprendre à un ordinateur à passer à l’université, mais on ne peut pas encore apprendre à un ordinateur à penser réellement et à appliquer ses connaissances.

Manger et régurgiter la mentalité est la raison pour laquelle je n’ai jamais obtenu mon diplôme.

En ce qui concerne votre commentaire récent, il est important de comprendre que le pseudocode n’est pas défini. Il contient généralement des termes réutilisés, mais ce n’est pas un langage strict, pas plus que l’anglais (sinon, ce serait être un langage de programmation, qui pourrait être analysé et exécuté textuellement)

L’importance du pseudocode est d’étoffer la partie logique du système et de ne pas trop s’inquiéter de la syntaxe au-delà de "cela a du sens"

Cela peut souvent rendre le pseudocode plus compréhensible plus concis et .

Les pseudocodes ne supposent pas non plus que le lecteur comprenne la "syntaxe magique" de la langue afin de la traiter, il lui suffit de comprendre les termes utilisés.

Si vous donniez un algorithme en perl à la personne moyenne, par exemple, la plupart des gens mourraient d’horreur parce qu’ils ne verraient pas au-delà de la chape du bruit de ligne.

Alors que:

sub foo { 
   my @args = @_ ; 
   my( $a, $b )=(@args[0],@args[1]); 
   for( @{ $a } ){
       $b .= 

Vous voudrez peut-être donner un exemple. Si votre code est trop axé sur des spécificités linguistiques qui ne font pas partie de l'algorithme, il est compréhensible que votre non-algorithme ait été mélangé à votre algorithme, ce qui a donné un résultat incorrect.

Je pense que le raisonnement veut que l’objet de l’apprentissage soit de montrer que vous comprenez le concept, de ne pas vous pencher et de cocher toutes les bonnes cases.

On peut apprendre à un ordinateur à passer à l’université, mais on ne peut pas encore apprendre à un ordinateur à penser réellement et à appliquer ses connaissances.

Manger et régurgiter la mentalité est la raison pour laquelle je n’ai jamais obtenu mon diplôme.

En ce qui concerne votre commentaire récent, il est important de comprendre que le pseudocode n’est pas défini. Il contient généralement des termes réutilisés, mais ce n’est pas un langage strict, pas plus que l’anglais (sinon, ce serait être un langage de programmation, qui pourrait être analysé et exécuté textuellement)

L’importance du pseudocode est d’étoffer la partie logique du système et de ne pas trop s’inquiéter de la syntaxe au-delà de "cela a du sens"

Cela peut souvent rendre le pseudocode plus compréhensible plus concis et .

Les pseudocodes ne supposent pas non plus que le lecteur comprenne la "syntaxe magique" de la langue afin de la traiter, il lui suffit de comprendre les termes utilisés.

Si vous donniez un algorithme en perl à la personne moyenne, par exemple, la plupart des gens mourraient d’horreur parce qu’ils ne verraient pas au-delà de la chape du bruit de ligne.

Alors que:

| there is a subroute foo which can take a list of strings, and a default string, 
\-  which then iterates all items in  that list, 
| \-  and for each item in that list 
|     1. appends the contents of that item to the end of the default string
|     2. removes all instances of the string "id" in that item
| 
 \ and returns a list, which contains 
    1. the concatentated default string 
    2. the modified input list 

peut avoir un sens cohérent pour une personne connaissant le langage Perl, pour le lecteur de code moyen, tout ce qu’ils obtiennent est un "que diable as-tu juste dit" réponse. Documenter cela n'aide pas beaucoup non plus.

<*>

Tout à coup, cela devient moins ambigu et un plus grand pourcentage de peuples peut le comprendre.

La moitié de l’exercice d’écriture de l’algorithme est donc probablement un exercice de type "Vous devez non seulement prouver que vous le comprenez, mais également prouver que vous pouvez expliquer votre raisonnement à d’autres qui ne connaissent pas le problème". , qui est une capacité vitale dont vous avez besoin. Si vous ne pouvez pas communiquer ce que vous avez fait, personne ne peut l'utiliser.

il y a aussi ce vilain petit problème de code, qui n'existe pas dans un algorithme, c'est-à-dire que le code peut avoir l'air correct, mais peut ne pas faire ce que vous pensez si, et s'il ne le fait pas correctement, et vous ne vous en rendez pas compte, les personnes qui lisent le code reverse engineering l'encrassent et copient un algorithme en panne . pas bon. l'algorithme sous forme humaine traduit mieux 'c'est ce que je veux qu'il fasse'

; s/id//g; } return [$b,$a]; }

peut avoir un sens cohérent pour une personne connaissant le langage Perl, pour le lecteur de code moyen, tout ce qu’ils obtiennent est un "que diable as-tu juste dit" réponse. Documenter cela n'aide pas beaucoup non plus.

<*>

Tout à coup, cela devient moins ambigu et un plus grand pourcentage de peuples peut le comprendre.

La moitié de l’exercice d’écriture de l’algorithme est donc probablement un exercice de type "Vous devez non seulement prouver que vous le comprenez, mais également prouver que vous pouvez expliquer votre raisonnement à d’autres qui ne connaissent pas le problème". , qui est une capacité vitale dont vous avez besoin. Si vous ne pouvez pas communiquer ce que vous avez fait, personne ne peut l'utiliser.

il y a aussi ce vilain petit problème de code, qui n'existe pas dans un algorithme, c'est-à-dire que le code peut avoir l'air correct, mais peut ne pas faire ce que vous pensez si, et s'il ne le fait pas correctement, et vous ne vous en rendez pas compte, les personnes qui lisent le code reverse engineering l'encrassent et copient un algorithme en panne . pas bon. l'algorithme sous forme humaine traduit mieux 'c'est ce que je veux qu'il fasse'

Autres conseils

Dans ce cas, vous devez vous en remettre au professeur.

Vous devez fournir plus d'informations. On vous a demandé un algorithme, mais le code fourni. Avez-vous commenté le code? Combien? (J'aimerais voir la question et votre réponse, mais c'est peut-être trop demander.)

Je vais donc répondre en fonction de ma propre expérience. Si je demande un algorithme, alors je veux quelque chose qui explique, dans un anglais correct, comment résoudre le problème et / ou répondre aux exigences de la question. Les diagrammes sont également bons (parfois meilleurs). Paragraphe, forme de point, peu importe - cela doit simplement être clair, concis et correct.

Si vous me fournissez un code qui réponde à ce qui précède, alors le maximum de points. Toutefois, si vous fournissez du code pur "langage". et plutôt cryptique, les marques seront perdues - plus ou moins en fonction de la cryptographie du code. Même avec du code, j'aimerais aussi voir un diagramme, juste pour montrer une compréhension complète des concepts.

Une des choses les plus difficiles à laquelle je suis confronté lors de l’enseignement de programmes est d’amener les étudiants à écrire plus, pas moins. Parfois, j'ai dû leur rappeler qu'une cession (ou un examen) n'était pas une entrée dans le "concours de code le plus obscurci". ; -)

A bientôt,

-R

En tant que correcteur pour un cours sur les algorithmes avancés, je voudrais toujours prendre des points s’il existe simplement une solution codée.

Certaines choses ne peuvent tout simplement pas être exprimées aussi éloquemment dans le code qu’en anglais. Le pseudo-code est une tentative pour se libérer de la syntaxe stricte du compilateur et permettre une certaine expressivité. C'est un pas dans la bonne direction en matière de compréhensibilité, mais pas toujours suffisant.

Surtout dans une classe d'algorithmes, il est toujours important de fournir une preuve de correction (que ce soit par induction, contradiction, etc.), ainsi qu'une notation big-O pour la complexité spatio-temporelle de votre algorithme. .

Tout ce que je sais, c’est que vous ne devriez écrire aucun code avant d’avoir un algorithme.

Le problème avec l’utilisation du code au lieu du pseudocode est que, théoriquement, on pourrait supposer qu’il s’agissait d’un code et non d’un pseudocode. Quoi qu'il en soit, l'enseignant vous note pour votre réponse, pas pour votre connaissance - vous feriez mieux de répondre à ce qui vous a été demandé, dans les termes que vous aimez. Oui, nous savons tous, vous savez mieux. Mais ce n'est jamais un mauvais exercice que d'essayer de raisonner le comportement d'une autre personne, vous savez. Et au moins dans mon pays, l’enseignant a le droit de vous évaluer librement, alors ... s’entendre avec lui!

Parlez à votre professeur et demandez-lui pourquoi vous vous êtes trompé de question. Demandez-lui quelle serait la bonne réponse et quelle est la différence fondamentale entre les deux.

Se pourrait-il que l'algorithme que vous avez écrit ne soit pas correct?

Code est un algorithme écrit pour qu'une machine puisse l'exécuter. Rien dans cette définition ne dit que ce n'est pas aussi écrit pour être compris par un humain. L'écriture en Java a-t-elle obscurci votre algorithme? Cela déterminerait si je suis d’accord avec votre professeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top