Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Примеры решения задач с использованием функций

Читайте также:
  1. I. 3.2. Зависимость психических функций от среды и строения органов
  2. I. Предмет и задачи кризисной психологии
  3. I. Цели и задачи музейной практики
  4. I. Цели и задачи учебной дисциплины
  5. I. Цель и задачи производственной
  6. II. СИТУАЦИОННЫЕ ЗАДАЧИ
  7. II. Цель, задачи и основные направления деятельности Центра

Пример 1. Разработать 2 функции: 1 – с результатом логического типа, которая проверяет, все ли элементы главной диагонали квадратной матрицы одинаковы? 2 – с результатом целого типа, которая определяет максимальный злемент главной диагонали квадратной матрицы. Найти сумму максимальных элементов матриц A и B, если в обеих матрицах элементы диагоналей разные.

Program DIAGONAL;

$APPTYPE CONSOLE}

Uses SysUtils;

Сonst nmax=30;

Type Tmatr=array[1..nmax,1..nmax] of integer;

Function Proverka(Const x:Tmatr;nx:integer):boolean;

// Проверка, все ли элементы главной диагонали равны?

// C использованием переменной Result

Var i:integer;

begin

Result:=true;

for i:=2 to nx do

if x[1,1]<>x[i,i] then Result:=false;

end;

//

Function MaxDiag(Const x:Tmatr;nx:integer):integer;

// Поиск максимального элемента главной диагонали

// C использованием переменной Result

Var i:integer;

begin

Result:=x[1,1];

for i:=2 to nx do

if x[i,i]>Result then Result:=x[i,i];

end;

//

{

Function MaxDiag(Const x:Tmatr;nx:integer):integer;

// Поиск максимального элемента главной диагонали

// С использованием имени функции

// Необходимо описание дополнительной локальной переменной max

Var i:integer;

max:integer; // дополнительная переменная

begin

max:=x[1,1];

for i:=2 to nx do

if x[i,i]>max then max:=x[i,i];

MaxDiag:=max; // Присвоение результата имени функции

end;

}

//

Procedure VvodMatr(Var x:Tmatr; Var nx:integer);

// Ввод матрицы

Var i,j:integer;

begin

writeln(’Введите размер матрицы’);

readln(nx);

writeln(’Введите матрицу’);

for i:=1 to nx do

begin

for j:=1 to nx do read(x[i,j];

readln;

end;

end;

//

var // объявление глобальных параметров

a,b:Tmatr;

na,nb,i:integer;

Begin

writeln('введите матрицу А:');

VvodMatr(a,na);

writeln('введите матрицу B:');

VvodMatr(b,nb);

If (Proverka(a,na)=true) and (Proverka(b,nb)=true) then

begin

summa:=MaxDiag(a,na)+MaxDiag(b,nb);

writeln(’Сумма максимальных =’,summa:6);

end

else writeln(’Элементы одинаковы ’);

readln;

End.

 

Пример 2. Разработать функцию, которая формирует множество цифр, входящих в строку произвольной длины. Найти цифры, которые входят в каждую строку массива строк.

Program CIFRI;

$APPTYPE CONSOLE}

Uses SysUtils;

Сonst nmax=30;

Type Tmas=array[1..nmax] of string;

Tset=set of '0'..'9';

Function FormMn(s:string):Tset;

// Формирование множества цифр, входящих в строку

// C использованием переменной Result

Var

i:integer;

begin

Result:=[]; // пустое множество

for i:=1 to length(s) do

if s[i] in [’0’..’9’] then Result:=Result+[s[i]];

end;

//

var // объявление глобальных параметров

a:Tmas;

na,i:integer;

mnvezde:Tset; // результат-множество цифр, которые есть в каждой строке

Begin

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

readln(na);

writeln(’Введите строки’);

for i:=1 to na do readln(a[i]);

mnvezde:=[’0’..’9’];

for i:=1 to na do mnvezde:=mnvezde*FormMn(A[i]); // пересечение множеств

if mnezde=[] then writeln(’Нет цифр, входящих в каждую строку’)

else

begin

writeln(’Цифры, входящие в каждую строку’);

for ch:=’0’ to ’9’ do

if ch in mnvezde then write(ch:2);

writeln;

end;

readln;

end.

Пример 3. Разработать функцию, которая определяет победителя среди пловцов, данные о которых содержатся в массиве записей с полями: фамилия, имя, результат. Найти победителей на дистанциях 100 и 200 метров. Результаты спортсменов занесены в два массива: отдельно на 100 м и на 200 м. Победителям выдаются призы. Если победителем на обеих дистанциях является один и тот же спортсмен, приз ему увеличивается в 4 раза.

Program PLOVEC;

{$APPTYPE CONSOLE}

Uses SysUtils;

Const nmax=40;

Type Tsport=record

fam:string[10];

name:string[8];

rez:real;

end;

Tmas=array[1..nmax] of Tsport;

Procedure Vvod(Var a:Tmas; Var na:integer);

// Ввод массива записей

Var i:integer;

begin

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

readln(na);

for i:=1 to na do

begin

writeln(’введите фамилию:’); readln(a[i].fam);

writeln('введите имя:'); readln(a[i].name);

writeln('введите результат:'); readln(a[i].rez);

end;

end;

//

Function PobSor(Const a:Tmas; na:integer):Tsport;

// Поиск победителя в массиве

Var i:integer;

begin

Result:=a[1];

For i:=2 to na do

If a[i].rez<Resalt.rez then Result:=a[i];

end;

//

var // объявление глобальных параметров

a100,a200:Tmas;

na100,na200,i:integer;

p100,p200:Tsport;

Begin

Writeln(’Введите результаты на 100 м’);

Vvod(a100,na100);

Writeln(’Введите результаты на 200 м’);

Vvod(a200,na200);

p100:=PobSor(a100,na100); // победитель на 100 м

p200:=PobSor(a200,na200); // победитель на 200 м

if p100=p200 then

begin

writeln(’Победитель на обеих дистанциях:’);

writeln(p100.fam:12,’ ’:4,p100.name:10, ’ ’:4,p100.rez:8:3);

writeln(’Приз – 4000 евро’);

end

else

begin

writeln(’Победитель на дистанции 100 м:’);

writeln(p100.fam:12, ’ ’:4,p100.name:10, ’ ’:4,p100.rez:8:3);

writeln(’Приз – 1000 евро’);

writeln(’Победитель на дистанции 200 м:’);

writeln(p200.fam:12, ’ ’:4,p200.name:10, ’ ’:4,p200.rez:8:3);

writeln(’Приз – 1000 евро’);

end;

readln;

end.


Дата добавления: 2015-07-26; просмотров: 96 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Задания для самостоятельной работы| II.2. Калькуляция затрат труда и заработной платы.

mybiblioteka.su - 2015-2024 год. (0.011 сек.)