Добавлен: 31.01.2019
Просмотров: 1351
Скачиваний: 6
Свойства алгоритмов:
-
понятность для использования – получив алгоритм исполнитель должен понимать как его выполнить;
-
дискретность – алгоритм должен представлять процесс решения задачи в виде конечного числа законченных действий;
-
определенность алгоритма – алгоритм должен всякий раз приводить к одному и тому же результату при одних и тех же исходных данных;
-
результативность – за конечное число шагов алгоритм должен либо приводить к решению задачи, либо останавливаться из-за невозможности получить решение и выдавать соответствующие сообщения;
-
массовость – алгоритм должен быть разработан для некоторого класса задач, различающихся исходными данными, а не для одной конкретной задачи. Набор исходных данных для которых применяется алгоритм называется областью применения алгоритма.
Используются следующие формы представления алгоритма:
-
словесная – запись на естественном разговорном языке;
-
графическая – действие изображается в виде графических символов, смысл которых заранее оговорен;
-
псевдокоды – условный алгоритмический язык, включающий в себя элементы естественного разговорного языка и элементы языков программирования;
-
программа на алгоритмическом языке программирования – будет использоваться для представления алгоритмической блок-схемы.
Исполнитель алгоритма – некоторая абстрактная или реальная система, способная выполнить действия, предписываемые алгоритмом.В информатике исполнитель алгоритмов – компьютер.
2)ветвления. Обеспечивает в зависимости от рез-та проверки условие выбора одного из альтернативных путей работы алгоритма. При этом оба пути ведут к одному общему выходу – стр-ра ветвления сущ-ет в 4-х вариантах
цикл. Обеспечивает многократное выполнение некоторых совокупных действий, называемых телом цикла.
11. Этапы решения задачи на ЭВМ
23. Этапы решения задачи на компьютере:
-
постановка задачи – сбор информации о задаче; формулировка задачи; определение конечных целей задачи;
-
анализ и исследование задачи и составление модели – анализ существующих аналогов; анализ технических и программных средств, имеющихся в наличии; разработка математической модели; определение формы выдачи результатов; описание обработанных данных;
-
разработка алгоритма – выбор метода проектирования алгоритма; выбор формы записи алгоритма; проектирование алгоритма; выбор тестов и методов тестирования;
-
программирование – выбор языка программирования; уточнения способов организации данных; запись алгоритма в виде программы;
-
тестирование и отладка - синтаксическая; отладка логической структуры; тестовые расчеты и анализ результатов тестирования; совершенствование программ;
-
анализ результатов решения задачи (повторное выполнение со 2 по 5 этапы);
-
сопровождение программы – составление документации к алгоритму, к программе, к набору тестов, к использованию.
12 Классификация языков программирования
Языки различаются по зависимости от аппаратной части.
-
машинофиксированный (ассемблеры): имеют жесткую ориентацию на определенный тип компьютеров. Также называются языки низкого уровня. yt nht,e.n rjvgbkzwbb/
аторитмические: ориентированы на систему операторов, характерных для замен определенного класса алгоритмов; языки высокого уровня
Компилятор – проги, переводящие текст на машинный язык.
Стиль - совокупность правил, лежащих в основе синтаксиса и семантики языка программирования. Различают следующие стили:
-
неструктурный;
-
структурный;
-
логический;
-
объектно-ориентированный;
-
функциональный.
Рассмотрим перечисленные стили подробнее.
Неструктурное программирование допускает использование в явном виде команды безусловного перехода (в большинстве языков GOTO). Типичные представители неструктурных языков - ранние версии Бейсика и Фортрана. Данный стиль вызван особенностями выполнения машиной программы в кодах и унаследован от программ на языке ассемблера, поскольку там команда перехода является обязательной. Однако в языках высокого уровня наличие команды перехода влечет за собой массу серьезных недостатков: программа превращается в "спагетти" с бесконечными переходами вверх-вниз, ее очень трудно сопровождать и модифицировать. Фактически неструктурный стиль программирования не позволяет разрабатывать большие проекты. Ранее широко практиковавшееся первоначальное обучение программированию на базе неструктурного языка (обычно Бейсика) приводило к огромным трудностям при переходе на более современные стили. Как отмечал известный голландский ученый Э. Дейкстра, "программисты, изначально ориентированные на Бейсик, умственно оболванены без надежды на исцеление".
Структурный стиль был разработан в середине 60-х - начале 70-х гг. В его основе лежат две идеи:
задача разбивается на большое число мелких подзадач, каждая из которых решается своей процедурой или функцией (декомпозиция задачи). При этом проектирование программы идет по принципу сверху вниз: сначала определяются необходимые для решения программы модули, их входы и выходы, а затем уже эти модули разрабатываются. Такой подход вместе с локальными именами переменных позволяет разрабатывать проект силами большого числа программистов.
как доказал Э. Дейкстра, любой алгоритм можно реализовать, используя лишь три управляющие конструкции: последовательное выполнение, ветвление и цикл (рисунок 1.1; обратите внимание на обозначения в соответствии с действующим стандартом). Данное обстоятельство позволяет при наличии соответствующих операторов исключить из языка команду перехода GOTO.
а) Последовательное б) Ветвление в) Цикл выполнение
Принципы структурного программирования были реализованы в языке Алгол, но наибольшую популярность завоевал язык Паскаль, созданный в 1970 швейцарским ученым Н. Виртом. Паскаль получил широчайшее распространение и может считаться образцовым языком программирования, наиболее популярным и сейчас (например, в версии Delphi фирмы Imprise).
Логическое программирование представляет собой попытку возложить на программиста только постановку задачи, а поиски путей ее решения предоставить транслятору. Логические языки (Пролог, Симула) имеют специальные конструкции для описания объектов и связей между ними. Например, если дано:
БРАТЬЯ ИМЕЮТ ОДНОГО ОТЦА
ДЖОН - ОТЕЦ ДЖЕКА
МАЙК - БРАТ ДЖЕКА
то система логического программирования должна сделать вывод: ДЖОН - ОТЕЦ МАЙКА.
Хотя работы по логическому программированию ведутся с 50-х гг., в настоящее время данное направление несколько потеряло свою актуальность в связи с отсутствием реальных результатов, поскольку большинство реализованных на принципах логического программирования систем оказались практически непригодными.
Объектно-ориентированное (ОО) программирование, разработанное в середине 70-х гг. Керниганом и Риччи и реализованное в ОО-версиях языков Си и Паскаль, представляет собой отображение объектов реального мира, их свойств (атрибутов) и связей между ними при помощи специальных структур данных. Структурное программирование подразумевает наличие ряда встроенных структур данных: целых, вещественных и строковых переменных, массивов, записей - при помощи которых и производится отображение свойств объектов реального мира. При объектно-ориентированном подходе для объекта создается своя структура данных (класс), содержащая как свойства объекта (поля), так и процедуры для управления объектом (методы).
Например, рассмотрим простейший объект - точку на экране. Она имеет как минимум три поля (координаты и цвет) и методы вроде "ChangeColor" (поменять цвет), "MoveXY" (переместиться в точку х, у) и т.д. Объектно-ориентированный подход является в настоящее время доминирующим и позволяет сократить время разработки и увеличить надежность больших проектов. Однако программы в данном стиле отличаются громоздким синтаксисом; в целом идеология объектно-ориентированного подхода весьма неочевидна часто воспринимается с трудом (особенно это характерно для языка Си, который и в своем первоначальном виде отличается крайне неудобочитаемым синтаксисом) и переход к его использованию труден или невозможен для большого числа программистов.
В основе функционального стиля лежит понятие функции как "черного ящика", имеющего вектор параметров (аргументов) на входе и результат r (скаляр) на выходе:
Допустим случай , т.е. вектор параметров отсутствует. В функциональных языках программирования отсутствуют операторы: все действия, в том числе и управляющие конструкции, выполняются при помощи вызовов функций. Поскольку каждая функция возвращает значение, ее можно подставить в качестве аргумента другой функции, что позволяет записывать сложные выражения в функциональной форме. Одним из первых функциональных языков стал язык Лисп, созданный в конце 50-х гг. как язык искусственного интеллекта.
К языкам искусственного интеллекта (сокращенно обозначается AI - artificial intelligence) относят такие языки, которые способны в зависимости от набора исходных данных модифицировать алгоритм работы, т.е. "на ходу" менять программу (поговорка гласит, что на языках искусственного интеллекта программируют те, кому не хватает интеллекта естественного).
Язык программирования - это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Языки программирования являются искусственными языками, в которых синтаксис и семантика строго определены. Поэтому при применении их по назначению они не допускают свободного толкования выражения, характерного для естественного языка [Толковый,1989].
Программа - это совокупность допустимых операторов конкретного языка программирования.
Программирование , в узком смысле, это запись алгоритма на конкретном языке программирования - языке, "понимаемом" компьютером. Заметим, что довольно часто в литературе можно встретить и другое более широкое определение программирования - это все технические операции, необходимые для создания программы, включая анализ требований и все стадии разработки и реализации алгоритма решения задачи с помощью компьютера.
Напомним, что алгоритм - это точное и понятное предписание (указание) исполнителю совершить последовательность действий, направленных на достижение указанной цели или на решение поставленной задачи. Существует три базовые конструкции алгоритмов: "линейная","ветвление" и "цикл".
В данном пособии Вам предлагается изучать язык программирования Pascal (диалект TURBO Pascal, версия 3.0). Pascal - это императивный язык программирования высокого уровня, имеющий строгую типизацию данных и переменных. Автором языка Pascal является профессор, директор Института информатики Швейцарской высшей политехнической школы Никлаус Вирт, работавший над созданием этого языка в 1965-1971 гг. Язык программирования Pascal был назван в честь Блеза Паскаля, выдающегося французского математика и философа, жившего в 1623-1662 гг.
Императивные языки программирования [Толковый,1989] - это класс языков программирования. Программа, написанная на императивном языке, явно указывает способ получения желаемого результата, не определяя при этом ожидаемых свойств результата. Процедура получения желаемого результата имеет вид последовательности операций, поэтому для императивных языков характерно указание порядка выполнения операторов. В основе такого программирования лежат извлечение из памяти значения некоторой переменной, совершение над ним действия и сохранение нового значения с помощью оператора присваивания. Отметим, что операторы присваивания разрушают информацию (присваиваемое значение заменяет предыдущее значение переменной) и зависят от порядка выполнения.
Система программирования включает в себя:
-
редактор текстов программ;
-
компилятор;
-
компоновщик (компонует исполняемый код программы);
-
отладчик (используется для отладки программ).
Среда программирования Turbo Pascal – интерактивная, работа с которой выполняется с помощью команд меню или управляющих клавиш.
Структура программы: программа состоит из трех частей:
-
заголовок программы(Program имя программы);
-
описательная часть – объявляются все объекты, которые будут использованы в программе с указанием имен и типов данных. Раздел описаний состоит из подразделов:
-
uses – список имен, подключенных в стандартных библиотеках;
-
uses crt – стирание предыдущих выводов на экран;
-
label – описание меток (Label M1, M2);
-
const – описание констант (const p=3,1415);
-
type (a: array [1..10] of real);
-
var – объявление переменных (var a, b, c: real; x, y: integer;);
-
procedure – объявление процедурного пользователя;
function – объявление функций пользователя;
-
раздел операторов (Begin … End.).
Алфавит и словарь языка Pascal. Алфавит содержит:
-
строчные и заглавные буквы латинского алфавита
-
десятичные цифры (от 0 до 10)
-
специальные символы + - * / > < = ; # ‘ . , : { } [ ] ( )
Примечание: буквы русского алфавита и другие символы можно написать только в строковых константах (‘…’).
Словарь Pascal содержит зарезервированные слова [имеют фиксированное написание и навсегда определяют смысл(begin, end, type и т.д.)].Стандартные идентификаторы используются для обозначения встроенных в язык функций, процедур и т.д.
Идентификаторы - имена тех объектов программы, которые создает и называет программист (до 127 символов).
14 Типы данных языка Pascal
Компиляторы языка Pascal требуют, чтобы сведения об объеме памяти, необходимой для работы программы, были предоставлены до начала ее работы. Для этого в разделе описания переменных (var) нужно перечислить все переменные, используемые в программе. Кроме того, необходимо также сообщить компилятору, сколько памяти каждая из этих переменных будет занимать. А еще было бы неплохо заранее условиться о различных операциях, применимых к тем или иным переменным...
Все это можно сообщить программе, просто указав тип будущей переменной. Имея информацию о типе переменной, компилятор "понимает", сколько байтов необходимо отвести под нее, какие действия с ней можно производить и в каких конструкциях она может участвовать.
Для удобства программистов в языке Pascal существует множество стандартных типов данных и плюс к тому возможность создавать новые типы.
Конструируя новые типы данных на основе уже имеющихся (стандартных или опять-таки определенных самим программистом), нужно помнить, что любое здание должно строиться на хорошем фундаменте. Поэтому сейчас мы и поговорим об этом "фундаменте".
На основании базовых типов данных строятся все остальные типы языка Pascal, которые так и называются: конструируемые.