Рефераты. Основы программирования на языке Паскаль

Напоминаем: Е+02 означает 102, а 7.1543200000Е+02 равносильно математической записи 7.15432*102.

Ширину поля вывода можно указывать для данных любого типа, например:

в памяти машины          вид оператора                      результат

R = 511.04               writeln (R: 22);                      ......5.1104000000E+02

ch = 'x'                            writeln (ch: 3);                       ..x

ch = '!'                             writeln (ch: 2, ch: 4,ch: 3);    .!...!..!

strin = 'Day  N'               writeln (strin: 8);                    ...Dau.N

S = 'RDD'                       writeln (S: 5, S: 5);                ..RDD..RDD

Для данных типа Real можно еще указывать кроме ширины поля также количество цифр после десятичной точки.

Вывод данных с "фиксированной точкой".

в памяти машины    вид оператора                   результат        

R = 511.04                 writeln (R: 8: 4);                511.0400

R = -46.78                  writeln (R: 7: 2);               .-46.78

R = -46.78                  writeln (R: 9: 4);               .-46.7800

R = -46.78                  writeln (R: 12: 3);              .....-46.780

Program Prim24;

Var r1,r2:real;

BEGIN    r1:=-46.78; r2:=-46.78;

      writeln('r1=',r1:12:3,'  r2=',r2:9:4);

      writeln('_______________________________');

    readln; END.

6. Массивы

 

6. 1. Описание массивов


В языке Паскаль можно обрабатывать не только отдельные переменные, но и их совокупности. Одной из таких совокупностей (структурированных) данных является массив. Массив – это упорядоченная совокупность данных, состоящих из фиксированного количества элементов одного и того же типа. Тип элементов, из которых состоит массив, может быть как скалярным, так и структурированным. Этот тип называется базовым, им может быть целый, байтовый, логический, символьный, перечисляемый, интервальный, вещественный, множественный типы и т. д.

Массивы могут быть одномерные:

вектор a1, a2, a3, a4, a5, ...an,  т. е. линейка величин -  -  -  -  -  -  -  -  -  -  -  - 

двумерные массивы представляют собой матрицы:

a11 a12 . . . a1n ,   т. е. матрицу величин или прямоугольник величин

a21 a22 . . . a2n              ----     ----    ----      

- - - - - - - - - -            ----     ----    ----

am1 am2 . . . amn           ----     ----    ----

Трехмерный массив – трехмерная матрица или параллелепипед величин, состоящий из набора двухмерных матриц (рис.6.1).

 








Линейка трехмерных массивов составляет четырехмерный массив, матрица трехмерных массивов (параллелепипедов величин) – пятимерный массив и т. д. Количество размерностей не ограничено, однако следует помнить о том, что количество элементов в массиве растет в геометрической прогрессии от количества размерности.

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

Прямое описание Var – идентификатор, идентификатор, …, идентификатор:

array – [границы индекса, границы индекса, …, границы индекса] of – базовый тип.

Описание через TYPE:

 TYPE  – имя  типа=array [границы индекса, границы индекса,  . . ., границы индекса] of базовый тип;

Var – идентификатор, идентификатор, . . . , идентификатор: имя типа;

Пример: описать двумерные массивы с количеством элементов 4 строки по 5 элементов в каждой строке (5 столбцов),

базовый тип real, массивов три: а, b, c.

Прямое описание:

      Var a, b, c: array [1. . . 4, 1 . . . 5] of real;

через TYPE:

       TYPE mas=array [1. . . 4, 1. . . 5] of real;

       Var a, b, c : mas;

Для указания границ массива можно применять предварительно описанные константы:

       Const  a1=4; a2=6;

       Var mas y1: array [1. . . a1, 1. . . a2] of integer;

Доступ к элементам массива производится через переменные с индексами. Индексы должны не выходить за пределы границ в описаниях массива.

Например, описана ma: array [1. . . 12] of integer;  выделено 12 ячеек  памяти   для хранения целых данных типа integer с именами

ma [1], ma [2], ma [3], и т. д. , ma [12].

Пример:

         TYPE  klass = ( K1, K2, K3, K4);

                    znak = array [1. . . 255] of char;

         Var m1: znak;  {описан массив с именем M1 типа znak для хранения данных}

{типа char  в  количестве 255 шт. M1[1], M1[2], ... , M1[255]}

M2: array [1...60] of integer     {прямое описание, описан массив с именем}       

{M2 для хранения   целых  величин. всего }

                                                       {ячеек 60.M2[1], ... , M2[60] }

M3: array [1 ... 8] of klass;  {описан массив М3, выделено 8 ячеек памяти М3[1], ... ,  M3[8],}

          {в каждой из которых могут храниться только величины из}                    

{klass, т. е. туда могут быть занесены только K1, K2, K3, K4}

Пример:

                      Program Prim25;

    Var i:integer;  s:real;

        a:array[1..10] of real;

  BEGIN

     for i:=1 to 10 do

      Begin writeln('введите значение величины a[',i,']');

 readln(a[i]); end;            { ввод элементов массива }

    s:=0;

     for i:=1 to 10 do

      s:=s+a[i];        { нахождение суммы элементов а [i] }

    writeln('s=',s);    readln;

                                END.

Здесь мы проиллюстрировали работу с одномерным массивом. Конечно, данную программу легче представить в следующем виде:

           Program Prim25a;

    Var i:integer;  s,a:real;

  BEGIN

      s:=0;

     for i:=1 to 10 do

      begin writeln('введите значение величины a[',i,']');

      readln(a);         { ввод по одному а (без массива)}

                    { имитация ввода элементов массива }

      s:=s+a;

    writeln('s=',s);  end;

      readln;                                END.

Никаких массивов здесь не применять. На примере prim25 мы четко проследим два момента: занесение данных в массив (первый цикл) и обработка данных в массиве (второй цикл).

Пример: дана квадратная матрица. Вывести на экран элементы ее главной диагонали (элементы главной диагонали перечеркнуты)

    a11   a12    a13   a14

    a21   a22    a23   a24

    a31   a32    a33   a34

    a41   a42    a43   a44


Если принять, что индекс строк i, а столбцов j, то на главной диагонали лежат элементы, у которых i = j.

           Program Prim26;

    Var i,j,k:integer;

        a:array[1..4,1..4] of integer;

        b:array[1..4] of integer;

  BEGIN

     for i:=1 to 4 do

     for j:=1 to 4 do

      Begin   writeln('введите a[',i,',',j,']');

      readln(a[i,j])    end;  {ввод элементов массива а закончен }

     k:=1;                        { устанавливаем индекс для занесения b[1] }

     for i:=1 to 4 do

     for j:=1 to 4 do

    if i=j then Begin b[k]:=a[i,j]; k:=k+1; end;

{отыскиваем и заносим в b[1] a[1,1]}

                             {меняем k и заносим в b[2] a[2,2] и т.д.}

    writeln('на главной диагонали лежат злементы:');

    writeln('a[1,1]=',b[1],' a[2,2]=',b[2],' a[3,3]=',b[3],' a[4,4]=',b[4]);

      readln;

                                END.

В этой программе машина запросит ввод 16 элементов матрицы А, найдет элементы главной диагонали, занесет их в массив B и напечатает результат в следующем виде:

на главной диагонали лежат элементы:

A[1,1] = число     A[2,2] = число     A[3,3] = число     A[4,4] = число

                      Program Prim26a;    Var i,j,k:integer;        a:array[1..4,1..4] of integer;        b:array[1..4] of integer;  BEGIN     for i:=1 to 4 do

     for j:=1 to 4 do

      Begin writeln('ввести a[',i,',',j,']');

      readln(a[i,j]); end;       { ввести массив а }

                                        { вывести элементы массива а }

     for i:=1 to 4 do  Begin writeln;            { перевести курсор на новую строку }

        for j:=1 to 4 do

     write(a[i,j],'  ');      { вывести элементы в одну строку }

  end;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.