Паскаль лекции. Лекции Паскаль. Программа на языке машинных команд (ее называют объектной). Краткое знакомство
Скачать 1.24 Mb.
|
2 : if leap(yy) then Dmonth:=29 else Dmonth:=28; end; end; procedure Tomorrow(td : data; var nd : data); { опр-ние завтрашней даты} begin { если это не последний день месяца} if td.d<> Dmonth(td.m, td.y) then with nd do begin d:=td.d+1; m:=td.m; y:=td.y; PDF created with pdfFactory Pro trial version www.pdffactory.com 95 end; else { если это последний день месяца} if td.m=12 then { если это декабрь} with nd do begin d:=1; m:=1; y:=td.y+1; end; else { если это не декабрь} with nd do begin d:=1; m:=td.m+1; y:=td.y; end; end; BEGIN writeln(‘ Введите сегодняшнее число, месяц и год’); readln(dat.d, dat.m, dat.y); Tomorrow(dat,next); writeln(‘ завтра будет’); writeln(next.d, ‘.’, next.m, ‘.’, next.y); END. §24. Приближенные вычисления. Задача 1. Вычислить приближенное значение суммы 1 + x/1! + x 2 /2! + x 3 /3! + ... Считаем, что нужное приближение получено, если вычислена сумма нескольких слагаемых, и очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число . Для решения задачи мы должны выполнить следующие действия: 1) получить очередное слагаемое (назовем его а); 2) сравнить абсолютную величину слагаемого а с и, в зависимости от результата сравнения, либо продолжить, либо прекратить вычисления. Program p; var a: real; PDF created with pdfFactory Pro trial version www.pdffactory.com 96 x : real; : real; i : integer; S : integer; begin readln(x, ); i:=1; a:=1; S:=0; WHILE a> DO begin S:=S+a; i:=i+1; a:=a*x/i; end; writeln(‘ приближенное значение суммы=’,S:4:2) end. Задача 2. Рассмотрим часто встречающуюся задачу приближенного решения уравнения f(x)=0, где f(x) - заданная функция. Решить уравнение - значит найти такое значение х * , при котором f(x * )=0. Поиск решения осуществляется на интервале [a;b], причем f(a)<0, а f(b)>0. Используем метод деления пополам. Находим точку с=(а+b)/2 - середина отрезка. Если f(c)>0, то границу b изменяем на значение с, а если f(с)<0, то изменяем а. Процесс продолжаем, пока длина интервала не будет меньше заданной точности. Пусть f(x)=x 2 -2, т.е. мы попытаемся найти значение квадратного корня из 2. program popolam; const eps=1.0E-3; var a,b,c:real; Function eg(x,y:real):boolean; begin Eg:=Abs(x-y) F:=Sgr(x)-2 end; BEGIN Writeln(‘ введите интервал’); readln(a,b); Y f(x) 0 a c b X PDF created with pdfFactory Pro trial version www.pdffactory.com 97 if F(a)*F(b)>0 then writeln(‘ на этом интервале мы не можем найти решение уравнения’) else begin while Not Eg(a,b) do begin c:=(a+b)/2; if F(c)>0 then b:=c else a:=c end; writeln(‘ Результат ’,a) end; readln end. Можно с помощью этой программы решить уравнения : x 2 -6x+5=0 x-cosx=0 x-lnx-2=0 2x 3 -9x 2 -60x+1=0 Задача 3. Пусть непрерывная положительная на отрезке [a,b] (a0 <... На каждом из отрезков [x i ,x i+1 ] как на основании, построим прямоугольник с высотой f(x i ). Площадь прямоугольников мы умеем находить. Сумма площадей всех прямоугольников даст приближенное значение площади фигуры: S приб =(b-a)/n*(f(x 0 )+....f(x n-1 )) Естественно, что чем мельче будет разбиение, тем точнее мы подсчитаем площадь фигуры. Для отладки программы возьмем функцию f(x 2 ) на отрезке [1,2]. Площадь фигуры равна 2,333.... program trapez; const eps=1.0E-3; var a,b,s,dx :real; i,n : integer; Function eg(x,y:real):boolean; begin Y 0 a x 1 x 2 ........ x n-2 x n X PDF created with pdfFactory Pro trial version www.pdffactory.com 98 Eg:=Abs(x-y) F:=Sgr(x) end; BEGIN Writeln(‘ введите интервал и число частей для разбивки’); readln(a,b,n); x:=a; dx:=(b-a)/n; s:=0; For i:=1 to n-1 do begin s:=s+F(x); x:=x+dx; end; writeln(‘ Результат = ’,(b-a)/n*s); readln; end. Вычислить площадь криволинейных трапеций для следующих функций: f(x)=1/(1+x) [0,1] f(x)=1/x [1,3] f(x)=sinx [0, /2] Задача 4. Для вычисления элементарных функций в математике широко распространено представление этих функций в виде некоторых бесконечных сумм. Не вдаваясь в обоснование таких представлений, приведем некоторые их них : e x =1 + x + x 2 /2! + x 3 /3! + ... + x n /n! + ... sinx=x - x 3 /3! + x 5 /5! - x 7 /7! +...+ (-1) n x 2n-1 /(2n+1)! +.... cosx= 1 - x 2 /2! + x 4 /4! - x 6 /6! +...+ (-1) n x 2n /(2n)! +.... ln(1+x)=x - x 2 /2 + x 3 /3 - x 4 /4 + ...+ (-1) n+1 x n /n + ..... (-1 Вычисляют и суммируют слагаемые до тех тор, пока очередное слагаемое не станет по абсолютной величине меньше или абсолютное значение разности между соседними слагаемыми не станет меньше . Полученную сумму и принимают за приближенное значение функции. Вычисли функцию sinx. Program rad; PDF created with pdfFactory Pro trial version www.pdffactory.com 99 const eps=1.0E-3; var x,sn,ss : real; p, n : integer; {p - используется для чередования знака слагаемого} Function Eg(x,y;real):boolean; begin Eg:=Abs(x-y) BEGIN writeln(‘ Введите значение х’); readln(x); ss:=0; sn:=x; n:=1; p:=1; Repeat ss:=sn; { предыдущее значение слагаемого} { новое значение слагаемого} n:=n+2; p:=-1*p; sn:=ss+p*F(n,x) Until Eq(ss,sn) or (n>=12); Writeln(‘ Результат=’,sn); readln end. Задача 5. Метод Монте-Карло для приближенного вычисления площади. Пусть есть какая-нибудь фигура на плоскости, расположенная внутри стандартного квадрата со сторонами параллельными координатным осям. Пусть про любую точку квадрата мы можем быстро узнать, попадает ли эта точка внутрь фигуры или нет. Для выбора точек используют случайные числа Random(x) Если вызвать функцию много раз подряд, то множество полученных чисел будет равномерно распределено по отрезку [0,a] Program ss; var n: integer; { количество точек} a : integer; { длина стороны квадрата} m, i : integer; PDF created with pdfFactory Pro trial version www.pdffactory.com 100 x,y : real; begin writeln(‘ введите кол-во точек и сторону квадрата’); readln(n,a); m:=0; for i:=1 to n do begin x:=Rondom(a); y:=Random(a); if точка(x,y) внутри квадрата then m:=m+1 end; S:=(m/n)*a*a writeln(‘ Результат ’,s); end. PDF created with pdfFactory Pro trial version www.pdffactory.com 101 §25. Основы структурного программирования 1. Следование ветвлений if then else ; if then else ; 2. Вложение ветвлений : if then if then else else if then else s 3. Вложение следования в ветвление if then begin ; ; end else begin ; ; end; 4. Вложение обхода в ветвление if then begin if then end else if then begin - end писать обязательно, иначе смысл программы будет PDF created with pdfFactory Pro trial version www.pdffactory.com 102 другим. Если begin end не ставить то получим if then if then else if then 5. Вложение циклов в ветвление. If then for do else while do begin end 6. Следование циклов for do begin end; while do begin end; 7. Вложение следования в цикл. For do begin end; PDF created with pdfFactory Pro trial version www.pdffactory.com 103 8. Вложение ветвлений в цикл for do if then else 9. Вложение цикла в цикл for do for do begin end 10. Комплексный пример if then begin ; for do if then begin end else while s do begin if i then l; m else k ; end; s PDF created with pdfFactory Pro trial version www.pdffactory.com 104 Содержание стр §1 Начало программирования на языке Паскаль 2 §2 Алфавит языка Паскаль. Переменные. Типы переменных. 4 §3 Оператор присваивания. Оператор ввода-вывода. Арифметические операции. Стандартные функции. 6 §4 Структура программы 10 §5 Разветвляющие алгоритмы 14 §6 Оператор цикла с параметром 19 §7 Базовые циклические алгоритмы. 23 §8 Цикл с предусловием While 25 §9 Оператор цикла с постусловием Repeat 29 §10 Эксперимент с программой. Лабораторная работа 32 §11 Оператор варианта выбора 34 §12 Типы определенные пользователем 36 §13 Вложенные циклы 38 §14 Одномерные массивы 39 §15 Обработка символьных массивов 46 §16 Двумерные массивы 51 §17 Подпрограммы . 58 Процедуры 59 Функции 64 §18 Примеры рекурсивного программирования 67 §19 Графика 71 Материалы для дополнительного чтения §20 Файловый тип данных 78 §21 Текстовые файлы 82 §22 Множества 85 §23 Комбинированный тип данных (записи) 92 §24 Приближенные вычисления 96 §25 Основы структурного программирования 102 PDF created with pdfFactory Pro trial version www.pdffactory.com |