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

ОАиП часть 1. Лабораторная работа №1

.doc
Скачиваний:
21
Добавлен:
01.04.2014
Размер:
57.86 Кб
Скачать

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Факультет заочного, вечернего и дистанционного обучения

Специальность: программное обеспечение

информационных технологий

ЛАБОРАТОРНАЯ РАБОТА № 1

ПО ОСНОВАМ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ

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

Для аргумента Х, изменяющегося от -0.6 с шагом 0.05, вычислить 20 значений функции:

Функцию f2(x) вычислить для ряда точностей . Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. Результаты расчетов свести в следующую таблицу:

x

f1(x)

f2(x)

N

f2(x)

N

f2(x)

N

….

P.S. Обе функции выражают одну и ту же зависимость Х от У. Функция с бесконечностью – это итерационный цикл с заданной точностью. Значения, вычисленные по каждой из функций, должны полностью совпадать.

Program Function;

uses crt;

const

eps1=0.01;

eps2=0.001;

eps3=0.0001;

type

mas=array[1..20] of real;

var

i, k:integer;

func, func1, func2, func3:mas;

n1, n2, n3:mas;

x, f:real;

begin

clrscr;

x:=-0.6;

for i:=1 to 20 do

begin

func[i]:=(x/2)+(x*x/4)+0.5*(1-x*x)*ln(1-x); (*функция F(x)*)

n1[i]:=0;

k:=1;

repeat (*находим функцию F1(x) пока разница

|F(x)-F1(x)|>eps1*)

if k mod 2 = 0 then (*если степень нечётная, умножаем на -1*)

f:=exp(ln(abs(x))*(k+2))/(k*(k+2))

else

f:=(-1)*(exp(ln(abs(x))*(k+2)))/(k*(k+2));

func1[i]:=func1[i]+f;

n1[i]:=n1[i]+1; (*увеличиваем n1 – счётчик количества

слагаемых F1*)

inc(k);

until (abs(func[i]-func1[i]))>eps1;

n2[i]:=0;

k:=1;

repeat (*находим функцию F2(x)*)

if k mod 2 = 0 then

f:=exp(ln(abs(x))*(k+2))/(k*(k+2))

else

f:=(-1)*(exp(ln(abs(x))*(k+2)))/(k*(k+2));

func2[i]:=func2[i]+f;

n2[i]:=n2[i]+1;

k:=k+1;

until (func[i]-func2[i])>eps2;

n3[i]:=0;

k:=1;

repeat (*находим функцию F3(x), если степень

отрицательная, то умножаем на -1*)

if k mod 2 = 0 then

f:=exp(ln(abs(x))*(k+2))/(k*(k+2))

else

f:=(-1)*(exp(ln(abs(x))*(k+2)))/(k*(k+2));

func3[i]:=func3[i]+f;

n3[i]:=n3[i]+1;

k:=k+1;

until (func[i]-func3[i])>eps3;

x:=x+0.05;

end;

x:=-0.6;

for i:=1 to 20 do (*вывод на экран полученных значений*)

begin

writeln(x:1:2,'|',func[i]:1:5,'|',func1[i]:1:5,'|',n1[i]:1:0,'|',

func2[i]:1:5,'|',n2[i]:1:0,'|',func3[i]:1:5,'|',n3[i]:1:0);

x:=x+0.05;

end;

readkey;

end.

Задание №2

Дана строка символов S, состоящая из латинских букв. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать исходную строку в строки S1 и S2 в соответствии с пунктами 1 и 2 задания. Если какая-либо из итоговых строк окажется пустой, выводить соответствующее сообщение.

п.1. - Напечатать слово, имеющее минимальную длину и отличное от последнего слова.

п.2. – Напечатать все слова, отличные от последнего слова, удалив все вхождения th, если такие есть.

Program Words;

uses crt;

var

str:string;

i:integer;

min,word,last,count:integer;

startpos, finishpos:integer;

begin

clrscr;

writeln('Vvedite stroku');

readln(str);

min:=0;

word:=0;

i:=1;

while str[i]<>' ' do (*первое слово – минимальное*)

begin

min:=min+1;

inc(i);

end;

count:=1; (*находим позицию, с которой начинается последнее слово*)

if str[length(str)]=' ' then

begin

i:=length(str)-1;

while str[i]<>' ' do

begin

inc(count);

dec(i);

end;

end

else

begin

i:=length(str);

while str[i]<>' ' do

begin

inc(count);

dec(i);

end;

end;

last:=count;

for i:=1 to (length(str)-last) do (*находим минимальное слово в строке*)

begin

if str[i]=' ' then

begin

if min>=word then

begin

min:=word;

startpos:=i-word+1;

finishpos:=i-1;

end;

word:=0;

end;

word:=word+1;

end;

writeln('S1:'); (*выводим минимальное слово на экран*)

for i:=startpos to finishpos do

write(str[i]);

writeln;

writeln('S2:'); (*удаляем все вхождения «th» из строки и

выводим её без последнего слова*)

for i:=1 to (length(str)-last) do

begin

if (str[i]='t') and (str[i+1]='h') then

begin

str[i]:=str[i+2];

i:=i+2;

end;

write(str[i]);

end;

readkey;

end.