Лекция 7.++Массивы в качестве параметров подпрограмм. Файлы. (1272451)
Текст из файла
1Воробьева И.А. «Информатика. Язык Паскаль»6.4. Массивы в качестве параметров подпрограммВажно! Параметром процедуры может быть любая переменнаяпредопределенного типа, это означает, что для передачи в процедурустатического массива или матрицы в качестве параметра, тип егодолжен быть описан заранее.Действительно, тип integer или real – это простыепредопределенныетипы.Массивыжеотносятсякструктурированным типам переменных, к которым также относятсязаписи,множества,файлы.Общийметодполученияструктурированных переменных – это объединение компонентов,принадлежащих к произвольным (возможно тоже составным)типам, в один составной тип.Статический массив может содержать как простые однотипныеэлементы, такие как integer, real, char…, так и сложные – массивзаписей или массив массивов (один из видов представления матрицы).Никто не запретит нам объявить и массив из матриц, а это ужетрехмерный массив.
Более того, число компонент в массивах мыопределяем с помощью типа диапазон произвольным способом,например: «array[1..n, 1..m] of real» или «array[1..5] of integer».Подобные определения никак не относятся к предопределеннымтипам, они называются пользовательскими типами, которые мы задаемсами.Таким образом, прежде чем использовать статические массивы вкачестве параметров подпрограмм, необходимо описать нужные типыв специальном разделе type программы.Примеры различных описанийconstn=10; m=7;type// ---------- раздел описаний пользовательских типов -----12Воробьева И.А.
«Информатика. Язык Паскаль»massR = array[1..n] of real;// тип – одномерный массивиз n вещественных чиселmassI = array[1..5] of integer; // тип – одномерный массивиз 5 целых чиселmatrixR= array[1..n, 1..m] of real; // тип – матрица вещественныхчисел размерности (n, m)QmatrixI= array[1..3, 1..3] of integer; // тип – квадратная матрицавещественных чисел размерности (3, 3)Замечание 6.1.
Матрицу можно задать и другим способом. Например,если считать ее не двумерным массивом однотипных элементов, аодномерным массивом, каждый элемент, которого сам являетсяодномерным массивом.Пример объявления матрицы в форме «массива массивов»VECTOR = array[1..m] of real; // тип – вектор из m вещ. чиселDUB= array[1..n] of VECTOR; // массив из n одномерных массивовтипа VECTORилиn строк длины m (матрица [n, m])илиn столбцов длины m (матрица [m, n])VAR//---------------- объявление переменных ---------------Vec: VECTOR;// вектор из m вещ. чиселM: DUB;// массив из n одномерных массивов типа VECTORrez: real;grad: matrixR; // матрица вещественных чисел размерности (n, m)Number: massI;// одномерный массив из 5 целых чиселR1, R2: massR; // одномерные массивы R1 и R2 из n вещ. чиселKol: QmatrixI ;// объявлена матрица размерности (3, 3)//---------------- раздел процедур и функций ----------------------23Воробьева И.А. «Информатика.
Язык Паскаль»procedure primer1 (out A: massR);procedure primer2 (var B: massI, var Sum: QmatrixI);function primer3 (const C1, C2: matrixR): integer;procedure primer4 (var M1: DUB);BEGIN//------------- раздел операторов ----------…primer1 (grad);primer2 (Number, Kol);rez:= M[1][2]; // присвоили вещественное числоVec:=M[2];// присвоили вещественный вектор длины m…END.Последнее, что важно напомнить о работе с массивами и матрицами вподпрограммах – это то, что параметры в подпрограммы могут бытьпереданы двумя основными способами: по значению (параметр-значение);procedure primer5 (A: massR, i, j: integer, x: real); по адресу переменной (параметр-переменная и параметрконстанта).procedure primer4 (var M1: DUB);function primer3 (const C1, C2: matrixR): integer;procedure primer1 (out A: massR);Если массив достаточно большого размера, он должен передаваться вподпрограмму только как параметр-переменная или параметрконстанта: если массив в ходе выполнения подпрограммы не изменяется, егонужно описать как параметр-константу; если изменяется – как параметр-переменную.Входные параметры-массивы не описывают как параметры-значения,поскольку это приводит к неоправданному расходу памяти и временина бесполезное копирование.34Воробьева И.А.
«Информатика. Язык Паскаль»Напоминание. Параметр-константа – это не совсем то, что вы привыкливидеть в разделе программы Const. Параметр-константа – этопараметр, который передают в подпрограмму, точно зная, что ондолжен использоваться только как информация, но не долженизменяться.
Своего рода, защита от случайного изменения тойпеременной, которая не должна изменяться подпрограммой, т.е.параметр-константа в физическом представлении может бытьизменяемой переменной.В функции, которая решает задачу «поиск максимума в матрице»,элементы матрицы, передаваемой в функцию, должны быть защищеныот случайного изменения (т.е.
параметр-константа). А в процедуре,которая решает задачу «заменить все отрицательные элементыматрицы нулями», передаваемую матрицу можно и даже нужноменять, т.е. передавать ее надо как параметр-переменную.Подумайте: почему для решения первой задачи была выбранафункция, а для решения второй – процедура?6.5. Примеры программ с массивами в качестве параметровподпрограммТаблица 6.6. Задачи на разработкупрограммы с использованием указанной в задании подпрограммыОбщая задачаСоставить программу с разработкой и использованием указанной взадании подпрограммы.Подпрограмма не должна использовать «внутри себя»глобальных переменных. Все необходимое для работыподпрограммы и передачи результата должно осуществлятьсячерез параметры подпрограммы.Индивидуальная задачаДля каждой из двух матриц: A (2 строки, 4 столбца) и B (3 строки, 3столбца) вычислить и вывести количество отрицательныхэлементов.
Также определить, в какой из них среднееарифметическое значение прочих элементов имеет большуювеличину (вывести одно из сообщений: “больше в A”, “больше в B”45Воробьева И.А. «Информатика. Язык Паскаль»или “одинаково”).ПодзадачаДля вычисления количества отрицательных элементов исреднего арифметического значения прочих элементов матрицыиспользовать подпрограмму.началоввод A(na,ma), B(nb,mb)вывод A(na,ma), B(nb,mb)na, ma, AПОДСЧЕТ ОТРИЦ. ЭЛ. ИСР. АРИФМ.
НЕОТРИЦ.ЭЛЕМЕНТОВ в «A»Otr, SredAвывод Otrnb, mb, ВПОДСЧЕТ ОТРИЦ. ЭЛ. ИСР. АРИФМ. НЕОТРИЦ.ЭЛЕМЕНТОВ в «В»Otr, SredBвывод Otr+SredA < 0ANDSredB < 0−+SredA > SredB+−SredA < SredB−«БОЛЬШЕ в A»«Not SredA, SredB»«БОЛЬШЕ в В»конец«ПОРОВНУ»56Воробьева И.А. «Информатика. Язык Паскаль»Головной модульprogram SRAVN;{--------------определения, необходимые для подпрограммы----------------}constn= 3; // максимум 3 строкиm= 4; // максимум 4 столбцаtypeMatrix = array[1..n, 1..m] of integer;{---------------------сюда позже вставим БЛОК *, а пока только -------------------------------------------заголовок функции с заглушкой-----------------------------}//_________ описание функции//_________ Mt – матрица//_________ n1, m1 – ее размерность//_________ Sred - среднее арифметическое элементов «≥0»//_________ возвращает: Otr - число отрицательных элементовFunction Otr (const Mt: Matrix; n1, m1: byte; out Sred: real): integer;BeginSred:= -1;// заглушка «все элементы отрицательны»Otr:=n1*m1; // значит Sred= -1 – нет неотрицательных элементовEnd;{---------- теперь доопределяем переменные, которые нам нужны в ----------------------------------головном модуле----------}CONSTna=2; ma=4; // реальные размеры матрицы Аnb=3; mb=3; // реальные размеры матрицы BVARA: Matrix=( // объявлена матрица размерности (3, 4),(0, 1, 10, -2),// 1-я строка(10, -10, 0, -7),// 2-я строка(0, 0, 0, 0)// 3-я строка; // НО наша матрица A(2,4) (добавлены нули в фиктивные элементы)67Воробьева И.А.
«Информатика. Язык Паскаль»B: Matrix=(// объявлена матрица размерности (3, 4)(7, -1, 10, 0),// 1-я строка(10, -10, 0, 0),// 2-я строка(0, 0, 0, 0)// 3-я строка; // НО наша матрица B(3,3) (добавлены нули в фиктивные элементы)SredA, SredB: real; // Ср. арифм. неотрицат. элементов в A и BBEGINwriteln('--------Поиск в матрицах А и В ---------'); // заголовок//--------- вывод матриц А(na,ma) и B(nb,mb)// -------- самостоятельно ---------------//--------- вызов решающей подзадачи для Аwriteln('Число отрицательных в А = ', Otr(A, na, ma, SredA):3 );//--------- вызов решающей подзадачи для Bwriteln('Число отрицательных в B = ', Otr(B, nb, mb, SredB):3 );IF (SredA < 0) AND (SredB < 0) then writeln( 'В матрицах A и В всеэлементы отрицательны')ELSEif SredA > SredB then writeln( 'Больше в A')else if SredA < SredB then writeln( 'Больше в B')else writeln( 'Поровну') ;END.Определим все обобщенные данные, которые нам потребуютсядля подзадачи, на основе реальных данных исходной задачи:n1 – максимальное число строк в матрице,m1 – максимальное число столбцов в матрице,;;78Воробьева И.А.
«Информатика. Язык Паскаль»i – индекс строк,Mt–;прямоугольнаяj – индекс столбцов,(n1,m1)матрицаэлементов, причем значения элементов:изцелочисленных;Otr – число отрицательных элементов в матрице,Sred – среднее арифметическое неотрицательных (в матрице,ситуации;;) элементов, и введем признак альтернативной– отсутствие неотрицательных элементов вматрице;Цветом выделены переменные, которые для функции будутвходными и выходными и, следовательно, будут ее параметрами иливозвращаемыми значениями.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.