Программирование на ЭВМ

Автор работы: Пользователь скрыл имя, 26 Апреля 2012 в 21:22, курсовая работа

Описание

За время существования профессии программиста сущность его труда изменилась коренным образом. В 50-х годах программы писали в командах ЭВМ (в “машинных кодах”). При этом вся информация переводилась в двоичную систему счисления. Это очень тяжелый и напряженный труд, требующий от человека особой аккуратности. Облегченно вздохнули программисты при появлении в 1956 г. специального языка для решения вычислительных задач. Это был FORTRAN (Formula Translator). С тех пор были разработаны другие, более совершенные языки, или специализированные применительно к какой-то конкретной области: КОБОЛ, АЛГОЛ, ПЛ/1, ЛИСП, СИМУЛА, ПАСКАЛЬ, СИ, АДА, ПРОЛОГ и др.

Работа состоит из  1 файл

Алгоритмы на Pascal.DOC

— 826.50 Кб (Скачать документ)

    {$F+} {формирование “дальних” адресов для подпрограмм (адрес сегмента и смещения), эквивалентно директиве FAR}                                         

    FUNCTION T1 (I: INTEGER): REAL;

    BEGIN

             T1:= 1/I/I

        END;

    FUNCTION T2 (I: INTEGER): REAL;

    BEGIN

          T2:=1/I/I/I;

    END;

    {$F-} {формирование “ближних” адресов (только смещения), эквивалентно директиве NEAR}

    FUNCTION SUM (A, B: INTEGER; F: FUNC): REAL;

      <Описание функции SUM (см. выше)>

    {Основная программа:}

    BEGIN

          READLN (N);

          Z1:= SUM(1, N, T1);

          Z2:= SUM(1, N, T2);

          WRITELN (Z1, Z2)

    END.

    По умолчанию используется ключ {$F-}.

    Если при выполнении программы встретился оператор процедуры или указатель функции, то ЭВМ работает в следующем порядке.

    По  имени процедуры (функции) находится  соответствующее описание в разделе  описаний программы.

    Производится  сопоставление списка ФРП и ФКП. Должны обязательно совпадать их число и типы.

    В случае совпадения выполняется тело процедуры (функции) с фактическими параметрами.

    После работы тела процедуры (функции) осуществляется возврат в основную последовательность операторов программы:

          - к следующему оператору - после работы процедуры;

          - в точку вызова  – после работы функции.

    1.8. Массивы

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

    Массивпронумерованная совокупность объектов одного типа:

     ( х1,   х2, …, хn), где 1, 2, …, n – номера (индексы) элементов. 

        Например, точка на плоскости характеризуется двумя координатами (х1, х2) : (2.5, 5), в пространстве – тремя (х1, х2, х3): (3.1, 0, -2.3).

    В n-мерном пространстве вектор (точка) имеет n координат.

    Это примеры одномерных массивов. Они  имеют одну степень нумерации (один индекс).

    Двумерные массивы называются матрицами. В  них используется двойная нумерация: по строкам и столбцам. 

     Можно рассматривать  и массивы большей размерности.         

     Пусть каждая плоскость параллелепипеда  – матрица. Тогда весь параллелепипед представляет собой трехмерный массив. В памяти ЭВМ все ячейки пронумерованы. Номером ячейки является ее адрес. Поэтому можно считать ячейки памяти одномерным массивом.

        В программе массив имеет следующее  описание:

    VAR M: ARRAY [1..5, 1..10] OF REAL;

    Переменная  M представляет собой матрицу, для которой m=5,  n=10.Границы изменения индексов должны быть заданы целыми числами.

    Любой элемент массива используется в  программе так же, как переменная, только с указанием индекса (номера), например,

          A:= M[3, 7] - 2; M[1, 1]:=0;

    Рассмотрим  несколько задач, связанных с массивами.

    Задача 1. Суммирование элементов массива

    Рассмотрим  одномерный массив А из n элементов. Для вычисляемой суммы необходимо зарезервировать некоторую переменную и перед началом вычислений занести в нее 0.

    Алгоритм вычислений:

          S:= 0;

          FOR I:= 1 TO N DO

                S:= S+A[I];

    Методом математической индукции можно доказать, что такой алгоритм действительно вычислит сумму n элементов массива.

    Задача 2. Вычисление среднего значения m массива

       . Следовательно, нужно накопленную в задаче 1 сумму разделить на N .

    Задача 3. Сформировать массив, в котором ai = i2

          FOR I:=1 TO N DO

                A[I]:=I*I;

    С помощью массивов решаются многие задачи линейной алгебры. 

    Задача 4. Найти скалярное  произведение двух векторов

    1, а2, …, аn), (b1, b2, …, bn)   (длина их должна быть одинакова).

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

          S:= 0;

          FOR I:=1 TO N DO

                S:= S+A[I]*B[I];

    Задача 5. Определение суммы векторов

    Каждая  компонента вектора суммы ci = ai + bi, следовательно,

          FOR I:=1 TO N DO

                C[I]:=A[I]+B[I];

    Задача 6. Вычисление произведения двух матриц

    Пусть даны две матрицы: A:= || aij || m*p, и B:= || bij || p*n.

    Их  произведение есть матрица 

    C:=A*B= || Cij || m*n, где -скалярное произведение вектора-строки с номером i на вектор-столбец с номером j. Алгоритм:

      FOR I:=1 TO M DO

            FOR J:=1 TO N DO

            BEGIN

                  S:=0;

                   FOR K:=1 TO P DO

                        S:=S+A[I,K]*B[K,J]; {вычисление одного

                                                      элемента матрицы}

              C[I,J]:=S

            END;

    Контрольные вопросы и задания

  1. Дайте интуитивное  определение понятия “алгоритм”.
  2. Каковы основные способы записи алгоритмов?
  3. Каковы основные принципы и конструкции структурного  программирования?
  4. Для исполнителя, умеющего выполнять только одну операцию на каждом шаге, опишите порядок вычисления трехчлена y=x3+bx2 +c.
  5. Приведите пример алгоритма, где использовался бы условный переход.
 
 
 
  1. Составьте алгоритм вычисления значения функции f(n) по формуле

          если n<m/2,

                                  если n = m/2,

          если n > m/2. 

  1. Составьте алгоритм вычисления суммы четных чисел  из интервала [M, N], где M и N – нечетные. Пометьте входы и выходы алгоритма.
  2. В чем заключается метод пошаговой детализации при составлении алгоритмов?
  3. Что представляет собой алфавит языка Паскаль?
  4. Чем характеризуются объекты программы на Паскале?
  5. Назовите основные операторы языка Паскаль.
  6. Охарактеризуйте константы как объекты программы. Укажите интервалы значений.
  7. Что представляют собой переменные как объекты программы? Дайте определение идентификатора, приведите примеры.
  8. Приведите примеры описаний переменных различных типов с записью значений в виде констант.
  9. Дайте определение выражения. Приведите примеры арифметических выражений. Поясните правила записи и приоритеты операций.
  10. Поясните смысл оператора присваивания. Приведите примеры операторов присваивания с выражениями.
  11. Приведите примеры логических выражений. Поясните правила их вычисления.
  12. Что представляет собой структура программы на Паскале? Приведите примеры.
  13. Как вводить данные и выводить результаты в программе на Паскале?
  14. Дайте определение рекуррентной последовательности. Приведите примеры.
  15. Охарактеризуйте основные задачи, решаемые на заданной рекуррентной последовательности.
  16. Запишите алгоритм вычисления члена рекуррентной последовательности с заданным номером.
  17. Запишите алгоритм вычисления суммы конечного числа элементов рекуррентной последовательности.
  18. В чем состоит смысл задачи вычисления бесконечной суммы рекуррентной последовательности? Приведите алгоритм решения этой задачи.
  19. На чем основаны приближенные методы вычисления корней функции?
  20. В чем суть метода дихотомии? Запишите его алгоритм операторами Паскаля.
  21. На чем основан поиск корня функции методом касательных? Приведите алгоритм.
  22. Поясните смысл метода линейной интерполяции и запишите его алгоритм операторами Паскаля.
  23. Как оценить трудоемкость алгоритмов отыскания корней функции?
  24. Каковы основные источники ошибок в программе и в чем состоят методы борьбы с ними?
  25. Каким образом можно доказать правильность алгоритма, не прибегая к тестированию? Приведите примеры.
  26. Дайте определение процедуры. Какие разновидности процедур существуют в языке Паскаль?
  27. В чем состоят различия в описании и вызове процедуры и функции?
  28. Какова связь между формальными и фактическими параметрами процедуры (функции)?
  29. Перечислите разновидности формальных параметров, поясните их смысл и приведите примеры.
  30. Что называют массивами данных? Приведите примеры алгоритмов обработки массивов.

            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

                                  

2. АЛГОРИТМЫ ИНФОРМАЦИОННОГО ПОИСКА

И СОРТИРОВКИ

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

    2.1. Задача поиска  и ее разновидности

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

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

  1. Найти минимальное значение элементов последовательности (все элементы разные).
  2. Найти номер минимального элемента последовательности (все элементы разные).
  3. Найти минимальный элемент и его номер в последовательности  с совпадающими элементами.
  4. Найти номер элемента с заданным значением (все элементы разные).

    Обозначим исследуемую последовательность x1 , x2 , x3 , …,xN   и составим алгоритмы решения каждой из предложенных задач.

  1. Рассмотрим задачу А как задачу определения размера самого маленького яблока из лежащих в ящике, разделенном на ячейки.
 

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

Информация о работе Программирование на ЭВМ