русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функции


Дата добавления: 2014-11-28; просмотров: 1190; Нарушение авторских прав


Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, идентификатор (имя) функции, заключенный в круглые скобки, необязательный список формальных параметров и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре аналогичный программе:

function <имя>(Формальные параметры): <тип результата>;

const …;

type …;

var . . . ;

begin

<операторы>

end;

В разделе операторов должен находиться, по крайней мере, один оператор, присваивающий имени функции значение. В точку вызова возвращается результат последнего присваивания.

 

Задачи

1. Даны фамилия, имя, отчество. Вывести на экран инициалы.

program zadacha_1;

uses crt;

var

s: string;

procedure fio(s1: string);

var

i: integer;

l: integer;

st: string;

begin

l:=length(s1);

i:=1;

st:=s1[1]+'. ';

for i:=1 to l do

begin

if s1[i]=' ' then

begin

st:=st+s1[i+1]+'. ';

end;

end;

writeln ('Новая строка');

writeln (st);

readln;

end;

begin

clrscr;

writeln ('Введите фио');

readln (s);

fio (s);

end.

2. Выяснить сколько раз встречается каждая буква алфавита в строке.

program zadacha_2;

uses crt;

var

st: string [100];

procedure alphavit (st: string);

var

s: string;

k, i,l,j,n: integer;

begin

s: ='абвгдеёжзиклмнопрстуфхцчшщьыъэюя';

l: =length(s);

n: =length (st);

for i: =1 to l do

begin

k: =0;

for j: =1 to n do

begin

if s[i] = st[j] then

begin

k:=k+1;

end;

end;

if k>0 then

begin

writeln('Буква ',s[i],' встречается в предложении ',k,'раз');

readln;

end;

end;

end;

begin

clrscr;

writeln ('Введите предложение');

readln (st);

alphavit (st);

readln;

end.

3. Процедура для решения квадратного уравнения.



program zadacha_5;

uses crt;

var

a,b,c: integer;

procedure kvur (x,y,z:integer);

var

d:integer;

x1,x2:real;

begin

d:=sqr(y)-4*x*z;

if d > 0 then

begin

x1:=(-y+sqrt(d))/2*x;

x2:=(-y-sqrt(d))/2*x;

writeln ('x1=',x1:5:2,' x2=',x2:5:2);

end;

if d=0 then

begin

x1:=-y/2*x;

x2:=x1;

writeln ('x1=',x1:5:2,' x2=',x2:5:2);

end;

if d < 0 then

begin

writeln ('Корней нет');

end;

readln;

end;

begin

clrscr;

writeln ('Введите кооффициенты квадратного уравнения');

readln (a,b,c);

kvur(a,b,c);

end.

4. Составить процедуру для нахождения суммы элементов некоторого столбца двумерного массива.

program zadacha_6;

uses crt;

var

m,n: integer;

procedure sum (l,k:integer);

var

a: array [1..30,1..30] of integer;

s,i,j: integer;

begin

for i:=1 to l do

for j:=1 to k do

begin

write('a(',i,',',j,')=');

readln (a[i,j]);

end;

s:=0;

for i:=1 to l do

begin

s:=s+a[i,2];

end;

write('сумма элементов второго столбца равна',s);

readln;

end;

begin

clrscr;

writeln ('Введите количество строк ');

readln (m);

writeln ('Введите количество столбцов ');

readln (n);

sum(m,n);

end.

5. Составить программу для проверки, является ли счастливым троллейбусный биле, т.е. сумма первых трех цифр билета равна сумме трех последних цифр билета.

program zadacha_7;

uses crt;

var

x: longint;

procedure stast (y: longint);

var

a,b,c,d,e,f,s1,s2:integer;

begin

y:=abs(y);

a:=y div 100000;

b:=y div 10000 mod 10;

c:=y div 1000 mod 10;

d:=y div 100 mod 10;

e:=y div 10 mod 10;

f:=y mod 10;

s1:=a+b+c;

s2:=d+e+f;

if s1=s2 then

writeln('Билет счастливый')

else

writeln('Билет не счастливый');

readln;

end;

begin

clrscr;

writeln('Введите шестизначный номер троллейбусного билета ');

readln(x);

stast(x);

end.

6. Дан одномерный массив A[N]. Найти max (a2, a4,….,a2k) + min(a1,a3,…,a2k+1).

program zadacha_8;

UsesCRT

Var

y:integer;

procedure sum(n:integer);

var

a:array[1..30] of integer;

i,min,max:integer;

s:integer;

begin

for i:=1 to n do

begin

write('a[',i,']=');

readln(a[i]);

end;

max:=a[2];

min:=a[1];

for i:=1 to n do

begin

if (a[i] mod 2=0) and (a[i]>max) then

begin

max:=a[i];

end;

if (i mod 2>0) and (a[i]< min) then

begin

min:=a[i];

end;

end;

s:=min+max;

writeln('s=',s);

readln;

end;

begin

clrscr;

writeln('введите количество элементов');

readln(y);

sum(y);

end.

7. Описать процедуру, которая находит все натуральные числа, не превосходящие заданного числа a, которые делятся на каждую из своих чисел

program zadacha_9;

uses crt;

var

m:integer;

procedure nat (var a: integer);

label l,q,w;

var

i,x,n,b:integer;

begin

for i:=1 to a do

begin

q: b:=i;

if i>a then

begin

goto w;

end

else

n:=i;

l: x:=n mod 10;

if x=0 then

begin

i:=i+1; goto q;

end

else

if b mod x=0 then

begin

if n=x then

begin

writeln (b);

readln;

i:=i+1; goto q;

end

else

n:=n div 10; goto l;

end

else

n:=n+1;

end;

readln;

w: end;

begin

clrscr;

writeln ('m=');

readln (m);

nat(m);

end.

8. Дана последовательность чисел 1, 2, 3…n (n не больше 100). Среди них найти автоморфное число (число и последние цифры его квадрата равны). Например: 5 и 25, 25 и 625.

program zadacha_10;

uses crt;

var

procedure schaste (n:integer); {начало подпрограммы}

var

i:integer; {переменная - счетчик, число}

q:integer; {переменная1}

w:integer; {переменная2}

begin

for i:=1 to n do

begin

if (i>0) and (i<10) then

begin

q:=Sqr(i); {переменной1 присваиваем квадрат числа}

w:=q mod 10; {переменной2 присваиваем остаток от

деления квадрата числа на 10}

if i=w then {если число равно остатку от деления, то…}

begin

writeln('число ',i,' автоморфное '); {…вывод автоморфного числа}

end;

end;

if (i>10) and (i<100) then {если число находится в промежутке от 10 до 100}

begin

q:=i*i;

w:=q mod 100;

if i=w then

begin

writeln('число ', i ,' автоморфное ');

end;

end;

end;

readln;

end;

begin {начало основной программы}

clrscr;

writeln('введите натуральное число ,',n,',

(до которого нужно проверять) не больше 100');

readln(b); {обращение к подпрограмме}

schaste(b);

end.

9. Написать программу нахождения большего и меньшего из трех чисел.

program zadacha_11;

program a1;

uses crt;

var

r:integer; {1-е число}

t:integer; {2-е число}

y:integer; {3-е число}

procedure god(r,t,y:integer); {процедура для нахождения макс. и мин. среди}

var

max:integer; {максимальное число}

min:integer; {минимальное число}

begin

if (r>=t) and (r>=y) then

max:=r;

if (t>=r) and (t>=y) then

max:=t;

if (y>=r) and (y>=t) then

max:=y;

if (r<=t) and (r<=y) then

min:=r;

if (t<=r) and (t<=y) then

min:=t;

if (y<=r) and (y<=t) then

min:=y;

writeln('Максимальное: ',max);

writeln('Минимальное: ',min);

readln;

end;

begin

clrscr;

write('Введите числа ');

readln(r,t,y);

god(r,t,y); {вызывание процедуры}

end.

 

10. Определить является ли число простым.

program zadacha_16;

Uses crt;

var

b,k:integer;

procedure prost(var a,k:integer);

var

i:integer;

begin

for i:=1 to a do

begin

if a mod i=0 then

begin

k:=k+1;

end;

end;

writeln('Количество делителей числа ',b,' равно ',k);

if k=2 then

begin

writeln('число ',b, ' является простым');

readln;

end

else

begin

writeln('число ',b, ' не является простым');

readln;

end;

end;

begin

clrscr;

write('Введите число - ');

read(b);

prost(b,k);

readln;

end.

11. Составть функции для нахождения длины окружности и площади круга.

program zadacha_3;

uses crt;

var

r: real;

dl: real;

pl: real;

funchion dlina (l: real): real;

var

c: real;

begin

c:=2*Pi*l;

end;

funchion plo (l: real): real;

var

s: real;

begin

s:=Pi*l*l;

end;

begin

clrsscr;

writeln ('Введите радиус');

readln (r);

dl:=dlina(r);

pl:=plo(r);

writeln ('Длина окружности равна ',dl);

writeln ('Площадь круга равна ',pl);

readln;

end.

12. Описать функцию, которая в массиве A[n] находит второе по величине число (т.е. меньше максимального, но больше всех других элементов)

program zadacha_4;

uses crt;

var

m,x:integer;

function mas (n:integer):integer;

var

a: array [1..30] of integer;

i,j,k: integer;

begin

randomize;

for i:=1 to n do

begin

a[i]:=random(100);

end;

for i:=1 to n do

begin

writeln ('a[',i,']=',a[i]);

read;

end;

for i:=1 to n do

for j:=1 to n-1 do

begin

if a[j] < a[j+1] then

begin

k:=a[j];

a[j]:=a[j+1];

a[j+1]:=k;

end;

end;

writeln ('второе по величине число=',a[2]);

readln;

end;

begin

clrscr;

write ('введите количество элементов в массиве');

readln (x);

m:=mas (x);

end.

13. Рассчитать значение х, определив и использовав необходимую функцию:

program zadacha_15;

uses crt;

var

n,n2,n1: integer; {числа}

x: real; {значение}

function x1(y1,y2: integer):real;

begin

x1:=(y1+sin(y1))/(sin(y2)+y2); {функция}

end;

begin

clrscr;

n:=1;

n1:=7;

n2:=3;

x:=x1(n,(n+3))+x1(n1,(n1-2))+x1(n2,(n2-1));

writeln('');

writeln ('x=(1+sin4)/(sin1+4)+(7+sin5)/(sin5+7)+(3+sin2)/(sin3+2) ');

writeln(x:2:5);

readln;

end.

14. Рассчитать значение х, определив и использовав необходимую функцию:

program zadacha_14;

uses crt;

var

f,l,t:integer;

x:real;

function k(n,m: integer):real;

begin

k:=(n+sin(m))/(sin(n)+m);

end;

begin

clrscr;

f:=2;

l:=1;

t:=4;

x:=k(f,(f+1))+k(l,(l+4))+k(t,(t+3));

writeln('Значение функции');

writeln('((2+sin(3))/(sin(2)+3)+(1+sin(5)/sin(1)+5)+(sin(7)+4)/sin(3)+7)');

writeln('x=',x:1:1);

readln;

end.

15. В последовательности чисел определить четные. Использовать функцию, определяющую четное число или нет.

program zadacha_13;

uses crt;

var

a: array [1..100] of integer;

n,i,z: integer;

function chot(m: integer):integer;

var

x: integer;

begin

if m mod 2=0 then

begin

writeln ('Число ',m,' чётное');

end;

end;

begin

clrscr;

write ('введите количество чисел в последовательности');

readln (n);

for i:=1 to n do

begin

write ('a[',i,']=');

readln (a[i]);

end;

for i:=1 to n do

begin

z:=chot(a[i]);

end;

readln;

end.

Контрольные вопросы:

1. Что такое процедура?

2. Чем отличаются процедуры без параметров от процедур с параметрами?

3. Что такое глобальные и локальные данные? Чем они отличаются?

4. Что такое параметр? Какие бывают параметры?

5. Как устанавливается связь между аргументами и параметрами?

6. Могут ли быть процедуры вложенными? Приведите примеры.

7. Как передать массив в процедуру с помощью метода аргумент-параметр?

8. Объясните разницу в передаче массива в качестве параметра:

const nn=100;

type mas=array[1..nn]of real;

var a:mas;

 

procedure p1(const b:mas);

begin {тело процедуры} end;

 

procedure p2(b:mas);

begin {тело процедуры} end;

 

procedure p3(var b:mas);

begin {тело процедуры} end;

 

procedure p4(b:array of real);

begin {тело процедуры} end;

 

begin {ввод массива а}

p1(a); {1}

p2(a); {2}

p3(a); {3}

p4(a); {4}

end.

Укажите, в какой точке - первой, второй или третьей - массив может изменить своё значение.

9. Установите, что будет напечатано в результате работы первого и второго варианта программы. Сравните результаты, сделайте выводы:

program FirstVariant; program SecondVariant;

var x:real; var x:real;

procedure writeX; procedure writeX;

var x:real;

begin write(x) end; begin write(x) end;

begin x:=pi; begin x:=pi;

writeX; writeX;

end. end.

 

10. Установите, вычисляют ли приведенные ниже процедуры одно и то же значение? Объясните своё решение. Посмотрите, как изменяются описания переменных p и q.

1) var n,m:integer; {исходные целые числа}

c:integer; {число сочетаний из n по m}

fn,fm,fnm:integer; {переменные для хранения n!, m! и (n-m)!}

p:integer; {хранит факториал}

q:integer; {исходное число для вычисления факториала}

procedure fact1;

var i:integer;

begin p:=1; for i:=1 to q do p:=p*i end;

begin write('Введите n и m ');

readln(n,m);

q:=n; fact1; fn:=p;

q:=m; fact1; fm:=q;

q:=n-m; fact1; fnm:=p;

write('число сочетаний = ',fn div (fm*fnm))

end.

2) var n,m:integer; {исходные целые числа}

c:integer; {число сочетаний из n по m}

fn,fm,fnm:integer; {переменные для хранения n!, m! и (n-m)!}

procedure fact2(q:integer;var p:integer);

var i:integer;

begin p:=1; for i:=1 to q do p:=p*i end;

begin write('Введите n и m ');

readln(n,m);

fact2(n,fn);

fact2(m,fm);

fact2(n-m,fnm);

write('число сочетаний = ',fn div (fm*fnm))

end.

 

11. Определите результат выполнения программы:

procedure XX(n : word);

begin write(n:4);

if n<150 then XX(2*n);

write(n:4)

end;

begin XX(1);

writeln;

write('Нажмите <Enter>');

readln;

end.

12. Что такое описание процедуры или функции и чем они отличается от оператора процедуры или указателя функции? Могут ли быть процедуры и функции вложенными? Приведите примеры

 

13. Напишите функцию без параметров и функцию с параметрами, которая находит номер максимального элемента последовательности, заданной формулой общего члена: ai=F(i,x). Вычисление очередного элемента последовательности оформите в виде функции.

 

 

14. Найдите все ошибки в следующем фрагменте программы:

type M = set of char;

function f(a,b : M; x:char):M;

begin if a*b<0

then a:=[x]

else if a<b

then a:=b+x

else if ord(x) in a-b

then a:=a-[x..'<='];

f:=a+b

end.

15. Укажите правильные описания функций для вычисления факториала:

1) function f(n:integer):integer;

begin f:=n*f(f(n-1) end;

2) function f(n:integer):integer;

begin if n=0 then f:=1 elsee f:=f(n+1)/(n+1) end;

3) function f(var n:integer):integer;

begin if n=0 then f:=1 else f:=f(n-1)*n end;

4) function f(n:integer):integer;

begin if n=0 then f:=1 else f:=n*(n-1)*f(n-2) end;

5) function f(n:integer):integer;

begin if n<=1 then f:=1 else f:=n*(n-1)*f(n-2) end;

6) function f(n:integer):integer;

begin if n=0 then f:=1 else f:=n*f(n-1) end.

16. Рассмотрите следующее описание функции:

function f(x,y:real):real;

begin if x>=y

then f:=(x+y)/2

else f:=f(f(x+2,y-1),f(x+1,y-2))

end.

Определите f(1,10). Каким более простым способом можно представить и вычислить f(a,b)?

17. Что будет напечатано после выполнения программы:

var a:integer;

function f(var x:integer):integer;

begin f:=x; x:=0 end;

begin a:=1;

writeln(f(a)-f(a)) end.

18. Напишите процедуру без параметров, процедуру с параметрами и функцию, которые находят номер максимального элемента последовательности, заданной формулой общего члена: ai=F(i,x). Вычисление очередного элемента последовательности оформите в виде функции.

 



<== предыдущая лекция | следующая лекция ==>
Раздел операторов основной программы | Задачи для самостоятельного решения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.608 сек.