Быстрая сортировка. Вычисления значений формул

Вычисления значений формул

Вычисления чисел Фибоначчи

Вычислить 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;

{замер времени исполнения функции}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: