Файл: 1. Лекции Паскаль (Часть 1).doc

Добавлен: 19.10.2018

Просмотров: 5069

Скачиваний: 11

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Оглавление

1.Стандартные типы данных

1.1.Структура программы

1.2.Описание стандартных типов данных

Целый тип

Вещественный тип

Символьный тип

Булевский тип

Перечисляемый тип

1.3.Выражения

Лабораторная работа №1

Вычисление выражений с использованием стандартных функций

Лабораторная работа № 1.

Вычисление выражений с использованием стандартных функций.

Постановка задачи

Описание используемых стандартных функций.

Программы № 15.а

Программы № 15.б

Варианты заданий

2. Операторы языка.

2.1. Составной и пустой операторы.

2.2.Условный оператор.

2.3.Операторы повторений.

2.4.Оператор выбора

2.5.Практические задания.

Лабораторная работа № 2

Решение уравнений и неравенств с использованием условного оператора.

Лабораторная работа № 2, вариант № 8.

Решение уравнений и неравенств с использованием условного оператора.

Варианты заданий

Лабораторная работа № 3.

Построение таблиц функций.

Лабораторная работа № 3, вариант № 8.

Построение таблиц функций.

Варианты заданий

Лабораторная работа № 4.

Организация циклов в программе.

Лабораторная работа № 4, вариант № 8.

Организация циклов в программе.

Варианты заданий

3.Численные методы.

3.1.Метод итераций

3.2.Метод Ньютона

3.3. Метод половинного деления.

Лабораторная работа № 5

Решение нелинейных уравнений.

Лабораторная работа № 5, вариант № 3.

Решение нелинейных уравнений методом итераций.

Описание метода итераций:

Текст программы.

Распечатка результатов работы программы в следующем виде:

Лабораторная работа № 5, вариант № 3.

Решение нелинейных уравнений методом Ньютона.

Описание метода Ньютона:

Блок-схема метода Ньютона:

Текст программы.

Распечатка результатов работы программы в следующем виде:

Лабораторная работа № 5, вариант № 3.

Решение нелинейных уравнений методом половинного деления.

Описание метода половинного деления:

Блок-схема метода половинного деления:

Текст программы.

Распечатка результатов работы программы в следующем виде:

Метод Монте-Карло (метод статистических испытаний)

5. Массивы.

5.1. Процедуры и функции.

5.2. Одномерные массивы.

5.2.1. Описание массивов.

5.2.2. Классы задач по обработке массивов.

5.2.2.1. Однотипная обработка всех или указанных элементов массивов.

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

5.2.2.3. Обработка нескольких массивов одновременно.

5.2.2.4. Поисковые задачи для массивов.

5.2.2.5. Сортировка массивов.

5.2.2.5.1. Сортировка вставкой

5.2.2.5.2. Сортировка выбором

5.2.2.5.3. Сортировка обменом («пузырьковая сортировка»)

5.2.2.5.4. Сортировка фон Неймана (слиянием)

5.2.2.5.5. Шейкер-сортировка

5.3. Двумерные массивы.

5.3.1. Описание двумерных массивов.

5.3.2. Сортировка двумерных массивов

Лабораторная работа № 4.

Работа с массивами чисел.

Образец выполнения задания.

Лабораторная работа № 4.

Работа с массивами чисел.

Варианты заданий.

6. Обработка строк.

6.1. Функции обработки строк.

6.2. Процедуры обработки строк.

Лабораторная работа № 7.

Обработка строк.

Лабораторная работа № 7, вариант № 8.

Обработка строк.

7. Комбинированные типы. Оператор присоединения

7.1. Записи

7.2. Оператор присоединения

Лабораторная работа № 8.

Работа с комбинированными типами данных.

Лабораторная работа № 8, вариант № 8.

Работа с комбинированными типами данных.

8. Множественные типы данных.

8.1. Множества.

Лабораторная работа № 9.

Работа с множественными типами данных.

Лабораторная работа № 9, вариант № 3.

Работа с множественными типами данных.

Варианты заданий.

Лабораторная работа № 10.

Операции над множествами.

Лабораторная работа № 10.

Операции над множествами.

Варианты заданий.


Содержание отчета:
  1. Постановка задачи.

  2. Текст программы.

  3. Таблица результатов.

Образец выполнения задания.

Лабораторная работа № 3, вариант № 8.

Построение таблиц функций.


Постановка задачи.

Составить программу вычисления значений функции arctg(x) на отрезке [A, B] в точках Xi = A + iH, где H = (B - A)/M, M — заданное целое число. Значение шага Н должно вычисляться один раз.

При A=2, B=7, M=15.

Текст программы.

program lab3{ вариант № 8};

var h,r:real;

n:integer;

begin

h:=(7-2)/15;

r:=2;

for n:=1 to 16 do

begin

writeln('arctg(',r:5:4,')=',(arctan(r)):5:4);

r:=r+h;

end;

end.

Таблица результатов


arctg(2.0000)=1.1071

arctg(2.3333)=1.1659

arctg(2.6667)=1.2120

arctg(3.0000)=1.2490

arctg(3.3333)=1.2793

arctg(3.6667)=1.3045

arctg(4.0000)=1.3258

arctg(4.3333)=1.3440

arctg(4.6667)=1.3597

arctg(5.0000)=1.3734

arctg(5.3333)=1.3854

arctg(5.6667)=1.3961

arctg(6.0000)=1.4056

arctg(6.3333)=1.4142

arctg(6.6667)=1.4219

arctg(7.0000)=1.4289


Варианты заданий


Номер вар.

F(x)

A

B

M

1

x - sin(x)

0

п/2

10

2

sin(x)

п/4

п/2

15

3

cos(x)

п/3

2п/3

20

4

tg(x)

0

п/4

10

5

ctg(x)

п/4

п/2

15

6

arcsin(x)

0

1

20

7

arccos(x)

0.5

1

10

8

sin(x) - cos(x)

0

п/2

20

9

x sin(x)

0

3п

10

10

sin(1/x)

п/8

2/п

15

11

cos(1/x)

п/4

4/п

20

12

sin(x2)

п/6

2п/3

10

13

cos(x2)

п/3

3п/2

15

14

sin(x) + tg(x)

0

п/4

20

15

cos(x) + ctg(x)

п/4

п/2

10

16

tg(x/2)

0

2п/3

15

17

tg(x/2) + cos(x)

п/2

п

20

18

ctg(x/3) + sin(x)

п/4

п/2

10

19

sin(x/4)/4

п/2

п

15

20

arcctg(x)

1

5

20

21

tg(x/4) +sin(x/2)

-1

1

10

23

x2tg(x/2)

5

8

15

24

tg(x)/x

-5

5

20

25

tg(x) + ctg(x/2)

0

3

10

Лабораторная работа № 4.

Организация циклов в программе.


Рекуррентной называется формула, связывающая значения р+1 соседних членов uk, uk-1, …, uk-p (k>=p+1) некоторой последовательности {un}(n=1, 2, …): uk=F(k, uk-1, …, uk-p). Рекуррентная формула позволяет шаг за шагом определить любой член последовательности, если известны р первых её членов u1, u2, …, up, где р называют порядком формулы. Рассмотрим пример.

Рассмотрим задачу нахождения n-го члена рекуррентной последовательности на примере чисел Фибоначчи. Каждое число Фибоначчи равно сумме двух предыдущих. В частности:

U3 = u2+u1 = 1+1 = 2;

U4 = u3+u2 = 1+2 = 3 и т.д.

Отсюда следует, что для получения очередного числа достаточно хранить два предыдущих. Таким образом, в программе постоянно используются три соседних числа Фибоначчи. Для их хранения достаточно ввести три переменных: А хранит uk, B хранит uk-1, С хранит uk-2. Для вычисления следующего числа Фибоначчи необходимо провести сдвиг, т.е. переписать содержимое В в С, а содержимое А в В. Исходя из этого, получим фрагмент

{фрагмент}

c:=1;{значение первого числа известно}

b;=1;{значение второго числа тоже известно}


k:=3;{начинаем вычисление с третьего числа}

while k<=n do {цикл, пока не найдено n-е число}

begin

a:=b+c;{вычисляем следующее число как сумму двух предыдущих}

c:=b;{сдвигаем b в c для нахождения следующего числа}

b:=a;{сдвигаем a в b для нахождения следующего числа}

k:=k+1;{увеличиваем счетчик найденных чисел}

end;

write(a);{выводим найденное число}



Цель задания:

1. Получение навыков в выборе и использовании

операторов цикла.

2. Знакомство с итерационными процессами.


Постановка задачи:

Используя оператор цикла, найти сумму элементов, указанных в конкретном варианте. Результат напечатать, снабдив соответствующим заголовком.


Содержание отчета:

1. Постановка задачи.

2. Текст программы.

3. Результат решения конкретного варианта.


Методические указания:

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

Факториалом целого числа называют произведение

1*2*3*…*n = n!

n! = n*(n-1)

Например, требуется найти сумму ряда с точностью =10-4, общий член которого .

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

,

откуда:

.

При составлении программы считать, что точность достигнута, если аn <


Образец выполнения задания.

Лабораторная работа № 4, вариант № 8.

Организация циклов в программе.

Постановка задачи:


Используя оператор цикла, найти сумму ряда с точностью =10-4, общий член

которого . Результат напечатать.


При определении суммы членов ряда следует использовать рекуррентную формулу, в нашем случае рекуррентная формула имеет вид:

При составлении программы считать, что точность достигнута, если аn <10-4


Текст программы:


program lab4{вариант № 11};

var sum,an:real;

n:integer;

begin

clrscr;

sum:=0;

an:=1;

n:=1;

while an>0.0001 do

begin

sum:=sum+an;

n:=n+1;

an:=an*(exp(n*(ln(n/(n+1)))));

end;

writeln('Сумма ',n,' элементов равна =',sum:7:6);

end.


Результат решения конкретного варианта:


Сумма 12 элементов равна =1.759641



Варианты заданий

1) Найти сумму целых положительных чисел, кратных 3 и

меньших 200.

2) Найти сумму целых положительных четных чисел,

меньших 100.

3) Найти сумму целых положительных нечетных чисел,

меньших 200.

4) Найти сумму целых положительных чисел, больших 20,

меньших 100 и кратных 3.

5) Найти сумму ряда с точностью =10-4, общий член

которого

6) Найти сумму ряда с точностью =10-4, общий член

которого

7) Найти сумму ряда с точностью =10-4, общий член

которого

8) Найти сумму ряда с точностью =10-4, общий член

которого

9) Найти сумму ряда с точностью =10-4, общий член

которого

10) Найти сумму ряда с точностью =10-4, общий член

которого

11) Найти сумму ряда с точностью =10-4, общий член

которого

12) Найти сумму ряда с точностью =10-4, общий член

которого

13) Найти сумму ряда с точностью =10-4, общий член

которого

14) Найти сумму ряда с точностью =10-4, общий член

которого

15) Найти сумму ряда с точностью =10-4, общий член

которого

16) Найти сумму ряда с точностью =10-4, общий член


которого

17) Найти сумму ряда с точностью =10-4, общий член

которого

18) Найти сумму ряда с точностью =10-4, общий член

которого

19) Найти сумму ряда с точностью =10-4, общий член

которого

20) Найти сумму 13 членов ряда, в котором

21) Найти сумму 15 членов ряда, в котором

22) Найти сумму 10 членов ряда, в котором

23) Найти сумму 9 членов ряда, в котором

24) Найти сумму 7 членов ряда, в котором

3.Численные методы.

Довольно часто на практике приходится решать уравнения вида:

F(x) = 0, (1)

где функция F(x) определена и непрерывна на некотором конечном или бесконечном интервале < x < .

Всякое значение такое, что F(x) 0, называется корнем уравнения, а нахождение этого значения и есть решение уравнения.

На практике в большинстве случаев найти точное решение возникшей математической задачи не удается. Поэтому важное значение приобрели численные методы, позволяющие найти приближенное значение корня. Под численными методами подразумеваются методы решения задач, сводящиеся к арифметическим и некоторым логическим действиям над числами, т.е. к тем действиям, которые выполняет ЭВМ. [5]

Существует множество численных методов. Рассмотрим только три из них:

  1. метод итераций;

  2. метод Ньютона;

  3. метод половинного деления.


3.1.Метод итераций

Этот метод заключается в замене уравнения (1) эквивалентным ему уравнением вида (2)

После этого строится итерационный процесс

(3)

При некотором заданном значении . Для приведения выражения (1) к требуемому виду (2) можно воспользоваться простейшим приёмом

,

.

Если в выражении (2) положить , можно получить стандартный вид итерационного процесса для поиска корней нелинейного уравнения:



Иначе можно получить уравнение (2) следующим способом: левую и правую часть уравнения (1) умножить на произвольную константу и прибавить к левой и правой части х, т.е. получаем уравнение вида:

х = х + F(x), (4)

где f(x) = х + F(x).

На заданном отрезке [a; b] выберем точку х0 – нулевое приближение – и найдем:

х1 = f(x0),

потом найдем:

х2 = f(x1),

и т.д.

Таким образом, процесс нахождения корня уравнения сводится к последовательному вычислению чисел:

хn = f(xn-1) n = 1,2,3..... .

Этот процесс называется методом итераций.

Если на отрезке [a; b] выполнено условие:

,

то процесс итераций сходится, т.е.

lim xn = x.

n

Процесс итераций продолжается до тех пор, пока

xn - xn-1 ,

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

x - xn .



Блок-схема метода итераций.









true false








3.2.Метод Ньютона


Для поиска корней уравнения (1) в окрестности решения выберем точку и разложим функцию в ряд Тейлора возле этой точки:



Отсюда следует приближённое равенство



Которое с учётом



Позволяет получить выражение



Приводящее к итерационному процессу следующего вида:



Выберем на отрезке[a; b] произвольную точку х0 – нулевое приближение. Затем найдем:


x1 = x0 - ,


потом x2 = x1 - .


Таким образом, процесс нахождения корня уравнения сводится к вычислению чисел xn по формуле:


xn = xn-1 - n = 1,2,3...... .


Процесс вычисления продолжается до тех пор, пока не будет выполнено условие:

xn - xn-1 < .



Очевидно, что метод Ньютона можно рассматривать как вариант метода простых итераций, при условии .


Геометрическая иллюстрация итерационного процесса метода Ньютона приведена на рисунке, из которого понятно, что каждое следующее приближение может быть определено из геометрических построений:



Этот процесс называется методом Ньютона.




Блок-схема метода Ньютона.











true false











































Геометрический смысл процедуры Ньютона



Пример. Требуется определить корни уравнения .

Согласно рассмотренному методу Ньютона строится итерационная процедура

Поскольку


Таким образом, применение процедуры метода Ньютона к заданному уравнению приводит к вычислительному процессу

Для а=2 ‘точное’ решение .Результаты расчётов приведены в таблице 3.2.

Номер итерации

Приближения решения

Приближения решения

1

2,0

-10,0

2

1,5

-5,1

3

1,416666667

-2,746078431

4

1,414215686

-1,737194874

5

1,414213562

-1,444238095

6

1,4142135624

-1,414525655

7

1,4142135624

-1,414213597

8

1,4142135624

-1,4142135624




Последовательность получения приближённого решения уравнения методом Ньютона.



3.3. Метод половинного деления.



Пусть уравнение F(x) = 0 имеет один корень на отрезке [a;b]. Функция F(x) непрерывна на отрезке [a; b].



Метод половинного деления заключается в следующем:



Сначала выбираем начальное приближение, деля отрезок пополам, т.е. х0 = (a+b)/2.


Если F(x)=0, то x0 является корнем уравнения. Если F(x) 0, то выбираем тот из отрезков, на концах которого функция имеет противоположные знаки. Полученный отрезок снова делим пополам и выполняем действия сначала и т.д.



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






Блок-схема метода половинного деления.








true false




false true










Теорема математического анализа метода половинного деления.

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

Пусть функция непрерывна на отрезке [,]. Процедура метода заключается в последовательном сокращении длинны отрезка для локализации корня уравнения. Первоначально проверяются значения заданной функции на концах отрезка.


В случае, если


,


Один из концов отрезка является корнем уравнения.


Пусть на концах отрезка значения функции имеют разные знаки, то есть имеет место соотношение ,

Вычисляется значение аргумента в середине отрезка,, и вычисляется значение

функции в этой точке.


Далее сравниваются знаки функций в точке например, в левой точке отрезка.


Если имеет место соотношение (рис.3.1), то корень следует искать на отрезке. В противном случае-корень разыскивается на отрезке, в результате выполненной операции исходный отрезок сократился вдвое.





















Схема метода половинного деления.



Далее, в зависимости от ситуации, отрезок вновь делится пополам,


И так далее.


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

-если функция достаточно ‘пологая’, имеет смысл использовать условие (рис. а).





-если функция ‘круто’ меняет своё значение, целесообразно применять условие(рис. b).






















b
















а


















Частные случаи поиска корня нелинейного уравнения


В случае, если заранее неизвестен характер ‘поведения’ функции, имеет смысл использовать одновременно оба условия для прекращения итерационного процесса.


Лабораторная работа № 5

Решение нелинейных уравнений.

Цель работы:
  1. Получение практических навыков в организации итерационных циклов.

  2. Знакомство с методами решения алгебраических и трансцендентных уравнений.

  3. Получение навыков составления блок-схемы алгоритма и определения данных.