Главная/Раздел  4

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подпрограммы.
Параметры - сложные типы данных

Рассмотренные в предыдущей лабораторной работе категории параметров не исчерпывают всех вопросов передачи информации в Pascal программах. Использование в качестве параметров сложных типов данных имеет свои конкретные особенности. Рассмотрим особенности использования в качестве параметра подпрограмм данных типа массив.

Массивы и строки открытого типа

В Turbo Pascal 7.0 в качестве параметров можно использовать массивы и строки открытого типа. Открытым массивом (строкой) называется массив без указания типа индекса (размера массива). Например

     PROCEDURE Atts(Var mas: array of integer);
В качестве фактического параметра в данной процедуре можно использовать массив любого размера, содержащий элементы того же типа что и формальный открытый массив (в нашем случае integer).

Не зависимо от того, какой массив используется в качестве фактического параметра, индексация элементов открытого массива всегда начинается с нуля. Индекс последнего элемента в массиве можно определить с помощью функции для величин порядкового типа High(x).

Такие массивы введены для того, чтобы подпрограмма могла обрабатывать массив любого размера.

Пример 4.
---------
PROGRAM EX_26_4;
     {Программа сортировки массива}
Uses Crt;
VAR
    m: array[11..20] of integer;

 Procedure Vvod (var mas: array of integer);
 {Процедура заполнение линейного массива произвольного размера}
 Var i: integer;
 Begin
 ClrScr;
 For i:=0 to high(mas) do begin
  Write('Введите эл-т массива N ',i,' ');
  Readln(mas[i]);
                   end;
 End;

 Procedure Sort (var mas: array of integer);
 {Процедура упорядочивания линейного массива произвольного размера}
 Var
  ind: boolean;
  buf: integer;
    i: integer;
 Begin
   Repeat
     ind:=true;
     For i:=0 to high(mas)-1 do
     if mas[i]<mas[i+1] then begin
                 buf:=mas[i];
                 mas[i]:=mas[i+1];
                 mas[i+1]:=buf;
                 ind:=false;
                             end;
   Until ind;
 End;

 Procedure Vyvod ( const mas: array of integer);
 {Процедура вывода на экран содержимого
  произвольного линейного массива}
 Var i: integer;
 Begin
  Writeln ('Упорядоченный массив');
  For i:=0 to High(mas) do Write(mas[i]:5);
  Repeat Until Keypressed;
 End;

BEGIN       {Главная программа}
  Vvod(m);
  Sort(m);
  Vyvod(m);
END.

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

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

     Prim (var m: array[1..10,1..5] of byte);
объявлена быть не может. Необходимо использовать тип-массив. Например:
PROGRAM Ex_26_5;
     {Программа определения минимального элемента матрицы }
USES Crt;
TYPE mas=array[1..4,1..4] of integer;  {Тип-массив}
VAR tab: mas;
    min: integer;

  Procedure Vvodmt (var m: mas);
  {процедура с использованием типа-массив}
  Var
  Begin
  ClrScr;
  For i:=1 to 4 do
  For j:=1 to 4 do begin
   Write('Введите эл-т массива N ',i,' ',j,' ');
   Readln(m[i,j]);
                          end;

  End;

  Procedure Tmtab (m: mas; var rez: integer);
  Var i,j: byte;
  Begin
     rez:=m[1,1];
     for i:=1 to 4 do
     for j:=1 to 4 do
     if m[i,j]<rez then
               rez:=m[i,j];

  End;

BEGIN
  Vvodmt (tab);
  Tmtab (tab, min);
  Writeln ('Минимальный элемент в массиве = ', min);
  Repeat Until Keypressed;
END.

EXIT Как вы знаете оператор безусловного перехода GOTO нельзя использовать для досрочного выхода из подпрограммы. С этой целью используется процедура EXIT.

Контрольные вопросы

  1. Сформулируйте правила использования открытых массивов и строк.
  2. Как индексируются открытые массивы?
  3. Сформулируйте правила использования параметров типа массив.
  4. Как используются в качестве параметров подпрограмм многомерные массивы?
  5. Где применяется процедура EXIT?

Задания для самостоятельного выполнения.

  1. Дан целочисленный массив, состоящий из 10 элементов. Все положительные элементы массива увеличить вдвое.
  2. Дан символьный массив, состоящий из 10 элементов. Преобразовать все маленькие латинские символы в большие.
  3. Дан символьный массив А, состоящий из 8 элементов. Получить целочисленный массив В, элементы которого имеют номера, соответствующие элементам массива А.
  4. Дан целочисленный массив, состоящий из 12 элементов. Определить сумму элементов с чётными индексами и сумму элементов с нечётными индексами.
  5. Дан целочисленный массив размером 5x4. Отсортировать столбцы данного массива.
  6. Дан целочисленный массив размером 3x5. Определить максимальный элемент данного массива.
  7. Дан линейный массив из 15 целых чисел. Пересортировать массив по закону: первый меняется с последним, второй с предпоследним и т.д.
  8. Дан линейный массив из 25 целых чисел. Определить сумму положительных и сумму отрицательных элементов данного массива.
  9. Составить программу преобразования строки в "строку наоборот".
  10. Составить программу удаления лишних пробелов в строке.

 НАЗАД                    ДАЛЕЕ

 

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz