Считается ли написание кода по-прежнему алгоритмическим представлением?[закрыто]

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Я только что потерял 50% своего ответа на тесте, потому что написал код вместо алгоритма на промежуточном экзамене, что перевело меня с пятерки на четверку.Считается ли написание кода по-прежнему алгоритмическим представлением?

Википедия:Представление алгоритма (поскольку стиль программирования в значительной степени основан на консенсусе)

Редактировать:Хорошо, итак, позвольте мне прояснить несколько моментов:

  1. Тест запрашивал псевдокод, который мы на самом деле никогда не "определяли" в классе;мы только что написали английский язык для наших алгоритмов.

  2. Это класс Java, и он записал все решение в Java-методе вместе с комментариями.Все это было написано от руки, и на написание ушло больше времени, чем на псевдокод.Я думал, так будет понятнее.

  3. Обычно я бы не стал поднимать вопрос о таких вещах, но в этом разница между пятеркой и тройкой, а на экзаменах мне полагается стипендия.

  4. Наконец, я пишу этот пост по двум причинам:

    4.1 Я хочу показать, что современное сообщество программистов думает о псевдокоде и алгоритмическом представлении.

    4.2 Я хочу знать, что приемлемо в "реальном мире".;Я программирую уже некоторое время, но я хочу вскоре иметь возможность вносить свой вклад в проекты с открытым исходным кодом, и я не хочу никому наступать на пятки.(Хотя я почти уверен, что у этой темы мало шансов всплыть в реальном мире).

Еще раз спасибо за любую помощь / совет.

Это было полезно?

Решение

Вы можете привести пример. Если в вашем коде слишком много внимания уделяется специфике языка, которая не является частью алгоритма, то понятно, что можно сказать, что ваш алгоритм смешан с неалгоритмом, что приводит к неверному результату.

Я чувствую обоснованность, весь смысл обучения состоит в том, чтобы показать вам, что вы понимаете концепцию, а не наклоняться и ставить галочки во всех нужных клетках.

Компьютер может быть обучен для поступления в университет, но компьютер пока не может научиться думать самостоятельно и применять знания.

Еда и регургитация - вот почему я никогда не закончил. <Ч>

Что касается вашего последнего комментария, важно понимать, что псевдокод не определен. В нем, как правило, используются повторно используемые термины, но он не является строгим языком, так же как и английский (в противном случае это был бы будет язык программирования, который можно дословно анализировать и выполнять)

Важность псевдокода состоит в том, чтобы конкретизировать часть логики системы и не беспокоиться о синтаксисе сверх «это имеет смысл»

Зачастую это может сделать псевдокод более понятным и кратким и .

Псевдокод также не полагается на то, что читатель понимает «магический синтаксис» в языке для его обработки, все, что ему нужно понять, - это используемые термины.

Если бы вы давали обычному человеку алгоритм на Perl, например, большинство людей просто умерли бы от ужаса, потому что они не видят сквозь стяжки линейного шума.

Пока:

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

Вы можете привести пример. Если в вашем коде слишком много внимания уделяется специфике языка, которая не является частью алгоритма, то понятно, что можно сказать, что ваш алгоритм смешан с неалгоритмом, что приводит к неверному результату.

Я чувствую обоснованность, весь смысл обучения состоит в том, чтобы показать вам, что вы понимаете концепцию, а не наклоняться и ставить галочки во всех нужных клетках.

Компьютер может быть обучен для поступления в университет, но компьютер пока не может научиться думать самостоятельно и применять знания.

Еда и регургитация - вот почему я никогда не закончил. <Ч>

Что касается вашего последнего комментария, важно понимать, что псевдокод не определен. В нем, как правило, используются повторно используемые термины, но он не является строгим языком, так же как и английский (в противном случае это был бы будет язык программирования, который можно дословно анализировать и выполнять)

Важность псевдокода состоит в том, чтобы конкретизировать часть логики системы и не беспокоиться о синтаксисе сверх «это имеет смысл»

Зачастую это может сделать псевдокод более понятным и кратким и .

Псевдокод также не полагается на то, что читатель понимает «магический синтаксис» в языке для его обработки, все, что ему нужно понять, - это используемые термины.

Если бы вы давали обычному человеку алгоритм на Perl, например, большинство людей просто умерли бы от ужаса, потому что они не видят сквозь стяжки линейного шума.

Пока:

| 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 

может внушить кому-то, кто разбирается в perl, какой-то связный смысл, для обычного читателя кода все, что он получает, - это "что, черт возьми, вы только что сказали" ответ. Документирование этого также не очень помогает. <*>

Внезапно это становится менее двусмысленным, и больший процент людей может понять это.

Так что, возможно, половина упражнения по написанию алгоритма - это упражнение в "Не только вы должны доказать, что понимаете его, вы также должны доказать, что можете объяснить свои рассуждения тем, кто ничего не знает о проблеме" " , которая является жизненно важной способностью, которая вам нужна. Если вы не можете сообщить, что вы сделали, никто не может использовать это.

есть также эта неприятная небольшая проблема с кодом, которого нет в алгоритме, и этот код может выглядеть правильно, но может не выполнять то, что вы думаете он делает, и если он не делает это правильно, и вы не понимаете, что люди, читающие реверс-инжиниринг кода, запутаются и скопируют алгоритм неработающий . нехорошо. алгоритм в человеческой форме лучше переводит «это то, что я хочу делать»

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

может внушить кому-то, кто разбирается в perl, какой-то связный смысл, для обычного читателя кода все, что он получает, - это "что, черт возьми, вы только что сказали" ответ. Документирование этого также не очень помогает. <*>

Внезапно это становится менее двусмысленным, и больший процент людей может понять это.

Так что, возможно, половина упражнения по написанию алгоритма - это упражнение в "Не только вы должны доказать, что понимаете его, вы также должны доказать, что можете объяснить свои рассуждения тем, кто ничего не знает о проблеме" " , которая является жизненно важной способностью, которая вам нужна. Если вы не можете сообщить, что вы сделали, никто не может использовать это.

есть также эта неприятная небольшая проблема с кодом, которого нет в алгоритме, и этот код может выглядеть правильно, но может не выполнять то, что вы думаете он делает, и если он не делает это правильно, и вы не понимаете, что люди, читающие реверс-инжиниринг кода, запутаются и скопируют алгоритм неработающий . нехорошо. алгоритм в человеческой форме лучше переводит «это то, что я хочу делать»

Другие советы

В этом случае вы должны обратиться к профессору.

Вам необходимо предоставить больше информации.Вас попросили указать алгоритм, но вы предоставили код.Вы прокомментировали код?Сколько?(Я хотел бы увидеть вопрос и ваш ответ, но, возможно, это требует слишком многого).

Поэтому я отвечу, основываясь на своем собственном опыте.Если я прошу предоставить алгоритм, то мне нужно что-то, что объясняет на приличном английском языке, как решить проблему и / или соответствовать требованиям вопроса.Диаграммы тоже хороши (иногда лучше).Абзац, форма пункта, что угодно - все просто должно быть ясным, кратким и правильным.

Если вы предоставите мне код, который выполняет описанное выше, то ставьте полные оценки.Однако, если вы предоставите код, который является чистым "языком" и довольно загадочным, то метки будут потеряны - более или менее, в зависимости от того, насколько загадочным на самом деле является код.Даже с кодом я бы хотел также увидеть диаграмму, просто чтобы показать полное понимание концепций.

Одна из самых сложных вещей, с которыми я сталкиваюсь при преподавании программирования, заключается в том, чтобы заставить студентов писать БОЛЬШЕ, а не меньше.Иногда мне приходилось напоминать им, что задание (или экзамен) - это не участие в конкурсе "самый запутанный код".;-)

Ваше здоровье,

Как грейдер для курса продвинутых алгоритмов, я бы всегда снимал очки, если есть просто закодированное решение.

Некоторые вещи просто невозможно выразить в коде так же красноречиво, как в английском. Псевдокод - это попытка освободиться от строгого синтаксиса компилятора и дать некоторую выразительность. Это шаг в правильном направлении понятности, но не всегда достаточно.

Особенно в классе алгоритмов, всегда важно предоставить доказательство правильности (будь то по индукции, противоречия и т. д.), а также нотацию big-O для пространственной и временной сложности вашего алгоритма. .

Все, что я знаю, это то, что вы не должны писать код до тех пор, пока у вас нет алгоритма.

Проблема с использованием кода вместо псевдокода заключается в том, что, теоретически, можно предположить, что это был код, а не псевдокод. В любом случае, учитель оценивает вас за ваш ответ, а не за ваши знания - вам лучше ответить на то, о чем вас просили, в терминах, которые нравятся учителю. Да, мы все знаем, вы знаете лучше. Знаете, это никогда не плохое упражнение, чтобы попытаться найти способ другого человека. И, по крайней мере, в моей стране учитель имеет право свободно оценивать тебя, так что ... ладить с ним!

Просто поговори со своим профессором и спроси его, почему ты неправильно понял вопрос. Спросите его, каким будет правильный ответ, и в чем принципиальная разница между ними.

Может ли быть так, что алгоритм, который вы написали, был неверным?

Код - это алгоритм, написанный для того, чтобы машина могла его выполнить. В этом определении нет ничего, что говорит о том, что оно не написано для понимания человеком. Неужели письмо на Java затеняет ваш алгоритм? Это определит, согласен ли я с вашим учителем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top