Нетипізовані параметри-змінні
Var <ідентифікатор> - таке описування формального параметру дозволяє виконати посилання на змінну будьякого типу. При цьому тип змінної відсутній, тобто не співпадає ні з жодним із типів до операції приведення типів.
<тип> - в заголовку безпосередньо може бути визначенийтільки простий тип. Будьякий стуктурований тип визначається тільки через ідентифікатор типу.
Приклад: неприпустимо:function f(а,в:array[1..10] of real):integer;
повинно бути:type t=array[1..10] of real; function f(а,в:t):integer;
але для окремого елементу: function f1(а,в:real):boolean; begin if a>b then f1:=true else f1:=false; end; {виклик для і-тих елементів масивів} writeln(f1(a[i],b[i]));
Приклад: возведення у цілий степінь
var a:real; function power(factor:real;expo:integer):real; var count:integer; rez:real; begin if expo=0 then power:=1 else begin rez:=factor; for count:=2 to abs(expo) do rez:= rez*factor; if expo<0 then power:=1/rez else power:=rez end end; { головна програма } begin : {обчислити x=2a**5+a**3+1} x:=2*power(а,5)+power(a,3)+1; : end.
Приклад: функція повертає номер символа, з якого починається n-те входження підрядка subs у рядок s. Одночасово повертається загальне число входжень count. При невдалому пошуку повертається значення 0.
program example; var c:byte; { загальне число входжень підрядка у рядок } function posN(subs,s:string;n:byte;var count:byte):byte; var p,pn:byte; begin count:=0; pn:=0; repeat p:=pos(subs,s); if count<n then inc(pn,p); inc(count); delete(s,1,p); until p=0; dec(count); if N<=count then posN:=pn else posN:=0; end; { головна програма } begin writeln('3-я позиція noo у Boonoonoonoos починається з символа', PosN('noo','Boonoonoonoos',3,С):3); writeln(' Всього знайдено входжень:',С); readln; end.
Приклад: розробити функцію, що обчислює кількість елементів в одновимірному масиві, що перевищують надане Р, та змінює їх на 0.
Program help; Type vec=array[1..50] of real; Var v:vec; I,n:byte; P:real; Function sump(n:byte;var a:vec):byte; Var i,s:byte; Begin S:=0; For i:=1 to n do If a[i]>p then begin S:=s+1; A[i]:=0; End; Sump:=s; End;
Begin {введення елементів масиву} REPEAT WRITE('Введіть вимірність масиву <=100'); READLN(n); UNTIL n<=100 WRITELN('Введіть ',n,'елементів масиву'); FOR i:=1 TO n DO READLN(v[i]); {виведення кількості елементів, що перевищують надане значення} writeln(‘кількість елементів = ’,sump(n,v)); {виведення нового вектору} for i:=1 to n do writeln(v[i]:5:1); end.
|