Компьютерная реализация работы данного алгоритма или программы с помощью компьютера

Обновлено: 20.11.2024

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

Функции «инкапсулируют» задачу (они объединяют множество инструкций в одну строку кода). Большинство языков программирования предоставляют множество встроенных функций, для выполнения которых в противном случае потребовалось бы много шагов, например, вычисление квадратного корня из числа. В общем, нас не волнует, как функция делает то, что она делает, важно только то, что она "делает это"!

Когда функция "вызывается", программа "покидает" текущий участок кода и начинает выполнять первую строку внутри функции. Таким образом, функция «поток управления»:

  1. Программа переходит к строке кода, содержащей «вызов функции».
  2. Программа входит в функцию (начинается с первой строки кода функции).
  3. Все инструкции внутри функции выполняются сверху вниз.
  4. Программа покидает функцию и возвращается к тому месту, откуда она началась.
  5. Все данные, вычисленные и ВОЗВРАЩЕННЫЕ функцией, используются вместо функции в исходной строке кода.

Зачем мы пишем функции?

Они позволяют нам представить нашу программу как набор подэтапов. (Каждый подшаг может быть отдельной функцией. Если какая-то программа кажется слишком сложной, просто разбейте всю программу на подшаги!)

Они позволяют нам повторно использовать код, а не переписывать его.

Функции позволяют нам поддерживать чистоту пространства имен переменных (локальные переменные "живут" только до тех пор, пока существует функция). Другими словами, функция_1 может использовать переменную с именем i, а функция_2 также может использовать переменную с именем i, и путаницы не будет. Каждая переменная i существует только тогда, когда компьютер выполняет данную функцию.

Функции позволяют нам тестировать небольшие части нашей программы отдельно от остальных. Это особенно верно для интерпретируемых языков, таких как Matlab, но может быть полезно в C, Java, ActionScript и т. д.

Этапы написания функции

  1. Понять назначение функции.
  2. Определить данные, поступающие в функцию от вызывающего объекта (в виде параметров)!
  3. Определите, какие переменные данных необходимы внутри функции для достижения ее цели.
  4. Определите набор шагов, которые программа будет использовать для достижения этой цели. (Алгоритм)

Части «черного ящика» (т. е. функция)

Функции можно назвать «черными ящиками», потому что нам не нужно знать, как они работают. Только то, что должно войти в них и что должно выйти из них.

Определяя программу как черный ящик, мы должны описать следующие атрибуты функции.

Примечание: большинство систем документации — это просто атрибуты функции без связанного с ней кода.

Имя — описывает назначение функции. Обычно это глагол или фраза, например "compute_Average" или просто "average".

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

Расчет — зависит от каждой функции

Выходные данные. Обычно одно (иногда ноль, а иногда и несколько) значений, которые вычисляются внутри функции и "возвращаются" через выходные переменные.

Рабочее пространство функции

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

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

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

Кроме того, функция может «видеть» только ту информацию, которая «передается» ей через параметры. Таким образом, единственный способ, которым информация может попасть в функцию, — это использование параметров.

Примечание. В некоторых объектно-ориентированных языках (например, C++, Java, ActionScript) функция также может видеть все переменные, связанные с содержащим ее объектом.

Формальные и фактические параметры

Когда мы создаем функцию, она должна представлять собой "общее" действие, которое можно применять во многих случаях.Например, если мы хотим найти среднюю оценку, не имеет значения, за тест ли это, или за викторину, или за задание, или за промежуточный экзамен и т. д., учитывая любой список оценок, мы можем вычислить среднее значение!

<р>. но если это может быть любой список оценок, то как мы узнаем, как он будет называться? Ответ: нам все равно. Вы, программист функции, предоставляете собственное имя для данных. Это почти то же самое, как когда продавец звонит вам и читает сценарий, пытаясь вам что-то продать, он говорит: Уважаемый _вставьте здесь имя клиента_, позвольте мне продать вам наш замечательный продукт.

При написании функции программист должен предусмотреть пробел, чтобы вставить любые данные, представляющие текущий интерес; бланк должен иметь хорошее символическое имя, говорящее о том, что он будет представлять. Вот пример функции псевдокода:

Внутри функции medium_grade имя list_of_grades будет использоваться вместо любой переменной, в которой другой пользователь сохранил свои оценки. Таким образом, чтобы вызвать функцию, я мог бы написать:

В "Моем" коде оценки хранятся в переменной "midterm_grades". Внутри функции оценки хранятся в переменной «list_of_grades». Таким образом, во время выполнения программы оба имени будут относиться к одному и тому же объекту, но в разное время.

Параметр list_of_grades называется формальным параметром; опять же, это просто означает имя-заполнитель для любого возможного набора оценок.

Переменная midterm_grades является фактическим параметром. Это означает «то, что фактически используется» для этого вызова функции, например [90, 100, 70];

Вложенные функции?

Часто возникает вопрос: можем ли мы вложить функции (можно ли разместить код одной функции внутри другой функции)? Ответ однозначный: НЕТ!

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

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

Программисты обычно имеют дело с проблемами, алгоритмами и компьютерными программами. Это три разных понятия.

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

Задачи можно рассматривать как функции в математическом смысле. Функция — это соответствие между входными данными (домен) и выходными данными (диапазон). Входными данными для функции может быть одно значение или набор информации. Значения, составляющие вход, называются параметрами функции. Конкретный набор значений параметров называется экземпляром задачи. Например, входным параметром функции сортировки может быть массив целых чисел. Конкретный массив целых чисел с заданным размером и конкретными значениями для каждой позиции в массиве будет примером проблемы сортировки. Разные экземпляры могут генерировать один и тот же вывод. Однако любой экземпляр проблемы должен всегда приводить к одному и тому же результату каждый раз, когда функция вычисляется с использованием этого конкретного ввода.

Это представление о том, что все задачи ведут себя как математические функции, может не соответствовать вашему интуитивному пониманию поведения компьютерных программ. Возможно, вы знаете программы, которым вы можете дать одно и то же входное значение в двух разных случаях, и в результате получится два разных вывода. Например, если вы введете дату в обычное приглашение командной строки Linux, вы получите текущую дату. Естественно, в разные дни дата будет разной, даже если дана одна и та же команда. Однако очевидно, что входные данные для программы даты — это нечто большее, чем команда, которую вы вводите для запуска программы. Программа date вычисляет функцию. Другими словами, в любой конкретный день правильно работающая программа даты может вернуть только один ответ на полностью указанный вход. Для всех компьютерных программ выходные данные полностью определяются полным набором входных данных программы. Даже «генератор случайных чисел» полностью определяется своими входными данными (хотя некоторые системы генерации случайных чисел, похоже, обходят это, принимая случайные входные данные от физического процесса, неподконтрольного пользователю). Ограничения на то, какие функции могут быть реализованы программами, являются частью области вычислимости.

8. 2.1.2. Алгоритмы¶

Алгоритм — это метод или процесс, которому следует следовать для решения проблемы. Если проблема рассматривается как функция, то алгоритм представляет собой реализацию функции, которая преобразует входные данные в соответствующие выходные данные. Задача может быть решена с помощью множества различных алгоритмов. Данный алгоритм решает только одну задачу (т. е. вычисляет конкретную функцию). Модули OpenDSA охватывают множество проблем, и для некоторых из этих проблем мы увидим более одного алгоритма. Для решения важной задачи сортировки существует более дюжины общеизвестных алгоритмов!

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

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

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

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

Он должен состоять из конечного количества шагов. Если бы описание алгоритма состояло из бесконечного числа шагов, мы бы никогда не смогли ни записать его, ни реализовать в виде компьютерной программы. Большинство языков описания алгоритмов (включая английский и «псевдокод») предоставляют способ выполнения повторяющихся действий, известный как итерация. Примеры итерации в языках программирования включают конструкции цикла while и for. Итерация позволяет использовать краткие описания, при этом количество фактически выполненных шагов контролируется входными данными.

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

8. 2.1.3. Программы¶

Мы часто думаем о компьютерной программе как об экземпляре или конкретном представлении алгоритма на каком-либо языке программирования. Алгоритмы обычно представляются в виде программ или частей программ. Естественно, существует множество программ, являющихся экземплярами одного и того же алгоритма, потому что любой современный язык программирования можно использовать для реализации одного и того же набора алгоритмов (хотя некоторые языки программирования могут облегчить жизнь программисту). Чтобы упростить изложение, люди часто используют термины «алгоритм» и «программа» как синонимы, несмотря на то, что на самом деле это разные понятия. По определению, алгоритм должен содержать достаточно деталей, чтобы при необходимости его можно было преобразовать в программу.

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

8. 2.1.4. Резюме¶

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

Многие студенты путаются, когда понимают понятие временной сложности, но в этой статье мы объясним это на очень простом примере:
Представьте себе класс из 100 студентов, в котором вы дали ручку одна персона. Теперь тебе нужна эта ручка. Вот несколько способов найти ручку и порядок O.
O(n 2 ): Вы идете и спрашиваете первого человека в классе, есть ли у него ручка.Кроме того, вы спрашиваете этого человека о других 99 людях в классе, есть ли у них эта ручка и т. д.
Это то, что мы называем O(n 2 ).
O(n): Спросить каждого ученика по отдельности — это O(N).
O(log n): Теперь я делю класс на две группы и спрашиваю: «Это левая или правая сторона класса?» Затем я беру эту группу, делю ее на две части и спрашиваю снова, и так далее. Повторяйте процесс, пока у вас не останется один ученик, у которого есть ваша ручка. Это то, что вы подразумеваете под O (log n).
Мне может понадобиться выполнить поиск O(n 2 ), если только один ученик знает, у какого ученика спрятана ручка. Я бы использовал O(n), если бы у одного ученика была ручка, и только они знали бы это. Я бы использовал поиск O(log n), если бы все студенты знали, но сказал бы мне, только если бы я угадал правильную сторону.

ПРИМЕЧАНИЕ. Нас интересует скорость роста времени по отношению к входным данным, полученным во время выполнения программы.

Другой пример:
Время. Сложность алгоритма/кода равна не фактическому времени, необходимому для выполнения определенного кода, а количеству раз, которое выполняется оператор. Мы можем доказать это, используя команду времени. Например, напишите код на C/C++ или любом другом языке, чтобы найти максимум между N числами, где N варьируется от 10, 100, 1000, 10000. И скомпилируйте этот код в операционной системе на базе Linux (Fedora или Ubuntu) с помощью следующей команды:

Вы получите удивительные результаты, например, для N = 10 вы можете получить время 0,5 мс, а для N = 10 000 вы можете получить время 0,2 мс. Кроме того, вы получите разные тайминги на разных машинах. Таким образом, мы можем сказать, что фактическое время, необходимое для выполнения кода, зависит от машины (используете ли вы Pentium1 или Pentium5), а также учитывает нагрузку на сеть, если ваша машина находится в локальной/глобальной сети. Даже вы не получите одинаковые тайминги на одной и той же машине для одного и того же кода, причина тому текущая нагрузка на сеть.
Теперь возникает вопрос, если сложность времени не является фактическим временем, требующим выполнения кода, тогда что это такое?

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

Узнайте все о курсе и экзамене. Уже зачислен? Присоединяйтесь к своему курсу в My AP.

Не студент?

Перейдите на AP Central, чтобы получить ресурсы для учителей, администраторов и координаторов.

AP Computer Science A

О курсе

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

Навыки, которым вы научитесь

Проектирование программы, разработка необходимых алгоритмов и написание кода для их реализации

Тестирование программного кода и исправление ошибок

Документирование и объяснение того, как работает программный код

Эквивалентность и предпосылки

Эквивалент курса колледжа

Вводный семестровый курс компьютерных наук в колледже

Рекомендуемые условия

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

Дата экзамена

Среда, 4 мая 2022 г.,
12:00 по местному времени

Экзамен AP по информатике

Это обычная дата экзамена AP Computer Science A.

Об объектах

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

Содержание курса

Модуль 1: Примитивные типы

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

Темы могут включать:

  • Примитивные типы данных, включая int , double и Boolean
  • Вычисление арифметических выражений в программном коде
  • Использование операторов присваивания для получения значения
  • Как переменные и операторы упорядочиваются и комбинируются в выражении для получения результата

На экзамене

2,5 – 5 % от экзаменационного балла

Модуль 2: Использование объектов

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

Темы могут включать:

  • Объекты и классы как способы описания экземпляров, атрибутов и поведения
  • Создание объектов путем вызова конструкторов с параметрами и без них
  • Использование библиотек классов, включая Integer и Double.
  • Определение поведения объекта с помощью методов, в том числе статических и математических классов
  • Вызов нестатических методов void с параметрами и без них
  • Использование объектов и методов String
  • Использование интерфейсов прикладных программ (API) и библиотек

На экзамене

5–7,5 % от экзаменационного балла

Модуль 3. Логические выражения и операторы if

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

Темы могут включать:

  • Поиск логических значений с помощью выражений, включающих операторы отношения
  • Использование условных операторов для выполнения различных операторов на основе входных значений
  • Использование условных операторов для создания нескольких возможных результатов.
  • Создание одного и того же значения с использованием эквивалентных логических выражений
  • Ссылки на объекты с помощью псевдонимов

На экзамене

15–17,5 % от экзаменационного балла

Модуль 4: Итерация

Вы узнаете об итерации — еще одном строительном блоке алгоритмов, предназначенных для повторения.

Темы могут включать:

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

На экзамене

17,5–22,5 % от экзаменационного балла

Модуль 5: Написание курсов

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

Темы могут включать:

  • Состав класса, включая атрибуты, являющиеся общедоступными или закрытыми
  • Установка атрибутов объекта с помощью конструкторов
  • Использование комментариев для описания функциональности кода
  • Определение поведения объекта с использованием методов non-void, void и static
  • Где переменные могут использоваться в программном коде
  • Разбиение проблемы на более мелкие части путем создания методов для решения отдельных подзадач.
  • Интеллектуальная собственность и этические аспекты программирования

На экзамене

5–7,5 % от экзаменационного балла

Модуль 6: Массив

Вы изучите методы и стандартные алгоритмы работы с наборами связанных данных, известных как структуры данных.

Темы могут включать:

  • Представление нескольких связанных элементов в виде объектов-массивов
  • Обход массива путем доступа к элементам с помощью операторов итерации
  • Стандартные алгоритмы, использующие обход массива для выполнения функций.

На экзамене

10–15 % от экзаменационного балла

Модуль 7: ArrayList

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

Темы могут включать:

  • Представление коллекций связанных данных ссылок на объекты с помощью объектов ArrayList
  • Обход ArrayList путем доступа к элементам с помощью операторов итерации
  • Стандартные алгоритмы, использующие обходы ArrayList для выполнения функций.
  • Поиск и сортировка с использованием стандартных алгоритмов
  • Этические вопросы сбора данных

На экзамене

2,5–7,5 % от экзаменационного балла

Модуль 8: 2D-массив

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

Темы могут включать:

  • Представление наборов данных в виде массивов массивов или двумерных массивов.
  • Обход двумерного массива путем доступа к элементам с помощью вложенных операторов итерации

На экзамене

7,5–10 % от экзаменационного балла

Модуль 9: Наследование

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

Темы могут включать:

  • Использование общих атрибутов и поведения для группировки существующих объектов в надклассы
  • Определение и переопределение методов внутри подклассов и суперклассов
  • Создание ссылок с использованием иерархии наследования
  • Связывание объектов подклассов с суперклассами для создания полиморфизма

На экзамене

5–10 % от экзаменационного балла

Модуль 10: Рекурсия

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

Темы могут включать:

  • Выполнение рекурсивных методов
  • Поиск и сортировка с использованием алгоритмов бинарного поиска и сортировки слиянием

На экзамене

5–7,5 % от экзаменационного балла

Поиск кредитной политики AP

Найдите колледжи, которые присуждают зачеты и/или зачисляют баллы за экзамен AP на этом и других курсах AP.

Ресурсы курса

Ресурсы класса AP

После того, как вы присоединитесь к онлайн-разделу своего класса AP, вы сможете получить доступ к видео AP Daily, любым заданиям вашего учителя и результатам ваших заданий в AP Classroom. Войдите, чтобы получить к ним доступ.

Требования к лаборатории AP Computer Science A

Узнайте о необходимых лабораторных компонентах, включенных в программу AP Computer Science A, и загрузите руководства для студентов.

AP Computer Science: краткий справочник по Java — экзамен 2020

В кратком справочнике по Java перечислены доступные методы из библиотеки Java, которые могут быть включены в экзамен, начиная с 2019–20 учебного года. Краткий справочник по Java включен в экзаменационный буклет.

ACM (Ассоциация вычислительной техники)

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

  • Перейти к ACM (Ассоциация вычислительной техники)

ACSL (Американская лига компьютерных наук)

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

IEEE – крупнейшая в мире профессиональная техническая организация, занимающаяся развитием технологий на благо человечества.

AP Computer Science A Elevens Lab Руководство для студентов

Эта лабораторная работа связана с простым пасьянсом под названием «Одиннадцать». Вы изучите правила Elevens и сможете играть в нее, используя прилагаемый графический интерфейс пользователя (GUI).

AP Computer Science A Magpie Lab Руководство для студентов

В этом лабораторном занятии вы изучите некоторые основы обработки естественного языка. По мере изучения вы будете работать с различными методами класса String и практиковаться в использовании оператора if. Вы проследите сложный метод поиска слов в пользовательском вводе.

AP Computer Science: руководство для студентов Picture Lab

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

AP Computer Science: курс и описание экзамена

Это основной документ курса. Он четко излагает содержание курса и описывает экзамен и программу AP в целом.

Подробнее о вашем курсе

Подать заявку на стипендию, стажировку и другие возможности

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

Читайте также: