Вычисления значений формул
Вычисления чисел Фибоначчи
Вычислить N!
Рекурсия
Оператор with
With – Имя записи – do – оператор
With st1 do
Begin
Name:=’Иван’;
Suname:=’Смирнов’;
Date.day:=24;
Date.mounth:=2;
Date.year:=1992;
End;
With st1 do
Begin
Name:=’Иван’;
Suname:=’Смирнов’;
With date do
day:=24;
mounth:=2;
year:=1992;
End;
With st1,date do
Begin
Name:=’Иван’;
Suname:=’Смирнов’;
day:=24;
mounth:=2;
year:=1992;
End;
Записи с вариантами
Пример1:
Type
Rec=record
{Описание фиксированных частей}
V1,v2:integer;
{Описание вариативной части}
Case n:word of
0: (Список полей)
1: (Список полей)
End;
Case – имя селектора -: тип - of – Коннст -: - (- Имя компонента -: - Тип -)
Type
texamW= (history,algebra,matan);
texamS= (matan,TP,DM);
tstudent = record
name,suname:string;
Date:record
Day:1..31;
Mount:1..12;
Year:word;
End;
Group:word;
Case session:byte of
1: (marksw:array[texamw] of 2..5);
2: (markss:array[texams] of 2..5);
End;
Var
St1:tstudent;
Begin
St1.name:=’Иван’;
St1.suname:=’Смирнов’;
St1.date.day:=24;
St1.date.mouth:=2;
St1.date.year:=1992;
St1.group:=114;
St1.Session:=1;
St1.marksW[history]:=3;
St1.marksW[algebra]:=4;
St1.session:=2;
St1.Markss[tp]:=5;
Sizeof(st1)= 52 байта (Функция размера записи в байтах);
Рекурсия – это вызов подпрограммы самой себя
1) Прямая
2) Косвенная
Прямая(пример):
Procedure p;
Begun
………..
P;
…………
End;
Косвенная(пример)
Procedure p(x:byte);
Begin
…………..
Q(x);
…………..
End;
Procedure q(y:byte);
Begin
…………..
P(y);
……………..
End;
Для того что бы не нарушить правила опережающего описания
Procedure q(x:byte); forward
Procedure p(y:byte);{С полным списком формальных параметров}
Begin
…………..
Q(x);
…………..
End;
Procedure q;{Без списка формальных параметров}
Begin
…………..
P(y);
……………..
End;
Procedure popendog;
Begin
Writeln(‘У попа была собака’);
Writeln(‘Он ее любил’);
Popendog;
End;
Обязательным является условие выхода из рекурсии
Begin
If ….then popendog
End.
Function fact(n:byte):longint;
Begin
If n>0 then fact:=n*fact(n-1)
Else fact:=1;
End;
Begin
writeln(fact(3));
End;
Function fib(n:byte):longint;
Begin
If n=0 then fib=0;
Else if n=1 then fib:=1
Else fib:=fib(n-1)+fib(n-2);
End;
Begin
Writeln(fib(3));
End.
<Формула>=<Цифра> |(<Формула> <Операция> <Формула>)
<Цифра>=0..9
<Операция>= +,-,*
Function f:longint;
Var c,op:char; left,right:integer;
Begin
Read(c);
If (c>=’0’) and (c<=’9’)
Then f:=ord(c) – ord(‘0’)
Else
Begin
Left:=f: read(op); righr:=f;
Case op of
‘+’:f:=left+right’
‘-‘:f:=left-right;
‘*’:f:left*right;
End;
Read(c);
End;
End;
Begin
Writeln(f);
Readln;
End;
Написать функцию для вычисления значения формулы преобразовав f(x) так, что бы она вычисляла результат деления и работала с многоразрядными числами
Идея быстрой сортировки:
1) Выбрать элемент, который назовем опорным
2) Разделить массив на 2 части. Левую (в которой содержатся элементы не больше опорного) и Правую(В которой содержатся элементы не меньшими опорного)
3) Повторить действия для левой и правой части
Const n =____;
Type TVector=array[1..n] of integer;
Procedure quicksort(var x:tvector; l,r:word);
Vat y,buf:integer;
I,j:integer;
Begin
Y:=x[(l+r) div 2];
I:=l;
j:=r;
while i<=j do begin
while x[i]<y do inc(i);
while y[j]>y do dec(j);
if i<=j then
buf:=x[i]; x[i]:=x[j]; x[j]:=buf;
inc(i); dec(j);
end;
end;
if i<j then quickSort(I,J);
else auicksort(I,r);
end;
begin
input(x);
quicksort(x,1,n);
output;
end.
Д.З. Посчитать время работы сортировки «qs» для 100к элементов, 200к, 400к.
T:=gettickcount;
T:=gettickcount-t;
{замер времени исполнения функции}