ОАиП часть 1. Лабораторная работа №1
.docУЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Факультет заочного, вечернего и дистанционного обучения
Специальность: программное обеспечение
информационных технологий
ЛАБОРАТОРНАЯ РАБОТА № 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.