Автор работы: Пользователь скрыл имя, 12 Ноября 2011 в 13:37, курсовая работа
В настоящей курсовой работе будут рассмотрены алгоритмизация и языки программирования.
В алгоритмах задач второй группы, когда вычисляется новый массив с неизвестным заранее числом элементов, используется понятие "счетчик". Счетчик- это некоторая переменная, которая определяет номер текущего элемента в новом массиве, если такой элемент существует. Очевидно, что номер последнего элемента массива совпадает с числом элементов в этом массиве. Идею использования счетчика продемонстрируем на следующей задаче.
Дано: | N - число элементов массива A, |
A[1:N] - N элементов массива A, | |
Z1, Z2 - два числа, причем Z1 < Z2 < 0. | |
Вычислить: | массив C, содержащий отрицательные элементы массива A, удовлетворяющие условию Z1 < A[I] < Z2. |
Введем некоторую переменную K - счетчик, которая будет определять число элементов в новом массиве. Эту переменную можно использовать в качестве индекса при вычислении очередного элемента нового массива. Если найдутся элементы в массиве A, для которых выполняются сформулированные условия, новый массив C будет содержать K элементов. В начале алгоритма K равно 0. Для каждого A[I] < 0 и Z1 < A[I] < Z2 K увеличивается на 1 и вычисляется C[K] := A[I]. Если в конце алгоритма K останется равным нулю, то в новый массив не попал ни один элемент.
Рассмотрим алгоритмы, которые решают задачу удаления (вставки) элементов в массиве. Предположим, что в заданном массиве A[1:N] надо удалить все элементы, удовлетворяющие условию X < A[I] < Y; X, Y заданы, причем X < Y. Воспользуемся идеей "счетчика", позволяющей вычислить новый массив A на месте исходного массива A. Пусть M - счетчик, определяющий номер элемента и число элементов в новом массиве A. Вычислим новый массив A из элементов исходного массива, для которых не выполняется условие X < A[I] < Y. Алгоритм удаления представлен в Примере 11.
Алгоритм
Удаление элементов
в массиве
Начало ввод(N,
A[1:N], X, Y) если (A[I] <= X) или (A[I] >= Y) то {оставить
такой элемент} все кц вывод(' удалены все элементы ') иначе вывод(M, A[1:M]) все Конец |
Отметим, что вычисление нового массива A осуществлялось при выполнении условия (A[I] <= X) или (A[I] >= Y), которое является противоположным условию удаления соответствующих элементов:
X < A[I] < Y.
Перейдем к алгоритмам вставки элементов в заданный массив и обсудим одно из возможных решений.
Дано: | N, A[1:N], M, B[1:M] |
Требуется: | вставить элементы массива B в массив A после его минимального элемента |
Очевидно,
что решение распадается на несколько
логических этапов:
- | поиск номера минимального элемента NMin в массиве A и его анализ; |
- | сдвиг элементов массива A, расположенных правее минимального, на M позиций вправо (освобождение места для вставляемых элементов); |
- | вставка M элементов массива B в массив A. |
Сформулированные
этапы являются результатом поставленной
задачи. Они позволяют свести сложную
задачу к последовательности более
простых задач. Сначала необходимо
выполнить предварительный
A[NMin + I] = B[I].
Действительно, для I = 1 первый элемент из B записывается на соседнее с минимальным элементом место в массиве A. В заключение остается модифицировать число элементов в массиве A, увеличив его на величину M. Детальный алгоритм задачи представлен в примере 12.
Алгоритм
Вставка элементов в
массив
Начало ввод(N,
A[1:N], M, B[1:M]) {поиск
номера минимального элемента} если A [I] < A [NMin] то NMin := I все кц A[N + M - I + 1] := A[N - I + 1] кц A[NMin + I] := B[I] кц Конец |
Заметим, что если минимальный элемент окажется последним в исходном массиве, то сдвиг элементов в массиве A не происходит, а сразу выполняется вставка элементов, которая по существу будет являться дописыванием элементов массива B после последнего элемента массива A, ведь в этом случае NMin = N.
В последней группе типовых алгоритмов рассмотрим еще один полезный прием - использование специальной переменной, называемой флагом. Флаг в алгоритме позволяет установить, выполнилось ли некоторое условие. Именно благодаря этому понятию можно организовывать досрочный выход из цикла, не нарушая принципов структурного программирования, т.е. не применяя безусловный переход. Продемонстрируем технику использования флага на следующей задаче.
Дано: | N, A[1:N], X |
Вычислить: | Sum - сумму всех элементов массива A, следующих за первым элементом массива, равным некоторой величине X |
Определим для этой задачи переменную Flag и присвоим ей некоторое начальное значение, например, 0. Это означает, что в исходном массиве A пока не нашли элемента, равного заданной величине. Будем просматривать все элементы массива в цикле пока не встретится искомый элемент и пока не достигнут предпоследний элемент ( если A[N] = X, то сумму вычислять не надо):
цикл пока (Flag > = 0) и (I < N).
Как только встретится элемент равный X достаточно поменять значение переменной Flag на любое, отличное от 0, чтобы обеспечить досрочный выход из цикла. Дальнейшие шаги алгоритма тривиальны. Ограничимся их формальным описанием на псевдокоде в примере 13.
Алгоритм
Досрочный выход из
цикла по флагу
Начало ввод(N,
A[1:N], X) если A[I] = X то K : = I
+ 1 {запоминание номера
элемента для начала
суммирования} иначе I := I + 1 все кц Sum := 0 Sum : = Sum + A[I] кц иначе вывод(' элемента = X нет в массиве A') все Конец |
Строго говоря, в этом алгоритме для досрочного выхода из цикла можно использовать другое условие:
цикл
пока (A[I] <> X) и (I < N) I : = I +1 кц |
В этом случае условие выхода из цикла определяется значением переменной I:
если
I >= N то {сумма не вычисляется} иначе {вычисление суммы} все |
В
данной главе были рассмотрены типовые
алгоритмы, которые довольно часто
встречаются при решении
Создать
язык, удобный для написания
Транслятор – это программа, предназначенная для перевода программы, написанной на одном языке программирования, в программу на другом языке программирования. Процесс перевода называется «трансляцией».
Тексты исходной и результирующей программ находятся в памяти компьютера.
Примером транслятора является компилятор.
Компилятор – это программа, предназначенная для перевода программы, написанной на каком-либо языке, в программу в машинных кодах. Процесс такого перевода называется «компиляцией».
Компилятор создаёт законченный результат – программу в машинных кодах. Затем эта программа выполняется. Откомпилированный вариант исходной программы можно сохранить на диске. Для повторного выполнения исходной программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера откомпилированный в предыдущий раз вариант и выполнить его.
Существует другой способ сочетания процессов трансляции и выполнения программы. Он называется «интерпретацией». Суть процесса интерпретации состоит в следующем. Вначале переводится в машинные коды, а затем выполняется первая строка программы. Когда выполнение первой строки окончено, начинается перевод второй строки, которая затем выполняется и так далее. Управляет этим процессом программа-интерпретатор.
Информация о работе Алгоритм и его свойства. Способы записи алгоритма