В этой статье мы поговорим об основах информатики и программирования, а это значит, что особое внимание будет уделено алгоритмам. Именно с помощью алгоритмов разработчики и программисты решают поставленные задачи, именно с их помощью работают современные программные модули, именно им уделяют отдельное внимание в школьных классах информатики, именно благодаря им программы выполняют свои функции более эффективно.
О предмете науки программирования
Среди множества классов наук программирование занимает особое место. Ведь с давних пор человеку свойственно описывать некую последовательность действий (маршрут, путь), необходимую для достижения поставленной цели. В одних случаях такие описания исполняются людьми, в других — автоматизированными устройствами. Для людей приемлем текстовый вариант описания, которому присущи такие качества, как неформальность и неопределенность. Простейшим примеров описаний такого класса могут служить банальные кулинарные рецепты. Если же вспомнить о неформальности и неопределенности, то таким примером может быть фраза «добавьте щепотку соли». И в самом деле, лишь человек, причем с опытом, способен понять, сколько именно соли надо добавить в блюдо. Для сравнения скажем, что даже самого мощного класса компьютер или программный модуль не смогут вычислить дозу без дополнительных данных о взаимосвязях и взаимозависимостях относительно того, по какой же формуле или на каком основании высчитывается точное количество «щепотки соли». А человеку это по силам.
Что же объясняет вышеописанный пример? Хотя бы то, что в ситуациях с программными описаниями разработчик обязан прописывать последовательности действий совершенно однозначно, то есть не обойтись без формальной системы обозначений. Таким образом, разработка этих описаний программистом будет сопряжена с определенными принципиальными и техническими сложностями. И эта проблема стала актуальна уже очень давно, когда началось повсеместное распространение ЭВМ — электронных вычислительных машин, ведь именно ЭВМ разных классов (в простонародье — просто компьютеры) широко используются сегодня в роли универсальных исполнителей команд.
Вот мы и подошли к основному термину этого урока — алгоритму. Что же такое алгоритм (algorithm)? Именно этим словом называют описание последовательности каких-нибудь действий, приводящих к получению нужного результата. Эта последовательность должна быть определена, то есть:
— записана;
— закодирована посредством формальных обозначений.
Когда мы говорим о формальной системе, предназначенной для записи алгоритмов, мы говорим об алгоритмическом языке. Причем непосредственный текст алгоритма называют программой, а процесс создания алгоритма — программированием.
Таким образом, наука программирования (computer science) — это наука, основная функция которой заключается в исследовании свойств алгоритмов, а также в разработке методов построения программ и программных модулей. По применяемым методам и своей функции эту науку иногда называют областью прикладной математики.
По своей сути вышеописанное «определение» алгоритма сформулировано недостаточно точно, однако именно оно распространено более широко. В математике существуют более четкие и технически правильные определения, эквивалентные между собой, причем в большинстве случаев они не так уж и трудны для понимания. Но несмотря на это, они требуют знания некоторых математических областей, а так как наш материал предназначен для начинающих, мы не будем повышать класс его сложности, используя более строгие варианты изложения термина Algorithm. Лучше потратить это время на рассмотрение некоторых свойств, ему присущих.
Следует понимать, что в науке весьма характерен подход, связанный с упрощением, когда не до конца четко определенное понятие активно применяют. К примеру, точные определения действительных и натуральных чисел в классах средней школы, как и в классах большинства ВУЗов, попросту не рассматривают. Мало того, есть даже шутливое сравнение, связанное с тем, что если сороконожка задумается, в каком порядке она переставляет ноги, она может разучиться ходить.
Свойства алгоритма
Алгоритм обладает рядом присущих ему свойств. Рассмотрим основные из них:
1. Конечность. После выполнения конечного количества шагов, алгоритм должен заканчивать свою работу. Это первое, что важно отметить.
2. Определенность. Тоже очень важное свойство. Необходимые к выполнению действия должны быть строго определены, ясны и понятны, противоречия не допускаются. Чтобы это обеспечить, современные разработчики записывают алгоритмические последовательности, используя разнообразные языки программирования, где каждый символ (оператор, функция, выражение, утверждение) имеют точный смысл, то есть мы говорим о формальной системе обозначений, которую невозможно истолковать двусмысленно. Сегодня существуют тысячи языков программирования разных видов и классов сложности, причем очень активно используются лишь десятки.
Такое огромное количество языков связано со следующими факторами:
— разнообразие сфер применения;
— наличие различий в программной аппаратуре и оборудовании;
— разный уровень подготовленности технических специалистов, пишущих программные приложения;
— существование разных методологий и концепций написания программ (разные парадигмы программирования ).
3. Наличие входа (input). У алгоритма любого класса должны быть входные данные (даже если они равны нулю), то есть разговор идет про некоторые величины, передаваемые алгоритму непосредственно до начала его работы.
4. Наличие выхода (output). Функция алгоритма заключается в получении результата, который обычно выражается в получении неких выходных данных, к примеру, числовых значений. Если таковых данных нет, алгоритм на практике бесполезен.
5. Эффективность. Работа алгоритмической последовательности должна быть не просто полезна, но и эффективна. Что это значит на практике? К примеру, операции должны быть относительно просты и выполняться за конечное время, причем значение этого времени не должно быть слишком большим. Тут уместно вспомнить понятия временной и емкостной эффективности. Про временную эффективность мы уже сказали (чем выше класс быстродействия алгоритма, тем лучше). Под емкостной эффективностью понимают объем памяти, требуемый для выполнения алгоритма (это уже вопрос нагрузки на ресурсы компьютера).
На этом все, если хотите получить действительно продвинутые знания по алгоритмам и структурам данных, сделать это можно на нашем курсе:
По материалам статьи «Основы информатики и программирования» — https://intuit.ru/studies/courses/105/105/lecture/3059.