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

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

Описание

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

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

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

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

         CHAR. Данные этого типа записываются без апострофов и без пробелов.

    VAR C, D: CHAR;

                READ (C, D);   C := ‘A’;

                                              D := ‘+’;

A +  

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

                WRITE (<список значений>);

    Список  вывода содержит имена переменных, выражения и константы. Например, WRITE (X, 29);

    Значения  из списка последовательно выводятся  на экран дисплея или на принтер (печатающее устройство).

    Вывод – другое средство общения программы с внешним миром.

    В Паскале разрешена печать арифметических и символьных (литерных) данных, причем выражением для вывода может быть строка литер, заключенная в апострофы. При печати апострофов не будет.

    Пример.

          PROGRAM P (INPUT, OUTPUT);

          VAR A, B, X: REAL;

          BEGIN

                WRITE (‘Введи A’);

                READ (A);

                WRITE (‘Введи B’);

                READ (B);

                X := A*B-A;

                WRITE (‘X=’,X);

          END.

    Значения  выводятся в той форме, в какой  они описаны, например,

    - 2.300000Е+05 - для вещественных чисел.

    Для удобства чтения можно указать формат выводимых данных:

          WRITE (X:2);  - для целых,

          WRITE (Y:10:2);           - для вещественных (10 – общее количество цифр, 2 – количество цифр в дробной части).

    Все выводимые данные печатаются в одну строку. Если нужно перейти на следующую  строку до окончания предыдущей, пользуются оператором WRITELN, общий вид которого

    WRITELN (<список вывода>);

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

    1.4. Рекуррентные алгоритмы

    Известно, что далеко не все математические задачи имеют точное аналитическое решение. Гораздо большее число задач можно решить приближенно с помощью численных алгоритмов. Численными называют алгоритмы, оперирующие приближенными числами (то есть объектами типа REAL).

    Большое количество численных алгоритмов основано на рекуррентных последовательностях (то есть связано с вычислением рекуррентных последовательностей).

    Рекуррентная  последовательность – это такая  бесконечная числовая последовательность x0, x1, …, xn, … , что

      xi = f (i, xi-1, xi-2, … , xi-p) для i ≥ p

          x0 = a0, задание рекуррентной

          x1 = a1, последовательности

          …… ,

          xp-1 = ap-1

    Например, если p = 1, то получим последовательность

      xi = f (i, xi-1),  i ≥ 1,

          x0 = a0.

    Если  задана рекуррентная последовательность, то на ней можно сформулировать некоторые задачи.

        Задача 1. Вычисление  N-го элемента последовательности.

    Для простоты рассмотрим случай, когда  p = 1.

    N – номер элемента (должен быть задан).

    I – номер очередного элемента.

    I, N – целые.

    Схема алгоритма будет следующая:

    X := A0;

    I := 1;

    WHILE I<=N DO

          BEGIN

                X := f (I, X);

                I := I + 1;

          END;

    Чтобы дойти до N-го элемента, цикл проработает N раз.

 

     Задача 2. Вычисление суммы  конечного числа  элементов рекуррентной последовательности:

    Процесс вычисления суммы можно представить  как процесс нахождения члена SN рекуррентной последовательности:

    S0 = 0;

    Si = Si-1 + xi = f1(i, Si-1 ),  1 ≤ i ≤ N 

    Тогда получим следующий алгоритм.

    S := 0;

    I := 1;

    X := a0;

    WHILE I <= N DO

          BEGIN

                S := S + X;

                X := f (I, X);

                I := I + 1;

          END;

    Если  мы знаем, сколько раз должен проработать цикл, можно использовать другой оператор цикла: FOR. Его общая запись:

FOR I := <начальное значение> TO <конечное значение> DO (с шагом 1) или

FOR I := < конечное значение > DOWNTO < начальное значение > DO (с шагом -1).

    Задача 3. Вычисление бесконечных  сумм:

    

    Задача  вычисления бесконечной суммы имеет  смысл, когда эта сумма сходится к некоторому конечному значению. Так, например,

    

    Иногда  с помощью таких сумм вычисляют  функции. Например:

    

    Такое представление функции называется её разложением в ряд.

    Любое вещественное число можно представить  с помощью конечного числа  цифр, то есть всегда приближенно. Следовательно, и бесконечную сумму можно  вычислить только приближенно, с заданной точностью. Ограничимся конечным числом элементов суммы. Для нахождения критерия окончания вычислительного процесса используем тот факт, что при увеличении номера i эти элементы убывают по абсолютной величине. Поэтому одним из распространенных критериев является следующий: включать в сумму только те члены последовательности, которые по модулю больше или равны некоторой наперед заданной величине ε.

    Тогда

    

    , где N – таково,  
 

что   
 

    Таким образом, сумма всех отброшенных  элементов будет либо меньше, либо ненамного больше ε.

    Часто в таких суммах можно последующий  элемент вычислить с помощью предыдущего. Тогда нужно выразить (i+1)-й через i-й или i-й через       (i-1)-й, а не считать непосредственно каждый элемент.

    Пример  для еt.

      

    то  есть       - формула пересчета.

    Тогда алгоритм запишется следующим образом.

    S := 1; I := 1; T:=1; x:=1;

    WHILE  ABS (x) >= Eps   DO

          BEGIN

            x := x * T / I;

            S := S + x;

            I := I + 1;

          END;

    Подумайте над следующим вопросом. Почему для вычисления бесконечных сумм нельзя использовать цикл типа FOR?

    Для самостоятельной тренировки вычислите  значения по формулам:

    

     1.5. Алгоритмы нахождения корней функции

    Корнем  функции f(x) является решение уравнения f (x) = 0. На практике в редких случаях можно записать в явном виде x как некоторую функцию g от коэффициентов уравнения.

    Однако  почти всегда мы можем решить задачу приближенно, численными методами. Это можно сделать практически для любой функции. Предположим, что приближенное значение корня известно. Это точка С0 (рис.1.1). 

 

Рис. 1.1– Численное нахождение корня функции 

    Задача  численного нахождения корня состоит  в том, чтобы из данной точки С0 найти более точное  значение  Cn,  построив  определенным   образом последовательность шагов. При этом мы должны быть уверены, что точное значение корня будет лежать в области Cn±d ( значение d известно). Если d достаточно мало, то точность можно считать удовлетворительной. Рассмотрим наиболее распространенные методы нахождения корней функции. 

                 Метод дихотомии  (деления отрезка  пополам) 

    Для реализации метода кроме начального приближения C0 должна быть задана величина d0 такая, что в отрезок [C0-d0, C0+d0] корень попадает заведомо (рис.1.2). 
 
 
 
 
 

      
 
 
 
 
 
 
 
 

    Рис.1.2 – Метод дихотомии 

    Все более точное значение корня мы будем  получать, вычисляя элементы рекуррентных последовательностей:

    С0, С1, …, Сi, …

      d0, d1, …, di, …

    Критерием перехода к новой точке является результат анализа: пересекает ли график функции f (x) ось абсцисс левее или правее предыдущей точки.

    И тогда

    

    если  правее; 

    если  левее. 
 

    Чтобы выяснить это обстоятельство, вычислим f (C0) и f (C0+d0), а потом сравним их знаки. Если эти знаки одинаковы, то график проходит через ось Х левее точки C0, если разные, то между C0 и C0+d0.

    Формально проверку можно провести следующим образом:

    f (C0)*f (C0+d) > 0  - знаки одинаковые,

    f (C0)*f (C0+d) < 0  - знаки разные,

    f (C0)*f (C0+d) = 0  - корень найден (случай редкий, рассматривать

                                                   не будем).

    Тогда рекуррентные последовательности для Ci и di:

    

    если f (ai-1)*f (ai-1 + di-1) < 0 ; 

    иначе; 
 
 
 
 

    где С0, d0 – заданы.

    Один  из критериев окончания вычислительного  процесса состоит в следующем. Нужно задать некоторое малое число ε и считать корень найденным, когда абсолютная величина di станет меньше ε. Таким образом, число ε – заданная точность нахождения корня с помощью нашего приближенного метода. Возможны другие критерии.

    Алгоритм  нахождения корней методом дихотомии.

    READ (C, D, EPS);

    A:=F (C); B:=F(C+D);

    WHILE D>=EPS DO

    BEGIN

            D:=D/2;

            IF A*B<0 THEN C:=C+D;

            ELSE BEGIN

                C:=C-D;

                B:=A;

                END;

            A:=F(C);

    END;

    Если  функция имеет несколько корней, то есть на отрезке 2d график несколько раз пересекает ось Х, то метод позволяет найти один корень. Метод работает довольно медленно, но сходится всегда. 

                        Метод Ньютона  (метод касательных)

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