Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Структура программы, содержащей процедуру (функцию)

 

program <имя>;

<описательная часть основной прогаммы>;

procedure <имя процедуры>;

(function <имя функции>;)

<описательная часть процедуры/функции>;

begin

<исполнительная часть процедуры/функции>;

end;

begin

<исполнительная часть основной программы>;

end.

 

Процедуры ( функции ) могут содержать любые операторы языка Паскаль и повторяют структуру основной программы, только текст процедуры ( функции) - заканчивается «;».

 

Процедуры

 

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

Первая строка любой процедуры:

 

procedure <имя>(<список формальных параметров>);

 

<имя> - уникальный идентификатор, строится по правилам составления имен простых переменных;

<список формальных параметров> - список имен переменных с указанием их типа, передающих информацию в процедуру и возвращающих результаты в основную программу.

Обращение к процедуре из основной программы:

 

<имя> (<список формальных параметров>);

 

<список фактических параметров> - список переменных или констант, разделенных запятыми.

Например:

 

procedure prim(x:real; var s:integer; z,y:integer);

 

Описан заголовок процедуры где:

x, z, y - передают информацию в процедуру;

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

Чтобы формальный параметр возвращал результат в основную, его необходимо описать с использованием служебного слова var.

Обращение к процедуре из основной:

prim (x, s, z, y); ( имена фактических параметров x, s, z,y - совпадают с именами формальных)

или

prim (a, s1, b, 5); ( именами фактических параметров a, s1, b – не совпадают с именами формальных, а последний фактический параметр является числовой константой)

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

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

 

Вложенные процедуры

 

Директива forward

 

Если одна подпрограмма использует другую, а та, в свою очередь, использует первую, возникает проблема размещения этих процедур в программе. Какую из них поместить в программе первой? В этих случаях прибегают к директиве forward.

Например:

procedure pp1(a,b:integer):forward;

procedure pp2(c: real); {Вторая процедура}

var x,y:integer;

begin

pp1(x, y);

end;

procedure pp1; {Первая процедура}

var z:real;

begin

pp2 (z);

end;

 

Задача.

 

Задан одномерный массив вещественных чисел. Найти максимальный элемент массива и определить его номер.

Составим программу с использованием двух процедур:

процедура ввода элементов массива;

процедура поиска максимального элемента и определение его номера.

Для передачи массива в процедуру введем пользовательский тип mas.

 

program PP;

type

mas=array[1..100] of integer; {пользовательский тип}

var { глобальные переменные }

a:mas;

max:real;

n,max,kmax:integer;

 

procedure input_mas(n:integer ; var a:mas );

var i:integer; {локальная переменная}

begin

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

end;

procedure max_m(n:integer; a:mas; var max,kmax:integer );

var i:integer;

begin

max:=a[1];kmax:=1;

for i:=1 to n do

if a[i]>max then

begin max:=a[i]; kmax:=i; end;

end;

begin

writeln(‘ Введите n<=100’) ; readln( n );

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

input_mas(n,a);

max_m(n,a,max,kmax );

writeln(‘max=’,max,‘kmax=’,kmax);

readln;

end.

 

Функции

 

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

Первая строка любой функции:

 

function <имя >(<список формальных параметров> ):<тип>;

 

<список формальных параметров> - список имен переменных с указанием их типа, передающих информацию в функцию;

<имя> - возвращает результат в основную программу;

<тип> - тип возвращаемого результата.

Обращение из основной программы к функции возможно в структуре какого либо оператора, например оператора присваивания:

 

<переменная>:= <имя> (список фактических параметров);

 

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

 

Задача.

Составить программу вычисления n! с использованием функции.

n! = 1* 2 * 3 * …* n

 

program factorial;

{описательная часть основной программы}

var

n,k:integer;

function fun(k:integer):integer;

{описательная часть подпрограммы}

var

p,i:integer;

begin

{исполнительная часть подпрограммы}

p:=1;

for i:=1 to k do

p:=p*i;

fun:=p;

end;

{ исполнительная часть основной программы }

begin

writeln('введите n');

readln(n);

for k: = 1 to n do

writeln(fun(k));

end.

 

n, k - глобальные переменные.

p, i - локальные переменные.

fun - имя функции, возвращает результат в основную программу.

Имя функции в теле функции в операторах присваивания может стоять только слева от знака «:=» , поэтому использована дополнительная переменная p для подсчета произведения.

 

Пример программы с использованием подпрограмм

Задача.

Задан двумерный массив целых чисел. Определить количество четных чисел в массиве.

Составим: процедуру ввода элементов массива;

функцию подсчета количества четных чисел;

процедуру вывода двумерного массива в виде матрицы.

 

  1. Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Количество строк n
Количество столбцов m
Индексы массива I,j

 

  1. Листинг программы.

 

program pp_1;

type

mas=array[1..10,1..10] of integer;

var

a:mas; n,m,i,j:integer ;

{ Процедура ввода массива }

procedure input_mas(n,m:integer; var a:mas);

begin

for i:=1 to n do

for j:=1 to n do readln(a[i,j]);

end;

{Функция подсчета количества нечетных чисел}

function kol( n,m:integer; a:mas ):integer;

var

k:integer ;

begin

kol:=0;

for i:=1 to n do

for j:=1 to n do

if not odd( a[ i,j ] ) then k:=k+1;

kol:=k;

end;

{Процедура вывода матрицы}

procedure print_mas(n,m:integer; a:mas);

begin

for i:=1 to n do

begin

for j:=1 to n do write( a[i,j],‘ ‘);

writeln;

end;

end;

{ Исполнительная часть основной программы }

begin

writeln(‘Введите n<=10 , m<=10’);

readln (n,m);

writeln(‘Введите элементы массива по строкам’);

input_mas(n,m,a);

writeln(‘Исходная матрица’);

print_mas(n,m,a);

writeln(‘Количество нечетных чисел =’,kol(n,m,a));

readln;

end.

Вопросы для самоконтроля

  1. В каких случаях прибегают к построению подпрограмм?
  2. В каком месте программы располагаются функции или процедуры?
  3. Что такое процедура?
  4. Какова структура процедуры?
  5. Как передается информация в процедуру?
  6. Каким образом возвращаются результаты работы процедуры в основную программу?
  7. Какое соответствие должно быть между формальными и фактическими параметрами?
  8. Какие переменные называются глобальными? Время существования глобальных переменных?
  9. Какие переменные называются локальными? Время существования локальных переменных?
  10. Когда используют директиву forward?
  11. В каких случаях целесообразно прибегать к построению функций?
  12. Как передается информация в функцию?
  13. Каким образом возвращается результат работы функции в основную программу?

 

Методические указания для выполнения практического задания №9. «Подпрограммы»

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

Задание:

1. В приложении 10 выбрать свой вариант задания.

2. Выполнить практическое задание №9, используя пример программы с использованием подпрограмм

3. Составить блок-схему алгоритма.

4. Написать программу и отладить ее по заранее подготовленному тесту.

5. Оформить задание в тетради для практических работ.

6. Результат выполнения программы предъявить преподавателю.

7. Ответить на вопросы самоконтроля.

8. Защитить выполненную работу у преподавателя.

Приложение 10. Таблица вариантов заданий

 

Составить программу с использованием процедуры и функции
Вариант Задание
В данной действительной матрице размером n*m поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что эти элементы единственны.
Дана действительная матрица размером n*m, все элементы которой различны. В каждой строке выбирается элемент с наибольшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.
Дана целочисленная матрица размером n*m. Написать программу, формирующую двумерный массив по следующему правилу: элементы первой строки – в порядке возрастания индексов столбцов, элементы второй строки – в порядке убывания индексов столбцов и т. д.
Дана действительная матрица размером n*m. Найти среднее арифметическое каждого из столбцов, имеющих четные номера.
Дана действительная матрица размером n*m. Все элементы с наибольшим значением заменить нулями (таких элементов может быть несколько).
Дана целочисленная матрица размером n*m. Написать программу, позволяющую находить сумму наибольших значений элементов ее строк.
Дана целочисленная квадратная матрица размером n*m. Написать программу, формирующую два одномерных массива. В один переслать по строкам верхний треугольник матрицы, включая элементы главной диагонали, в другой – нижний треугольник. Полученные массивы распечатать.
Дана целочисленная квадратная матрица размером n*m. Написать программу, позволяющую исключать из нее столбец, в котором расположен минимальный элемент главной диагонали.
Дана целочисленная квадратная матрица размером n*m. Написать программу, позволяющую поменять местами элементы, расположенные в верхней и нижней четвертях, ограниченные главной и побочной диагоналями (за исключением элементов, расположенных на диагоналях).
Задана действительная матрица размером n*m. Написать программу, позволяющую заменить все элементы, наименьшие в строке, на нули.
Задана целочисленная матрица размером n*m. Написать программу, позволяющую находить строки с наименьшей и наибольшей суммой и выводить их на печать.
Задана целочисленная квадратная матрица размером n*n. Написать программу, преобразующую исходную матрицу по правилу: начетные столбцы разделить на среднее значение диагональных элементов матрицы, а четные оставить без изменения.
Задана действительная квадратная матрица размером n*n. Вычислить сумму тех из ее элементов, расположенных на главной диагонали и выше ее, которые превосходят по величине все элементы, расположенные ниже главной диагонали. Если таких элементов нет, то ответом должно служить сообщение об этом.
Задана целочисленная квадратная матрица размером n*n (n - четное). Написать программу, позволяющую менять местами элементы первой и второй строк, элементы третьей и четвертой строк и т. д.
Даны две действительные квадратные матрицы размером n*n. Получить новую матрицу, прибавлением к элементам каждого столбца первой матрицы, произведения элементов соответствующих строк второй матрицы.
Даны две действительные квадратные матрицы размером n*n. Получить новую матрицу умножением элементов каждой строки первой матрицы на наибольшее из значений элементов соответствующей строки второй матрицы.
Дана целочисленная квадратная матрица размером n*n. Найти номера строк, все элементы которых – нули.  
Задан массив из целых чисел размером n и число L. Написать программу, формирующую из него матрицу, содержащую по L элементов в строке. Недостающие элементы заполнить нулями.  
Дана целочисленная матрица размером n*m (m - четное). Написать программу, позволяющую менять местами элементы первого и последнего столбцов, элементы второго и (n-1)-го столбцов и т. д. до среднего столбца (n - нечетно)
Дана действительная квадратная матрица размером n*n (n - четное), все элементы которой различны. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении с этими диагоналями.
Дана целочисленная матрица размером n*m. Найти максимальный по модулю элемент среди отрицательных элементов нечетных столбцов.
Дана целочисленная матрица размером n*m и число K. Написать программу, переставляющую строки и столбцы таким образом, чтобы максимальный по модулю элемент был расположен на пересечении K–ой строки и K–го столбца.
Дана действительная матрица размером n*m. Все элементы с наибольшим значением заменить нулями (таких элементов может быть несколько).
Дана целочисленная матрица размером n*m. Написать программу, формирующую двумерный массив по следующему правилу: элементы первой строки – в порядке возрастания индексов столбцов, элементы второй строки – в порядке убывания индексов столбцов и т. д.
Дана целочисленная квадратная матрица размером n*n. Написать программу, позволяющую исключать из нее столбец, в котором расположен минимальный элемент главной диагонали.
В данной действительной матрице размером n*m обнулить все отрицательные элементы. Подсчитать, количество обнуленных элементов.
Дана целочисленная квадратная матрица размером n*n. Найти номера строк, все элементы которых отрицательны.
Задана целочисленная квадратная матрица размером n*n (n - четное). Написать программу, позволяющую менять местами элементы первой и последней строк, второй и предпоследней строк и т. д.
Задана целочисленная матрица размером n*m. Написать программу, позволяющую находить строки с наименьшим и наибольшим произведением элементов. Вывести на печать номера этих строк.
Даны две действительные квадратные матрицы размером n*n. Получить новую матрицу умножением элементов каждой строки первой матрицы на наименьшее из значений элементов соответствующей строки второй матрицы.

 

Обработка строк текста

Символьные переменные

Значением переменных символьного типа является один символ. Каждому символу соответствует код символа – целое число в диапазоне то 0 до 255. Существует международная таблица ASCII-кодов.

Для описания символьных переменных используют слово char и они занимают 1 байт памяти.

var

c:char;

Над символьными переменными допустимы только две операции: присвоение и сравнение.

При сравнении символов сравниваются их коды.

Символьные константы задаются в апострофах:

c:=‘A’;

Последнее изменение этой страницы: 2017-09-14

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...