Этапы решения задач на компьютере

Этапы решения задач на компьютере представляют собой следующую последовательность:

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

2. Формальное построение модели задачи. На этом этапе составляется формальная модель решения задачи, например, модель базы данных, адекватная оригиналу, модель объектов и потоков информации. Для нашей задачи мы определили, что периметр треугольника вычислим, если будем знать длины его сторон, а длины сторон определяются по координатам вершин треугольника.

3. Построение математической модели решения задачи. Этот этап иначе называют формализацией задачи, на котором описательная модель записывается с помощью какого-либо формального языка, например, математического. В решаемой задаче для вычисления периметра используем формулу Р=AB+BC+AC, а для вычисления длины одной стороны формулу Этапы решения задач на компьютере - student2.ru .

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

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

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

Возможны программные ошибки трех видов:

· синтаксические (ошибки в правилах языка);

· алгоритмические (ошибки в логике программы);

· ошибки времени исполнения, возникающие в процессе работы запущенной программы.

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

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

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

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

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

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

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

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

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

Эволюция и классификация языков программирования. Основные понятия языков программирования

Алгоритм – это точно определенное описание способа решения задачи в виде конечной последовательности действий. Иначе говоря, это описание является формальным

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

Языки программирования - этоискусственные языки. Они отличаются от естественных ограниченным, достаточно малым числом слов, значение которых понятно компьютеру (транслятору), и строгими правилами записи команд (операторов). Совокупность требований для записи команд образуют синтаксис языка, а смысл каждой команды – семантику языка.

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

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

Языки программирования принято делить на пять поколений. В первое поколение входят языки, созданные в начале 50-х годов XX века. Это были первые языки ассемблера, созданные по принципу " одна инструкция – одна строка".

Расцвет второго поколения языков программирования пришелся на конец 50-х – начало 60-х годов. Тогда был разработан символический ассемблер, в котором появилось понятие переменной. Он стал первым полноценным языком программирования. Благодаря его возникновению заметно возросли скорость разработки и надежность программ.

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

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

Рождение языков пятого поколения произошло в середине 90-х годов. К ним относятся также системы автоматического создания прикладных программ с помощью визуальных средств разработки, без знания программирования. Главная идея, которая закладываемая в эти языки,- возможность автоматического формирования результирующего текста на универсальных языках программирования (который потом требуется откомпилировать). Инструкции же вводятся в компьютер в максимально наглядном виде с помощью методов, наиболее удобных для человека, не знакомого с программированием.

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

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

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

Компилировать означает проводить трансляцию программы с проблемно-ориентированного языка на машинно-ориентированный язык (создание объектного кода) для ее исполнения. Компиляция в программировании – преобразование программы, представленной на одном из языков программирования, в коды на машинно-ориентированном языке, которые принимаются и исполняются непосредственно процессором. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика. Входной информацией для компилятора является описание алгоритма или программа на языке программирования. На выходе компилятора находится эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код). Программа уже переведена в машинные инструкции, однако еще не полностью готова к выполнению. В объектном файле имеются ссылки на различные системные функции. Даже если в программе явно не упомянута ни одна функция, необходим, по крайней мере, один вызов системной функции – завершение программы и освобождение всех принадлежащих ей ресурсов.

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

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

Интерпретация программ – процесс непосредственного покомандного выполнения программы без предварительной компиляции, "на лету". Интерпретатор анализирует и тут же выполняет программу покомандно, по мере поступления ее исходного кода на вход интерпретатора. Алгоритм работы простого интерпретатора таков:

1. прочитать инструкцию;

2. проанализировать инструкцию и определить соответствующие действия;

3. выполнить соответствующие действия;

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

Интерпретация связана с получением переменными значений в процессе работы программы.

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

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

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

Языки программирования
Процедурные
Объектно-ориентированные
Декларативные
Операционные
Структурные
Объектные
Визуальные
Функциональные
Логические

Рис. 14. Классификация языков программирования

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

Различают следующие основные языки процедурного программирования:

· Фортран – создан в начале 50-х годов 20-го века для программирования научно-технических задач;

· Кобол – создан в конце 60-х годов 20-го века для решения задач обработки больших объемов данных, хранящихся на различных носителях данных;

· Алгол (1960 год) –многоцелевой расширенный язык программирования. В нем впервые введены понятия "блочная структура программы" и "динамическое распределение памяти".

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

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

В 1963-1966 гг. был создан многоцелевой универсальный язык PL-1. Этот язык хорошо приспособлен для исследования и планирования вычислительных процессов, моделирования, решения логических задач, разработки систем математического обеспечения.

Язык Паскаль (Pascal, 1968-1971 гг.) - язык процедурного программирования наиболее популярный для персональных компьютеров, который и в настоящее время успешно применяется при обучении программированию. В основу языка Pascal положен подход от общей задачи к частным (более простым и меньшим по объему). К основным принципам, которыми обладает Паскаль, можно отнести:

· Структурное программирование, которое основано на использовании подпрограмм и независимых структур данных;

· Программирование "сверху-вниз", когда задача делится на простые, самостоятельно решаемые задачи. Затем выстраивается решение исходной задачи полностью сверху вниз.

Язык АДА (1979 г.) назван в честь первой программистки Ады Лавлейс - дочери Байрона. Его отличает модульность конструкций.

Язык С (Си, начало 70-х годов) также относится к языкам процедурного программирования. Первоначальный его вариант планировался как язык для реализации операционной системы Unix вместо языка Ассемблера. Одной из особенностей языка Си является то, что различия между выражениями и операторами сглаживаются, что приближает его к функциональным языкам программирования. Кроме того, в языке Си отсутствует понятие процедуры, а использование подпрограмм основано на понятии функции, которая может сочетать в себе возможности процедуры. С одной стороны, по набору управляющих конструкций и структур данных его можно отнести к языкам высокого уровня, а с другой – он имеет набор средств прямого обращения к функциональным узлам компьютера, а это означает, что его можно использовать как операционный язык.

Рассмотрим другие группы языков программирования.

К декларативным языкам программирования относятся функциональные и логические языки.

Функциональное программирование - это способ составления программ, в которых единственным действием является вызов функции. В функциональном программировании не используется оперативная память, как место для хранения данных, а, следовательно, не используются промежуточные переменные, операторы присваивания и циклы. Ключевым понятием в функциональных языках является выражение. Программа, написанная на функциональном языке, представляет собой последовательность описания функций и выражений. Выражение вычисляется сведением сложного к простому. Все выражения записываются в виде списков. Первым функциональным языком стал язык Лисп (LISP, LIST Processing- обработка списков), он создан в 1959 г. Этот язык позволяет обрабатывать большие объемы текстовой информации.

Логическое программирование - это программирование в терминах математической логики. В 1973 году был создан язык искусственного интеллекта Пролог (Prolog, Programming in Logic). Программа на языке Пролог строится из последовательности фактов и правил, затем формулируется утверждение, которое Пролог пытается доказать с помощью правил. Язык сам ищет решение с помощью методов поиска и сопоставления, которые в нем заложены. Логические программы не отличаются высоким быстродействием, так как процесс их выполнения сводится к построению прямых и обратных цепочек рассуждений разнообразными методами поиска.

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

· создание, преобразование и удаление таблиц в БД;

· поиск, отбор, сортировка по запросам пользователя;

· добавление новых записей и модификация существующих, удаление записей и др.

Для обработки больших массивов информации и выборки записей по определенным признакам был создан структурированный язык запросов SQL (Structured Query Language — "язык структурированных запросов"). Язык SQL – это стандартный язык работы с реляционными (состоящими из таблиц) базами данных.

Сегодня в мире ведущие производителями СУБД являются компании Microsoft (SQL Server), IBM (DB2), Oracle, Software AG (Adabas), Informix и Sybase. Практически в каждой СУБД имеется свой встроенный язык работы с БД, являющийся той или иной разновидностью SQL. Так, например, в Oracle имеется встроенный язык PL/SQL, в Informix – INFORMIX 4GL, в Adabas – Natural и т.д.

Языки программирования для компьютерных сетей являются интерпретируемыми. Интерпретаторы для них распространяются бесплатно, а сами программы – в исходных текстах. Такие языки называются также языками написания скриптов.

· Формат HTML (HyperText Markup Language) – универсальный формат разметки гипертекста, используемый для подготовки Web-документов для Интернета. Язык позволяет форматировать текст, добавлять графические образы, работать с таблицами и организовывать связь одного документа с другим с помощью механизма гиперссылок (см. п. 2.3). В отличие от языков программирования и других форматов разметки, HTML довольно "демократичен", синтаксическая ошибка в разметке обычно не приводит к "зависаниям" или каким-либо сообщениям об ошибках, хотя, разумеется, может вызвать неправильное форматирование документа.

· Язык Perl (1980 г.) содержит многочисленные функции работы со строками, массивами, всевозможные средства преобразования данных.

· Язык PHP (1995-1997 гг.) обладает средствами доступа к БД и используется создателями динамических сайтов во всем мире.

· Язык Tcl/Tk (конец 80-х годов) состоит из мощных команд, предназначенных для работы с абстрактными нетипизированными объектами и позволяет создавать программы с графическим интерфейсом.

· Формат VRML (1994 г.) создан для организации виртуальных трехмерных интерфейсов в Интернете.

· Формат XML. С 1996 г. идет работа над созданием универсального языка описания структуры документов. В перспективе XML становится заменой как языка HTML, так и других языков разметки.

К скриптовым можно отнести также объектно-ориентированные языки Java и язык сценариев Javascript, используемые в программировании для Web.

Наши рекомендации