Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Список параметров процедуры (функции)




Список параметров процедуры (функции) состоит из описаний переменных и оформляется по тем же правилам, что и объявления переменных в разделе var, с двумя отличиями:

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

Если перед списком переменных ключевое слово var отсутствует, то в процедуру передается только значение переменной. То есть после выполнения процедуры значение таких переменных остается прежним, хотя внутри процедуры может и изменяться.

2) В списке параметров процедуры (функции) нельзя использовать описания интервалов, массивов и файлов. Они должны быть описаны заранее, в разделе описания типов type, а в списке параметров процедуры можно использовать их имена.

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

program matr(input, output);

{ Вводит с клавиатуры матрицу размером от 1х1 до MaxIndex x MaxIndex

Вычисляет сумму элементов каждого столбца и

Записывает результат в указанный файл в текстовой форме. }

 

Const

MaxIndex = 10; { Максимальный индекс массива }

 

Type

index = 1..MaxIndex; { Индекс массива }

matrix = array[ index, index ] of real; { Массив данных }

vector = array[ index ] of real; { Вектор результатов }

 

Var

Data: matrix; { Массив данных }

Result: vector; { Массив результатов }

Raw, { Число строк матрицы }

Colon: index; { Число столбцов матрицы }

cnt: integer; { Счетчик цикла }

query: integer; { Подтверждение }

 

procedure InpSize(var Raw, Col: index);

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

begin {InpSize}

 

repeat { Ввод числа строк с проверкой диапазона }

Write('Введите число строк матрицы (от 1 до ', MaxIndex, '):');

readln(Raw);

until (Raw >= 1) and (Raw <= MaxIndex);

 

repeat { Ввод числа столбцов с проверкой диапазона }

Write('Введите число солбцов матрицы (от 1 до ', MaxIndex, '):');

readln(Col);

until (Col >= 1) and (Col <= MaxIndex);

 

end; {InpSize}

 

procedure InpData(var Data: matrix; Raw, Col: index);

{ Процедура ввода данных }

Var

rw, cl: index; { Индексные переменные }

begin {InpData}

 

Writeln('Введите элементы матрицы (', Raw, ' строк, ', Col, ' столбцов)');

for rw:= 1 to Raw do

for cl:= 1 to Col do

Begin

Write(' Элемент [', rw, ', ', cl, ']= ');

readln(Data[ rw, cl ]);

end;

 

end; {InpData}

 

procedure OutData(Data: matrix; Raw, Col: index);

{ Вывод массива на дисплей }

Var

rw, cl: index; { Индексные переменные }

cnt: integer; { Счетчик выведенных элементов }

begin {OutData}

 

Writeln; { Пропустить строку }

Writeln('Введена матрица (', Raw, ' строк, ', Col, ' столбцов)');

Writeln; { Пропустить строку }

cnt:= 0;

for rw:= 1 to Raw do

for cl:= 1 to Col do

Begin

Write(' Элемент [', rw, ', ', cl, ']= ', Data[ rw, cl ]);

cnt:= succ(cnt);

if not odd(cnt) then Writeln;

end;

Writeln;

 

end; {OutData}

 

procedure CountRes(Data: matrix; var Res: vector; Raw, Col: index);

{ Вычисления результата }

Var

rw, cl: index; { Индексные переменные }

begin {CountRes}

Writeln; { Пропустить строку }

Writeln('Подсчет сумм элементов.');

Writeln; { Пропустить строку }

 

for cl:= 1 to Col do { Перебор столбцов }

Begin

Writeln('Столбец ', cl);

Res[ cl ]:= 0; { Начальное значение (очистка) }

for rw:= 1 to Raw do { Подсчет суммы }

Res[ cl ]:= Res[ cl ] + Data[ rw, cl ]; { Накопление суммы }

end;

end; {CountRes}

 

procedure OutResult(Res: vector; Col: index);

{ Процедура выода данных }

Type

fl_real = text; { Тип файла для вывода }

Var

ouf: fl_real; { Выходной файл }

fname: string; { Имя файла }

cnt: index; { Счетчик цикла }

 

begin {OutResult}

 

Writeln; { Пропустить строку }

Writeln('Программа запишет результат в указанный файл.');

Write('Имя файла? ');

readln(fname); { Читает строку с клавиатуры в переменную nm }

 

assign(ouf, fname); { Назначает имя файла файловой переменной }

reWrite(ouf); { Открывает файл на запись }

 

for cnt:= 1 to Col do { Запись элемента cnt в файл fl }

Write(ouf, Res[ cnt ], ' ');

close(ouf); { Закрыть файл }

 

Writeln; { Пропустить строку }

Writeln('Готово.');

 

end; {OutResult}

 

Begin

 

Writeln; { Пропустить строку }

Writeln('Программа:');

Writeln(' Вводит с клавиатуры матрицу размером от 1х1 до ', MaxIndex, 'x', MaxIndex);

Writeln(' Вычисляет сумму элементов каждого столбца и');

Writeln(' Записывает результат в указанный файл в текстовой форме.');

Writeln; { Пропустить строку }

repeat

InpSize(Raw, Colon); { Ввод размеров матрицы }

InpData(Data, Raw, Colon); { Ввод данных }

OutData(Data, Raw, Colon); { Вывод данных }

Write('Все правильно (1=да, 0=нет)?');

readln(query);

until query = 1;

 

CountRes(Data, Result, Raw, Colon); { Вычисление результата }

 

OutResult(Result, Colon); { Вывод результата }

 

end.

 

Задача №1.

Имеется матрица размерностью M x N. Написать программу, выполняющую следующие функции:

1. Ввод c клавиатуры элементов матрицы.

2. Обработку матрицы.

3. Вывод результатов обработки матрицы на дисплей.

Задача №2.

Написать программу, решающую задачу №1, оформив обработку матрицы процедурой.





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 495 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2481 - | 2215 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.