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

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

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

Пример 1. В трех одномерных массивах A,B и C содержатся результаты, показанные студентами трех групп в беге на 100 метров. Найти наилучший результат этих спортсменов. Для решения задачи составить процедуры: ввода массива и поиска наименьшего в массиве.

Program Pobeda;

{$APPTYPE CONSOLE}

Uses SysUtils;

Const nmax=10;

Type

Tmas=array[1.. mmax] of real; // тип описания одномерного массива

Procedure VvodMas(var x:Tmas; Var nx:integer);

// ввод элементов массива

Var i:integer;

begin

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

readln(nx);

writeln('введите элементы массива:');

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

readln;

end;

Procedure PoiskMin(Const x:Tmas; nx:integer; var xmin:real);

//поиск минимального элемента массива

Var i:integer;

begin

xmin:=x[1];

for i:=2 to nx do

if x[i]<xmin then xmin:=x[i];

end;

 

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

a,b,c,d:Tmas;

na,nb,nc:integer;

min:real;

Begin // основная программа

writeln('введите элементы массива A:');

VvodMas(a,na); //вызов процедуры ввода массива

writeln('введите элементы массива B:');

VvodMas(b,nb); //вызов процедуры ввода массива

writeln('введите элементы массива C:');

VvodMas(c,nc); //вызов процедуры ввода массива

PoiskMin(a,na,d[1]); // вызов процедуры поиска минимального в А

PoiskMin(b,nb,d[2]); //вызов процедуры поиска минимального в B

PoiskMin(c,nc,d[3]); //вызов процедуры поиска минимального в C

PoiskMin(d,3,min); //вызов процедуры поиска минимального в D

writeln;

writeln('Наилучший результат - ', min:8:2);

readln;

End.

Пример 2. В массиве строк, в которых слова разделены пробелами, найти слова, которые есть в каждой строке. Для решения задачи составить процедуры:

  1. выделения слов из каждой строки и занесения их в массив без повторения,
  2. поиска одинаковых слов в двух массивах слов и формирования из этих слов нового массива.

Program SLOVA;

{$APPTYPE CONSOLE}

Uses SysUtils;

Const nmax=10;

Type

Tmas=array[1..mmax] of string; // тип описания одномерного массива

Procedure VidelSlov(s:string; Var y:Tmas; Var ny:integer);

// выделение слов из строки S и занесение их в массив Y

Var i,j:integer;

slovo:string; // дополнительная строка для формирования слова

pr:boolean; // результат проверки, впервые ли встретилось слово?

// true – впервые, false — повторно

begin

ny:=0;

slovo:=’’;

s:=s+’ ’; // добавление пробела для универсальности работы алгоритма

For i:=1 to length(s) do

If s[i]<>’ ’ then s:=slovo+s[i]

еlse begin

// проверка, впервые ли встретилось слово?

pr:=true;

For j:=1 to ny do

If slovo=y[j] then pr:=false;

If pr=true then

begin

ny:=ny+1;

y[ny]:=slovo;

end;

slovo:=’’;

end;

end;

//

Procedure Sravnenie(Const x,y:Tmas;nx,ny:integer; Var z:Tmas; Var nz:integer);

// поиск одинаковых слов в двух массивах слов и формирования из этих слов //нового массива

var i,j:integer;

begin

nz:=0;

for i:=1 to nx do

for j:=1 to ny do

if x[i]=y[j] then

begin

nz:=nz+1;

z[nz]:=x[i];

end;

end;

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

a,b,c,d:Tmas;

i,na,nb,nc,nd:integer;

begin

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

readln(na);

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

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

// выделение слов из строки A[1] и занесение их в массив B

VidelSlov(a[1],b,nb);

For i:=2 to na do

begin

// выделение слов из строки A[i] и занесение их в массив C

VidelSlov(a[i], c, nc);

// поиск одинаковых слов в массивах B и C и формирования из

// этих слов массива D

Sravnenie(b,c,nb,nc,d,nd);

b:=d; // копирование D массива в массив B

nb:=nd;

end;

if nd=0 then writeln(’Нет одинаковых слов’)

else

begin

writeln(’В каждой строке есть слова:’);

for i:=1 to nd do writeln(d[i]);

end;

readln;

end.

Пример 3. Дан массив записей о студентах с полями: фамилия, имя, год и месяц рождения. Составить массивы записей о студентах, родившихся в каждом квартале года. Для решения задачи составить процедуры ввода массива записей, вывода массива записей, поиска студентов, родившихся в заданном квартале.

Program MasZapis;

{$APPTYPE CONSOLE}

Uses SysUtils;

Const nmax=40;

Type Tstud=record

fam:string[10];

name:string[8];

year:1986..2001;

month:1..12;

end;

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

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].year);

writeln('введите месяц рождения:'); readln(a[i].month);

end;

end;

//

Procedure Vivod(Const a:Tmas;na:integer);

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

Var i:integer;

begin

writeln(’№’:3,’ ’:4,’Фамилия’:12,’ ’:4,’Имя’:10,’ ’:4,’Год’:6, ’ ’:4,’Месяц’:6;');

for i:=1 to na do

writeln(i:3, ’ ’:4,a[i].fam:12, ’ ’:4,a[i].name:10, ’ ’:4,a[i].year:6, ’ ’:4,a[i].month:6);

end;

//

Procedure Poisk(Const a:Tmas; na:integer; number:byte; Var b:Tmas;Var nb:integer);

// поиск студентов, родившихся в заданном квартале

Var i:integer;

begin

nb:=0;

for i:=1 to na do

case number of

1: if (a[i].month=1) or (a[i].month=2) or (a[i].month=3) then

begin

nb:=nb+1;

b[nb]:=a[i];

end;

2: if (a[i].month=4) or (a[i].month=5) or (a[i].month=6) then

begin

nb:=nb+1;

b[nb]:=a[i];

end;

3: if (a[i].month=7) or (a[i].month=8) or (a[i].month=9) then

begin

nb:=nb+1;

b[nb]:=a[i];

end;

4: if (a[i].month=10) or (a[i].month=11) or (a[i].month=12) then

begin

nb:=nb+1;

b[nb]:=a[i];

end;

end;

end;

//

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

a,k1,k2,k3,k4:Tmas;

na,n1,n2,n3,n4:integer;

begin

Vvod (a,na);

writeln(’Список студентов ’);

Vivod (a,na);

Writeln;

Poisk(a,na,1,k1,n1);

if n1=0 then writeln(’Нет студентов, родившихся в 1 квартале’)

else

begin

Writeln(’Cписок студентов,родившихся в 1 квартале:’);

Vivod(k1,n1);

end;

Writeln;

Poisk(a,na,2,k2,n2);

if n2=0 then writeln(’Нет студентов, родившихся во 2 квартале’)

else

begin

Writeln(’Cписок студентов,родившихся во 2 квартале:’);

Vivod(k2,n1);

end;

Writeln;

Poisk(a,na,3,k3,n3);

if n3=0 then writeln(’Нет студентов, родившихся в 3 квартале’)

else

begin

Writeln(’Cписок студентов, родившихся в 3 квартале:’);

Vivod(k3,n1);

end;

Writeln;

Poisk(a,na,4,k4,n4);

if n4=0 then writeln(’Нет студентов, родившихся в 4 квартале’)

else

begin

Writeln(’Cписок студентов, родившихся во 4 квартале:’);

Vivod(k4,n1);

end;

readln;

end.


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


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

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