Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

WinRAR ZIP archi / 2011_Лабораторные по инф_паскаль_Ч2

.pdf
Скачиваний:
30
Добавлен:
14.02.2015
Размер:
264.15 Кб
Скачать

Компьютерная программа для реализации метода половинного деления имеет вид:

program N_18_2;

var

A, B, C, EPS: real;

{A,B-концы отрезка[A,B];EPS - абсолютная дoпустимая погрешность результата.}

function func_x(x: real): real; begin

func_x := cos(2 / x) - 2 * sin(1 / x) + 1 / x; end;

begin

write('Задайте интервал:'); readln(a, b);

if func_x(a) * func_x(B) < 0 then {Проверка на-

личия корней на заданном интервале} begin

write('дoпустимая погрешность='); readln(EPS);

while ABS(A - B) > EPS do { Начало цикла ПОКА} begin

writeln(' A=', A:12:8, ' B=', B:12:8); C := (A + B) / 2;

if func_x(C) <> 0 then begin

if func_x(C) * func_x(B) < 0 then A := C

else

B := C

end else

a := c;

end;

writeln(' Корень=', A:12:8); end

else

writeln(' Интервал задан неверно! На данном интервале нет корней');

end.

21

Метод простых итераций

Предположим, уравнение f(x) = 0 при помощи некоторых тождественных преобразований приведено к виду x=φ(x).

Далее на отрезке [a,b] выбирается точка x0 и последовательно вы-

числяется: x1= φ (x0), x2= φ (x1), ... xi+1= φ (xi) ……. ( такие вычис-

ления по одной и той же формуле xi+1= φ (xi), когда полученное на предыдущем шаге значение используется на последующем шаге, называет-

ся итерациями),

до тех пор, пока соблюдается условие xi+1-xi>e, где e - заданная погрешность вычисления корня x*. Итерационный процесс сходится

(т.е. xix*, при i → ∞ ), если φ'(x)<1 при а<x<b.

Начало

'Задайте начальное значение Х='

x

'Задайте абсолютную дoпустимую погрешность

eps

s := 0

ABS(f - x) > EPS

Y f, ' '

s := s + 1 x := f

calc(x)

'Корень уравнения x=', x:12:8, ' Число итераций=', s

'Проверка x-sin(x)-0.2 =', x - sin(x)

-0.2:10:4

Конец

Рисунок 18.4 Схема алгоритма метода простых итераций

22

Программа, реализующая метод итераций, имеет вид:

program N_18_3;

{Решение уравнения x-sin(x)-0.2=0 методом итераций}

var

f, x, eps, s: real;{описание глобальных переменных}

procedure calc(y: real); begin

f := sin(y) + 0.2; end;

begin

write('Задайте начальное значение Х='); readln(x);

write('Задайте абсолютную дoпустимую погрешность

результата=');

 

readln(eps);

 

s := 0;

 

while ABS(f - x) > EPS do

 

begin

 

writeln(f, ' ');

 

s := s + 1; {Счетчик числа итераций}

 

x := f;

 

calc(x);

 

end;

Чис-

writeln('Корень уравнения x=', x:12:8, '

ло итераций=', s);

 

writeln('Проверка x-sin(x)-0.2 =', x - sin(x) - 0.2:10:4);

end.

В подпрограмме записано выражение φ (x)=sin(x)+0,25 соответствующее решению трансцендентного уравнения x-sin(x)-0,25=0. Для начального значения x0=1.2 и погрешности ε=0.000001 получим x=1.1712297.

Задания 1: решить три из приведенных в таблице 18.1 уравнений (по выбору)

методом половинного деления c допустимой погрешностью ε =10-5.

23

2: Решить три из приведенных в таблице 18.2 уравнений (по выбору) методом итераций c допустимой погрешностью ε=10-5.

Таблица 18.1 Уравнения для решения

 

Уравнение

 

отрезок

корень

1

æ 1ö

 

 

1.9311083

 

2,8 - cosç ÷

- x = 0

[1.5;2.5]

 

 

 

è xø

 

 

 

2

 

 

 

 

 

[2;3]

2.2985362

3sin( x) + 0,35x - 3,8 = 0

 

 

 

 

 

 

 

 

3

0,25x3 + x -12502, = 0

[0;2]

1.0001143

4

3x - 4 log(x) - 5 = 0

[2;4]

3.2299594

 

 

 

 

 

5

æ 1

ö

[1.2;2]

1.3076627

 

x - 2 + sinç

 

÷ = 0

 

 

 

 

 

 

 

 

 

è x

ø

 

 

6

1- x + sin(x) - log(1+ x) = 0

[0;1.5]

1.1474389

 

 

 

 

7

x2 - log(1+ x) - 3 = 0

[2;3]

2.0266893

8

log(x) - x +18, = 0

[2;3]

2.8458682

 

 

 

 

 

 

 

 

9

2

 

 

 

 

[0;1]

 

 

0,8e−x - 2x2 = 0

 

0,5451310

 

 

 

 

 

 

 

10

ex2 - 2x2 = 0

[0;1]

0,5398353

 

 

 

 

 

 

 

11

sin(x) - e−x2

= 0

[0,π/2]

0,6805982

 

 

 

 

 

 

 

12

2x2 - 5,2x +13, = 0

[1;3]

2,3198039

 

 

 

 

 

 

 

13

3,7x2 +18,x - 6 = 0

[1;2]

1,0532092

 

 

 

 

 

 

 

Контрольные вопросы

1.Опишите метод итераций. Условие прекращения процесса.

2.Опишите метод половинного деления. Условие прекращения процесса.

3.В каких случаях целесообразно использовать процедуры и функции пользователя?

4.Описание процедуры в программе. В чем отличие фактических параметров от формальных?

5.Определение функции в программе. Вызов функции. В чем отличие вызова функции от вызова процедуры?

24

Лабораторная работа №19 Обработка текстовых данных (2 часа).

Цель работы: получение практических навыков разработки и выполнения компьютерной программы.

Предмет и содержание работы: разработка и отладка компьютерной программы для обработки текстов.

Технические средства и программное обеспечение: персональный компьютер с операционной системой Windows™, система PascalABC.NET.

Часто возникает необходимость в обработке текста (поиск слов, подсчет числа символов и строк и т.д.). Для этого в Pascal ABC имеется целый ряд средств и специальных функций.

Строковые константы представляют собой любой набор символов, заключенный в апострофы.

const Name = 'Mike';

Строки имеют тип string, состоят из набора последовательно расположенных символов char и используются для представления текста.

Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы длины строки, то генерируется исключение.

Операция + для строк означает конкатенацию (слияние) строк. Например: 'Петя'+'Маша' = 'ПетяМаша'.

Операция += для строк добавляет в конец строки - левого операнда строку - правый операнд. Например:

var

s: string := 'Петя';

begin

s += 'Маша'; // s = 'ПетяМаша' writeln(s);

end.

25

Пример 1. Конкатенация двух строк.

Начало

A := 'Иван'

B := ' Петров'

C := A + B

c

Конец

Рисунок 19.1 - Схема алгоритма конкатенации двух строк

program N_19_1;

var

A, B, C: string;

begin

A:= 'Иван';

B:= ' Петров';

C:= A + B; writeln(c);

end.

напечатает текст: Иван Петров

К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый символ в строке. Обращение к нулевому символу s[0] считается ошибочным.

Имеется 6 операторов сравнения (<, <=, =, <>, >=, >), которые позволяют сравнивать литеры. Сравнение производится по ASCII-кодам символов: большим считается тот символ, код которого больше.

Стандартные процедуры и функции для работы со строками

Length(s) - возвращает длину строки s.

Copy(s,index,count)- возвращает count символов, начиная с index позиции строки s).

Delete(s,index,count) - удаляет в строке s count символов начиная с позиции index.

26

Insert(subs,s,index) - вставляет подстроку subs в строку s с пози-

ции index.

Pos(subs,s) - возвращает позицию первой подстроки subs в строке s (или 0 если подстрока не найдена).

SetLength(s,n) - устанавливает длину строки s равной n. Val(s,v,code) - преобразует строку s к числовому представлению и

записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в code возвращается ненулевое значение.

IntToStr(i) - преобразует целое число в строку.

UpperCase(s) - возвращает строку s, преобразованную к верхнему регистру.

LowerCase(s) - возвращает строку s, преобразованную к нижнему регистру.

Ниже приведено несколько примеров программ для обработки текстов. Их назначение и принцип работы ясны из схем алгоритмов и.текстов программ Пример 2. Выбор заданного числа символов из строки с заданного места.

Начало

'Строка:' s

len := Length(s)

'Длина строки-"', s, '" ', len:3, 'символов'

'Сколько символов выбрать?' count

'С какой позиции?' index

'Пожалуйста:', copy(s, index, count)

Конец

Рисунок 19.2 - Схема алгоритма выбора заданного числа символов из строки с заданного места.

27

program N_19_2;

var

s: string;

index, count, len: integer;

begin write('Строка:'); read(s);

len := Length(s);

writeln('Длина строки-"', s, '" ', len:3, ' символов'); write('Сколько символов выбрать?');

read(count);

write('С какой позиции?'); read(index);

writeln('Пожалуйста:', copy(s, index, count)); end.

Пример 3. Подсчет числа слов в тексте, начинающихся на букву К

Начало

'Подсчет числа слов в тексте, начинающихся на букву К(рус)' 'Строка:'

S

S := ''+ S len := length(s)

'Длина строки-"', S, '"', len:3, 'символов'

1

Рисунок 19.3 - Схема алгоритма подсчет числа слов в тексте, начинаю-

щихся на букву К(часть 1)

28

1

N := 0

i := 1 to len

Y

copy(s, i, 2) = ' К'

N := N + 1

'На букву К начинается', N:4, 'слов'

Конец

Рисунок 19.3 - Схема алгоритма подсчет числа слов в тексте, начинаю-

щихся на букву К(часть 2)

program N_19_3;

var

S: string;

index, count, len, I, N: integer;

begin

writeln('Подсчет числа слов в тексте, начинающихся на букву К(рус)');

write('Строка:'); read(S);

S := ' ' + S;

len := length(s);

writeln('Длина строки-"', S, '"', len:3, ' символов'); N := 0;

for i := 1 to len do

if copy(s, i, 2) = ' К' then N := N + 1; writeln('На букву К начинается', N:4, ' слов');

end.

29

Пример 4 Подсчет общего числа слов, слов, начинающихся на заданную букву, числа букв в тексте.

Начало

 

'Строка:'

1

s

 

 

'В заданном тексте-', N:4, 'слов'

'Буква:'

'На букву ', d, 'начинается',

n1:4, 'слов'

d

'В заданном тексте-', N2:4,

 

 

'букв'

d := UpperCase(d)

 

S := UpperCase(s)

Конец

len := length(s)

 

S := ''+ S

 

i := 1 to len + 1

 

(copy(s, i, 1) = ' ') and

Y

(copy(s, i + 1, 1) <> ' ')

 

 

N += 1

(copy(s, i, 2) = (' ' + d))

Y

 

 

n1 := n1 + 1

(copy(s, i, 1) <> ' ')

Y

 

 

N2 := N2 + 1

1

Рисунок 19.4 - Схема алгоритма подсчета общего числа слов, слов, начинающихся на заданную букву, числа букв в тексте.

30