Практика программирования (Бейсик, Си, Паскаль)

       

Объявление массивов


В QBasic для объявления массивов и одновременного отведения памяти под хранение их элементов используется оператор DIM:

DIM А(10),В(2 ТО 8,3 ТО 5),С(3,2,6)

В простом объявлении указывается максимальный индекс и, поскольку минимальный индекс по умолчанию равен 0, то в массиве А, например, содержится не 10, а 11 элементов. Конструкция "qq то kk" позволяет одновременно задать и минимальный, и максимальный индексы.

Интерпретатор QBasic существенно отличается от многих других систем программирования, где операторы объявления относятся к разряду невыполняемых и обрабатываются только на стадии компиляции программы. Здесь вполне возможны фрагменты следующего типа:

INPUT "Введите размерность массива F", N DIM F(N)

После работы с этим массивом в программе может встретиться следующая пара операторов:

INPUT "Введите новую размерность массива F",M REDIM F(M)

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

Ни Си, ни Паскаль таких "вольностей" не позволяют. В них, конечно, можно определить массив достаточно большого размера и использовать только его часть. Но память будет выделена под весь массив, включая и неиспользуемый в конкретном варианте остаток.

Объявление массивов в Си чем-то особым не отличается от других алгоритмических языков. Разве что в задании многомерных массивов каждый индекс записывается в отдельных квадратных скобках:

#define N_max 50

char a1[20], a2[5][80];

int b1[25],b2[N_max];



Индексы в Си всегда отсчитываются от 0, так что, например, в массиве b1 можно манипулировать с элементами b1[0], b1[1], ..., b1[24]. Элемент b1[25] массиву ы уже не принадлежит и попытка записи в него может привести к непредсказуемым последствиям.

В Паскале существует несколько вариантов для объявления многомерных массивов. Например, целочисленная матрица f, содержащая q строк и k столбцов (значения q и k предварительно должны быть объявлены константами), может быть включена в текст программы одним из следующих описаний:




type

mat_q_k=array [l..q,l..k] of integer;

var

f :mat_q__k;

ИЛИ

var

f:array [l..q,l..k] of integer;

ИЛИ

var

f:array [l..q][l..k] of integer;

ИЛИ

var

f:array [l..q] of array [l..k] of integer;

Еще одна дополнительная особенность Паскаля заключается в том, что в качестве индексов могут использоваться не только числа, но и любые данные интервального или перечислимого типов. Например, буквы:

var

ch:array ['A'..'Z'] of integer;

str:string;

begin

.....................

inc(ch[str[j]]) ;

....................

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




Содержание раздела