Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_бакалавры_информатика _вариант для печати.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.96 Mб
Скачать

Статические и динамические массивы

Все массивы можно разделить на два вида:

  • массивы постоянного размера (P(1 to 7) , F(4)). По умолчанию массив, границы которого заданы константными выражениями, считается статическим. Память для размещения такого массива выделяется на этапе компиляции программы и сохраняется за ним на весь период выполнения программы;

  • массивы переменного размера (P (1 TOk) , C(m,d) - динамичсекие, т.е. в качестве размеров массивов разрешается указывать переменные. Под динамический массив память выделяется в ходе выполнения программы.

Следует только помнить: переменные – размеры массивов должны быть определены до обращения к оператору DIM.

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

N=4: M=3

DIM A (N, M), С21(М)

Заполнение массивов значениями

В QB отсутствуют операции обработки массивов в целом. Для выполнения операции над массивом необходимо перечислить операции, выполняемые над каждым его элементом.

Элементы массивов получают значения с помощью операторов ввода или присваивания, как простые переменные.

  • Заполнение с клавиатуры

    DIM A (1 to 25)

    FOR i=1 TO 25

    PRINT “Введите ”; i; “элементмассиваА”

    INPUT A(i)

    NEXT i

  • Заполнение с использованием операторов DATA и READ:

    DATA 20, 30, 40, 50, 80, 90, 12, 45, 33, 8, 27, 44

    DIM B%(1 to 12)

    FOR i=1 TO 12

    READ B%(i)

    NEXTi

  • Заполнение с помощью оператора присваивания с использованием стандартных функций:

Option Base 1

DIM C(100) as single

FOR i=1 TO 100

C(i)=RND(1)

NEXTi

Выполнение приведенной программы несколько раз приводит к получению одной и той же последовательности чисел, которая была раньше, т.е. функция RND генерирует псевдослучайные числа.

Поэтому перед использованием функции RND в программе необходимо случайным образом определить место в этой последовательности, начиная с которого будут выбираться эти числа. Для этой цели используется оператор рандомизации.

Randomize [m%]

где m% - число, используемое для запуска генератора случайных чисел.

Оператор Randomizeнужно помещать в начале программы. Если аргумент опущен, то на экран выдается сообщение для ввода любого числа (-32768 to 32767).

Для обеспечения истинной случайности необходимо, чтобы это число при каждом запуске программы было разным. Для этого используется встроенный счетчик времени – функция Timer. Эта функция не имеет аргументов ивозвращает текущее значение времени в секундах с точностью 0,01 сек.Поэтому оператор рандомизации будет иметь следующий вид:RandomizeTimer

Для получения случайного числа из диапазона [a, b] с равномерным законом распределения используется формула:

x=Rnd*(b-a+1)+a

Окончательно программа по заполнению одномерного массива случайными целыми числами из диапазона [a, b] выглядит так:

Dim C(1 to 25) as Integer, i as Integer

Input “a=”,a

Input “b=”,b

Randomize Timer

For i=1 to 25

C(i)=Int(Rnd*(b-a+1)+a)

Next i

Для заполнения двумерного массива необходимо организовать вложенные циклы. Например, внешний по номеру строки, а внутренний по номеру столбца:

DIM C(1 to 5,1 to 3)

FOR i=1 TO 5

FOR j=1 TO 3

INPUT C(I,J)

NEXT j

NEXT i

Dim C(1 to 5, 1 to 3) as Integer

Input “a=”,a

Input “b=”,b

Randomize Timer

FOR i=1 to 5

FOR j=1 to 3

C(i,j)=Int(Rnd*(b-a+1)+a)

NEXT j

NEXT i

Вывод массивов на экран

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

FOR i=1 TO 25

PRINT A(i);

NEXT i

Двумерные массивы необходимо выводить в привычном виде - по строкам, начиная вывод новой строки массива в новую строку экрана.

PRINT “Вывод на экран массиваC”

FOR i=1 TO 5

FOR j=1 TO 3

PRINT C(i,j);

NEXT j

PRINT

NEXT i

После вывода очередной строки оператор PRINT обеспечивает возврат курсора в начало следующей строки.

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

Для улучшения наглядности можно предложить:

1.В строке PRINT B(I,J) вместо; поставить запятую, тогда вывод каждого элемента строки будет осуществляться в новой зоне, т.е. строго друг под другом. Этот способ можно использовать, если количество столбцов в массивеменьше или равно5.

2.Вывод всех элементов массива по единому формату с использованием оператора PRINT USING обеспечивает вывод результатов в любом желаемом формате. Этот оператор дает возможность задать точный образ вывода отдельных элементов списка.

PRINT USING “формат”; список

где формат задает образ распечатки.При выводе числовых значений в кавычках предусматривается символ # для каждой выводимой цифры. Для вывода дробного числа в формате задается столько символов #, сколько всего цифр требуется вывести. Например,

PRINT USING “#.##”; 5.629, -1.1

Результат на экране:

5.63, 1.1

Вывод двумерного целочисленного массива на экран с использованием оператора PRINT USING:

FOR i=1 TO 5

FOR j=1 TO 7

PRINT USING “####”, С(i,j);

NEXT j

PRINT

NEXT i

При работе с массивами используются двестандартныефункции LBOUND и UBOUND, возвращающие верхнее (UBOUND) и нижнее (LBOUND) значения границ определенного измерения массива. Общий вид функций:

LBOUND (массив[, размерность])

UBOUND (массив[, размерность])

где массив - имя массива;

размерность - номер измерения массива, для которого эти функции возвращают значения нижней и верхней границы.Для определения индекса первого измерения используется 1, для второго - 2 и т.д.

Работа функций LBOUND и UBOUND поясняется следующим фрагментом программы:

CLS

‘объявление двумерного массива

DIM M (-10 TO 5, 20 TO 30)

‘ выводграницмассива

PRINT

PRINT LBOUND (M, 1);

PRINT UBOULD (M, 1)

PRINT LBOUND (M, 2);

PRINT UBOULD (M, 2)

END

Результат на экране:

-10 5

20 30