|
|||
3. СРАВНЕНИЕ. 4. ДЛЯ ЧЕГО ИСПОЛЬЗОВАТЬ ⇐ ПредыдущаяСтр 2 из 2 3. СРАВНЕНИЕ Чаще всего требуется, чтобы некоторый результат возвращался обратно, для данной функции придется добавить еще один параметр типа результат (наличие слова varсообщает об этом).
Procedure sravnit( a: integer; b: integer; varres: integer); Begin if( a > b ) then begin writeln( a, ' > ', b ) res: = 1; end else if( a < b ) then begin writeln( a, ' < ', b ); res: = -1; end else begin writeln( 'числаравны', a ); res: = 0; end; end; Процедура опять же выводит результат сравнения, но также в переменной resвозвращает 1, если a> b, -1, если a< b, и -1 в противном случае(они равны).
Эту процедуру легко можно заменить функцией:
functionsravnit( a: integer; b: integer) of integer; var res: integer Begin if ( a > b ) then begin writeln( a, ' > ', b ) res: = 1; end else if ( a < b ) then begin writeln( a, ' < ', b ); res: = -1; end else begin writeln( 'числаравны', a ); res: = 0; end; sravnit: = res; end; В этом случае получается что процедура
Переходит в функцию =
Внутри нее создается переменная res, которая не видна снаружи, но зато работает внутри и формирует результат. 4. ДЛЯ ЧЕГО ИСПОЛЬЗОВАТЬ
Как сказано в определении подпрограмм: для многократного вызова. На самом деле не хватает одного весомого слова - для возможного многократного вызова. Подпрограмма может быть вызвана в ходе выполнения программы 1, 2, n, и даже 0 раз. Например: я, пока пишу этот материал, ни разу не пользовался подпрограммами создания содержания текстового документа или изменения границ листа. Но эти подпрограммы имеют место в программе.
Большой пример: сразу напишу всю программу (задача из головы), она скорее всего будет похожа даже на одну из ваших задач.
Задача: для двух матриц A и Bсоздать массивы соответственно массивы Cи D по правилу: i-й элемент массива равен среднему арифметическому неотрицательных элементовi-й строки соответствующей матрицы.
Код будет лежать в файле primer. pas
Комментарии по программе:
Основная программа выполняет ввод матриц ( по отдельности ). Если верно введены размеры матрицы, то производится ввод самой матрицы, а в дальнейшем и действия обработки над ней, в противном случае пользователю выводится сообщение. В подпрограммы подаю дополнительно параметр c: char–это буква, которую надо вывести для «лучшего» вывода. Вывод матрицы делать не стал, но вообще очень неплохо бы его иметь, особенно когда будем с файлами тягаться.
Функция vvod_razmerovдолжна передать наружу считанные данные, поэтому они имеют оператор var. Процедураvvod_matricyизменяет и передает наружу саму матрицу, ее размеры нам нет нужны менять. Процедура vivod_massivaвыводит массив на экран и не меняет данных. Функция sr_strokiдля нужной строки получает число по правилу: -1 если плохой строки, иначе соответствующее среднее арифметическое. Процедура form_masне меняет матрицу и ее размеры, но передает наружу измененный массив, поэтому у массива есть оператор var.
ОЧЕНЬ ХОРОШО, когда программа умеет отсеивать некорректные данные ( в нашем случае неверные размеры ). НЕОБХОДИМО ЗАПОМНИТЬ, что МАССИВ = {МАССИВ( область памяти) + ЕГО РАЗМЕРЫ } В этом примере можно вводить свои размеры массива, и они совершенно не обязательно соотвествуют максимальному размеру Nmax.
Действия на экране:
Удачные данные: Введите оба размера матрицы A в диапазоне 1.. 100 3 2 Введите 1-ю строку матрицы A -1 -1 Введите 2-ю строку матрицы A 2 4 Введите 3-ю строку матрицы A -4 5 Введите оба размера матрицы B в диапазоне 1.. 100 2 3 Введите 1-ю строку матрицы B 1 2 0 Введите 2-ю строку матрицы B 3 -4 -5 Массив C: 0. 00 3. 00 5. 00 Массив D: 1. 50 3. 00
Не совсем удачные данные:
Введите оба размера матрицы A в диапазоне 1.. 100 -1 5 Ошибка: Неверное количество строк Введите оба размера матрицы B в диапазоне 1.. 100 1 1 Введите 1-ю строку матрицы B Обработка матрицы А не проходила Массив D: 1. 00
|
|||
|