- •Введение
- •1.Этапы программирования.
- •2.Виды программирования.
- •3.Языки программирования.
- •3.1Понятие алгоритма.
- •3.2.1Замечания по проекту языка
- •3.2.2 Историческая справка
- •4.Объектно-ориентированное проектирование
- •4.1. Основные понятия
- •- Множества данных X; - множества функциональных связей (задач, решаемых с использованием пакета) f; - множества связей по определению r.
- •4.4. Процесс объектно-ориентированного проектирования
- •Заключение
- •Список литературы
3.1Понятие алгоритма.
Понятие алгоритма является основным при решении задачи с использование вычислительной машины. Подробный анализ этого понятия дается Д.Кнутом в его книге «Искусство программирования для ЭВМ», том 1. Отметим, что слово «алгоритм»(algorithm) определяло правило выполнения арифметических действий с использованием арабских цифр(1747 код).
К 1950 году под словом «алгоритм» подразумевали изложенный в «элементах» Евклида алгоритм Евклида- процесс нахождения наибольшего общего делителя двух чисел.
Современное значение «алгоритма» сравнимо по смыслу со значением слова: рецепт, процесс, метод, способ, процедура программа. Однако, в слове «алгоритм» имеется свой дополнительный оттенок. Помимо того, что алгоритм –это описание процесса решения некоторой задачи, он имеет следующие важные особенности (св-ва):
Дискретность, т.е. процесс решения, протекает в виде последовательности отдельных действий, следующие друг за другом.
Элементарность действий, т.е. каждое действие является настолько простым, что не вызывает сомнений и возможности неоднозначного толкования.
Детерминированность (определенность), т.е. каждое действие однозначно определено и после выполнения каждогодействия однозначно определяется, какое действие надо выполнить следующим.
Конечность, т.е. алгоритм заканчивается после конечного числа действий (шагов).
Результативность, т.е. в момент прекращения работы алгоритма известно, что считать его результатом.
Массовость, т.е. алгоритм описывает некоторое множество процессов, применимых при различных входных данных.
Элементарность действий является относительным свойством алгоритма. Один и тот же метод может допускать различные алгоритмы. Проиллюстрируем введенное понятие в примерах:
Задание№1: Найти наибольший общий делитель d чисел a и b.
Входные данные: а и b – принадлежат к классу N (натуральные числа).
Выходные данные: d –принадлежит классу N
Метод решения: Приведем несколько методов решения этой задачи:
Метод разложения каждого числа на степени простых множителей.
Метод, который имеет название «Алгоритм Евклида»
Метод, основанный на вычитании чисел, т.е. реализация алгоритма Евклида с использованием операций вычисления.
Для каждого из этих методов опишем в виде последовательности пронумерованных действий.
Алгоритм№1:
П1: Для каждого числа а найти показатели k1,k2,k3…k n, простые множители 2,3,5 …,pn в его разложении, т.е.
a=2k1. 1.3k2.5k3…p m Kn
П2:Для числа b найти j1 ,j2 ,j3 ,…j m простых множителей 2,3,5, …p m в его разложении, т.е.
b = 2j1 . 3 j2 . 5 j3…p mjm
П3:Найти q=max(n, m)
П4:Если n>q, то все показатели , включая kq ,положить равными 0.
П5: Если m<q,то все показатели, включая j q ,положить равными 0.
П6: Для каждого простого множителя найти
t= min(k1, j1),…,tq = min (kq, jq)
П7: Положить
D= 2t1 . 3t2 . 5t3 . pqtq
П8: Прекратить работу.
Алгоритм№2.
П1: Задать число а и b.
П2: Выбрать из этих чисел большее, назовем его x, меньшее у.
П3: Пока у≠0 выполнить.
Найти остаток z от деления х на у заменить х на у; и у на z (z<y<x)
П5: Прекратить работу
Алгоритм №3
П1: Задать числа а и b.
П2:Положть х=а, у=b
П3:Пока х≠y выполнить
Если х>у то положить х=х-у, иначе положить у = у- х
П4: Положить d=x
П5: Прекратить работу.
Задание №2:Вычислить при заданном значении х значение многочлена
y=а0.хn+a1. хn-1+…а n-1 . х- а n
Входные данные:n- показатель степени многочлена (класс N),а0,а1,…
,а n-1, аn,-коэффициент многочлена (класс R-вещественные числа), х- значение, при котором требуется вычитание.(класс R)
(1)Вычисление многочлена по формуле:
n
y=∑ a1. хi
i=0
(2) Вычисление значения многочлена на схеме Горнера
у=(…(( а0 . х+ а1 ) . х+ а2). x+…+ аn-1). x+ аn
Алгоритм №1:
П1: Заданные входящие данные
П2: Положить у= а0, i=1
П3: Пока i≤ n выполняется: заменить у на у .х+ аi , увеличивается i на 1.
П4: у –результат
П5: Прекращение работы
Сравнивая эти алгоритмы, можно заметить, что первый алгоритм сложнее и не вполне заслуживает названия «алгоритм», т.к. его действия нельзя назвать элементарными. Действие « Найти показатели …простых множителей» (пункты П1 и П2) являются отдельной задачей, состоящей из многих простых действий. То же самое можно сказать и о действиях в пунктах П6 и П7.
Самым простым и изящным был Алгоритм №3.
Часто для решения одной и той же задачи имеется несколько алгоритмов и нужно решить, какой из них лучше. Это приводит к системе, первостепенное значение области анализа алгоритмов: по заданному алгоритму найти его рабочие характеристики.
Для улучшения алгоритма желательно сократить количество действий и, по возможности, упростить действия. При этом алгоритме должен оставаться эквивалент исходному.
Будем называть 2 алгоритмических эквивалента:
Множество дополнительных входных данных одного из них является множеством допустимых входных данных и для других; из применимости одного алгоритма к этим входным данным.
Применение этих алгоритмов к одним и тем же входным дает одинаковые результаты.
Эквивалентом являются алгоритмы для вычисления значения многочлена в заданной точке Х по формулам (1) и (2). Но алгоритм, заданный формулой (2), требует меньше арифметических операций, т.к. не требуется выполнения операции возведения в степень х i для всех I є [ 1; n]
Сформировался критерий качества алгоритма:
правильность (алгоритм решения простой задачи)
прозрачность (простота, удобочитательный алгоритм)
эффект ( быстродействие, краткость)
С описанием алгоритма связаны два момента: описание алгоритма, выполнение алгоритма.
3.2 С++
"Язык образует среду мышления и формирует представление о том, о чем мы думаем".
(Б.Л.Уорф)
С++ - язык общего назначения и задуман для того, чтобы настоящие программисты получили удовольствие от самого процесса программирования. За исключением второстепенных деталей он содержит язык С как подмножество.
Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции. Программирование с использованием таких объектов обычно называют объектно-ориентированным. Если этот метод применяется правильно, то программы становятся короче и понятнее, а сопровождение их упрощается.
Ключевым понятием С++ является класс. Класс - это определяемый пользователем тип. Классы обеспечивают закодирование данных, их инициализацию, неявное преобразование пользовательских типов, динамическое задание типов, контролируемое пользователем управление памятью и средства для перегрузки операций. В языке С++ концепции контроля типов и модульного построения программ реализованы более полно, чем в С. Кроме того, С++ содержит усовершенствования, прямо с классами не связанные: символические константы, функции-подстановки, стандартные значения параметров функций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены все возможности С эффективной работы с основными объектами, отражающими аппаратную "реальность" (разряды, байты, слова, адреса и т.д.). Это позволяет достаточно эффективно реализовывать пользовательские типы.
Как язык, так и стандартные библиотеки С++ проектировались в расчете на переносимость. Имеющиеся реализации языка будут работать в большинстве систем, поддерживающих С. В программах на С++ можно использовать библиотеки С. Большинство служебных программ рассчитанных на С, можно использовать и в С++.
