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

Примеры программ с подпрограммами

Читайте также:
  1. Begin {начало основной программы} . . .
  2. Begin {начало основной программы} . . .
  3. II. Организация и программы Олимпийских игр.
  4. II. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ НАЧАЛЬНОГО ОБЩЕГО ОБРАЗОВАНИЯ
  5. II. Требования к результатам освоения основной образовательной программы начального общего образования
  6. II. Требования к результатам освоения ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ НАЧАЛЬНОГООБЩЕГО ОБРАЗОВАНИЯ
  7. II. Требования к структуре основной общеобразовательной программы дошкольного образования

Приведем примеры организации программ с подпрограммами.

Пример 4. Определить в матрице все элементы, которые являются числами Фибоначчи, и переписать их в одномерный массив. Полученный массив упорядочить по возрастанию.

Числа Фибоначчи образуются по следующему правилу: f0=1, f1=1, fi =fi-2 +fi-1 (i≥2).

Программирование проведем с использованием подпрограмм. Составим функцию, которая определяет, является ли число, переданное в качестве аргумента, числом Фибоначчи. Кроме того, составим процедуру упорядочения элементов одномерного массива по возрастанию. Для проверки правильности выполнения отдельных этапов алгоритма выведем получаемый массив чисел Фибоначчи до его упорядочения и после упорядочения. В этом случае целесообразным является составить процедуру вывода элементов одномерного массива, так как это действие приходится осуществлять дважды. Для придания программе большей универсальности будем использовать динамические массивы.

Проверку заданного числа на число Фибоначчи будем проводить путем последовательного сравнения этого числа со всеми числами Фибоначчи, начиная с 1. Процесс сравнения заканчивается в том случае, если заданное число оказалось числом Фибоначчи или если очередное число Фибоначчи превысило заданное число.

Для упорядочения чисел используется алгоритм “пузырьковой сортировки”.

 

program Procfib;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

matr=array of array of Integer;

mas=array of Integer;

var

a:matr; b:mas;

m,n,i,j,k:Integer;

 

//Функция, определяющая, является ли заданное число

//числом Фибоначчи

function Fib(a:Integer):Boolean;

var

f0,f1,f2:Integer;

begin

Result:=False;

f1:=0;f2:=1;

repeat

f0:=f1;

f1:=f2;

f2:=f0+f1;

if a=f2 then Result:=True

until Result or(f2>=a);

end; //конец функции Fib

 

//Процедура упорядочения элементов одномерного массива

//по возрастанию

procedure Upor(var b:mas);

var

i,k,c,n:Integer;

pr:boolean;

begin

n:=High(b);

k:=0;

repeat

k:=k+1;

pr:=True;

for i:=0 to n-k do

if b[i]>b[i+1] then

begin

c:=b[i];

b[i]:=b[i+1];

b[i+1]:=c;

pr:=False;

end;

until pr;

end; //конец процедуры Upor

 

//Процедура вывода элементов одномерного массива

procedure Wiwod(const b:mas);

var

i:Integer;

begin

for i:=0 to High(b) do

Write(b[i]:4);

WriteLn;

end; //конец процедуры Wiwod

 

begin //РАЗДЕЛ ОПЕРАТОРОВ

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

ReadLn(m,n);

SetLength(a,m,n);

Writeln('Введите матрицу по строкам');

for i:=0 to m-1 do

begin

for j:=0 to n-1 do

Read(a[i,j]);

ReadLn;

end;

WriteLn('Исходная матрица');

for i:=0 to m-1 do

begin

for j:=0 to n-1 do

Write(a[i,j]:4);

WriteLn;

end;

k:=0;

for i:=0 to m-1 do

for j:=0 to n-1 do

if Fib(a[i,j]) then

begin

k:=k+1;

SetLength(b,k);

b[k-1]:=a[i,j];

end;

if k=0 then

WriteLn('В матрице нет чисел Фибоначчи')

else

begin

WriteLn('Массив чисел Фибоначчи');

Wiwod(b);

Upor(b);

WriteLn('Упорядоченный массив чисел Фибоначчи');

Wiwod(b);

end;

ReadLn;

end.

 

Пример 5. Определить в каждой строке матрицы A(m,n), m<=10, n<=12, первое по порядку простое число и занести его в одномерный массив. Если в строке нет простых чисел, то для этой строки занести в массив нулевой элемент.

Поскольку максимальные размеры матрицы заданы в условии, то в программе целесообразно использовать статические массивы. Определение вида числа (простое или нет) произведем в подпрограмме-функции, которая возвращает значение “истина”, если число простое, и “ложь” в противном случае.

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

Поиск первого простого числа в каждой строке матрицы реализован в основной программе также с помощью цикла с заранее неизвестным числом повторений. Цикл выполняется, пока не найдено в этой строке простое число и пока не исчерпаны элементы строки. Если простое число найдено или все элементы строки уже проанализированы, то цикл следует завершить.

 

program funprost;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

mm=10; nn=12;

type

matr=array[1..mm,1..nn] of Integer;

mas=array[1..mm] of Integer;

var

a:matr; i,j,m,n:Integer;

b:mas; pr:boolean;

 

function Pros(a:Integer):Boolean;

var

i:Integer;

begin

i:=2;

Result:=True;

while Result and (i<=Sqrt(a)) do

if a mod i=0 then

Result:=False

else

i:=i+1;

end; //конец функции Pros

 

begin //РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

WriteLn('Введите количество строк и столбцов матрицы');

ReadLn(m,n);

SetLength(a,m,n);

WriteLn('Введите матрицу по строкам');

for i:=1 to m do

begin

for j:=1 to n do

Read(a[i,j]);

ReadLn;

end;

for i:=1 to m do

begin

j:=1;

pr:=False;

while(j<=n) and not pr do

begin

pr:= Pros(a[i,j]);

if not pr then j:=j+1;

end;

if pr then b[i]:=a[i,j]

else b[i]:=0;

end;

WriteLn('Исходная матрица');

for i:=1 to m do

begin

for j:=1 to n do

Write(a[i,j]:4);

WriteLn;

end;

WriteLn('Полученный массив');

for i:=1 to m do

Write(b[i]:4);

ReadLn;

end.

 

Пример 6. Составить процедуру, которая в каждой строке матрицы заменяет каждый положительный элемент минимальным отрицательным элементом из стоящих между предыдущим и текущим положительными элементами. Если положительный элемент стоит на первом месте в строке, то его не изменять. Если отрицательных элементов нет между положительными, то замену не производить.

Использовать составленную процедуру для матрицы W(m,n),m<=12,n<=15.

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

Преобразование матрицы осуществляется в процедуре. Суть выполняемых действий сводится к тому, что каждый элемент строки матрицы необходимо анализировать на положительность. При появлении положительного элемента надо найти минимальный элемент, стоящий между предыдущим положительным и текущим положительным. Если найденный минимальный элемент окажется отрицательным, то его следует поместить на место текущего положительного элемента. После нахождения положительного элемента необходимо запомнить индекс столбца, в котором он расположен.

 

program Proc_sam_pol;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

mm=12;nn=15;

type

matr=array[1..mm,1..nn] of Real;

var

w:matr;

i,j,m,n:Integer;

 

procedure Wiwod(a:matr;m,n:Integer);

var

i,j:Integer;

begin

for i:=1 to m do

begin

for j:=1 to n do

Write(a[i,j]:6:1,' ');

WriteLn;

end;

end;

 

procedure Samen(var a:matr;m,n:Integer);

var

i,j,jpol,l:Integer;

Min:Real;

begin

for i:=1 to m do

begin

jpol:=0;

for j:=1 to n do

begin

if a[i,j]>0 then

begin

Min:=a[i,jpol+1];

for l:=jpol+1 to j-1 do

if a[i,l]<Min then Min:=a[i,l];

if Min<0 then a[i,j]:=Min;

jpol:=j;

end;

end;

end;

end;

 

begin //РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

WriteLn(Rus('Введите количество строк и столбцов матрицы'));

ReadLn(m,n);

WriteLn(Rus('Введите матрицу по строкам'));

for i:=1 to m do

begin

for j:=1 to n do

Read(w[i,j]);

ReadLn;

end;

WriteLn(Rus('Исходная матрица'));

Wiwod(w,m,n);

Samen(w,m,n);

WriteLn(Rus('Преобразованная матрица'));

Wiwod(w,m,n);

ReadLn;

end.

 


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


Читайте в этой же книге: Процедуры | Список формальных параметров | Задания 5.1 для самостоятельной проработки | Обращение к функции | Пример 5.2 выполнения задания | Задания 5.2 для самостоятельной проработки | Рекурсивные подпрограммы | Пример выполнения задания на составление рекурсивной подпрограммы | Параметры - открытые массивы |
<== предыдущая страница | следующая страница ==>
Динамические массивы| Классификация имущества

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