Хелпикс

Главная

Контакты

Случайная статья





3. СРАВНЕНИЕ. 4. ДЛЯ ЧЕГО ИСПОЛЬЗОВАТЬ



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



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.