Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0048366_33661_yazyki_programmirovaniya.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
200.7 Кб
Скачать

3.1Понятие алгоритма.

Понятие алгоритма является основным при решении задачи с использование вычислительной машины. Подробный анализ этого понятия дается Д.Кнутом в его книге «Искусство программирования для ЭВМ», том 1. Отметим, что слово «алгоритм»(algorithm) определяло правило выполнения арифметических действий с использованием арабских цифр(1747 код).

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

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

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

  • Элементарность действий, т.е. каждое действие является настолько простым, что не вызывает сомнений и возможности неоднозначного толкования.

  • Детерминированность (определенность), т.е. каждое действие однозначно определено и после выполнения каждогодействия однозначно определяется, какое действие надо выполнить следующим.

  • Конечность, т.е. алгоритм заканчивается после конечного числа действий (шагов).

  • Результативность, т.е. в момент прекращения работы алгоритма известно, что считать его результатом.

  • Массовость, т.е. алгоритм описывает некоторое множество процессов, применимых при различных входных данных.

Элементарность действий является относительным свойством алгоритма. Один и тот же метод может допускать различные алгоритмы. Проиллюстрируем введенное понятие в примерах:

Задание№1: Найти наибольший общий делитель d чисел a и b.

Входные данные: а и b – принадлежат к классу N (натуральные числа).

Выходные данные: d –принадлежит классу N

Метод решения: Приведем несколько методов решения этой задачи:

  1. Метод разложения каждого числа на степени простых множителей.

  2. Метод, который имеет название «Алгоритм Евклида»

  3. Метод, основанный на вычитании чисел, т.е. реализация алгоритма Евклида с использованием операций вычисления.

Для каждого из этих методов опишем в виде последовательности пронумерованных действий.

Алгоритм№1:

П1: Для каждого числа а найти показатели k1,k2,k3k 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:Вычислить при заданном значении х значение многочлена

y0n+a1. хn-1+…а n-1 . х- а n

Входные данные:n- показатель степени многочлена (класс N),а01,…

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: Пока in выполняется: заменить у на у .х+ аi , увеличивается i на 1.

П4: у –результат

П5: Прекращение работы

Сравнивая эти алгоритмы, можно заметить, что первый алгоритм сложнее и не вполне заслуживает названия «алгоритм», т.к. его действия нельзя назвать элементарными. Действие « Найти показатели …простых множителей» (пункты П1 и П2) являются отдельной задачей, состоящей из многих простых действий. То же самое можно сказать и о действиях в пунктах П6 и П7.

Самым простым и изящным был Алгоритм №3.

Часто для решения одной и той же задачи имеется несколько алгоритмов и нужно решить, какой из них лучше. Это приводит к системе, первостепенное значение области анализа алгоритмов: по заданному алгоритму найти его рабочие характеристики.

Для улучшения алгоритма желательно сократить количество действий и, по возможности, упростить действия. При этом алгоритме должен оставаться эквивалент исходному.

Будем называть 2 алгоритмических эквивалента:

  1. Множество дополнительных входных данных одного из них является множеством допустимых входных данных и для других; из применимости одного алгоритма к этим входным данным.

  2. Применение этих алгоритмов к одним и тем же входным дает одинаковые результаты.

Эквивалентом являются алгоритмы для вычисления значения многочлена в заданной точке Х по формулам (1) и (2). Но алгоритм, заданный формулой (2), требует меньше арифметических операций, т.к. не требуется выполнения операции возведения в степень х i для всех I є [ 1; n]

Сформировался критерий качества алгоритма:

  • правильность (алгоритм решения простой задачи)

  • прозрачность (простота, удобочитательный алгоритм)

  • эффект ( быстродействие, краткость)

С описанием алгоритма связаны два момента: описание алгоритма, выполнение алгоритма.

3.2 С++

"Язык образует среду мышления и формирует представление о том, о чем мы думаем".

(Б.Л.Уорф)

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

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

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

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