Где описываются одномерные массивы в конце программы в разделе var в начале

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

Массив – это линейно упорядоченная совокупность однотипных элементов. Массив определяется типом элементов (int, double, . ) и длиной. Доступ к элементам осуществляется по индексу – порядковому номеру элемента массива. Логически первый элемент массива имеет индекс ноль.

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

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

Способы объявления статических массивов

Объявление статического массива отличается от объявления обычной переменной только указанием количества элементов массива. Например, следующее объявление означает, что именем points называется массив из 100 действительных чисел.

Одномерные массивы. Практическая работа 2


double points[100];

В некотором смысле можно считать, что такое объявление переменной points создает 100 переменных, которые называются points[0], points[1], . points[99]. Плюс к этому, «имена» этих переменных можно вычислять: points[1], points[0+1] или points[k-1] имеют одно значение (если k=2).

В реальных программах следует избегать явного использования числовых констант в объявлениях массива (и других частях программы). Если нам нужно объявить два массива, которые теоретически могут иметь разный размер, например,

double points[100]; int students[100];

то в дальнейшем, если возникнет необходимость увеличить один из массивов, будет сложно отличить одну константу от другой. Особенно это верно при обработке элементов массива (см. ниже). Правильным считается использование директив препроцессора для присвоения константам «говорящих» имен. Например:

#define NPOINTS 100 #define NSTUDENTS 100 . double points[NPOINTS]; int students[NSTUDENTS];
Объявление массива может быть совмещено с присвоением значений его элементам. Например,
double points[] = ;

создает массив из четырех действительных чисел с указанными значениями. Заметим, что в данном случае число элементов массива в квадратных скобках не указывается.

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

Работа с элементами массива

Для доступа к элементу массива достаточно знать его имя и порядковый номер элемента. В языке Си элементы массива индексируются начиная с нуля, то есть в массиве из двух элементов корректными являются индексы 0 и 1. Если массив имеет имя array, то его k -й элемент записывается как array[k] . Это выражение может использоваться как для получения значения элемента массива, так и для его изменения, если оно стоит в левой части оператора присваивания. Рассмотрим для примера следующую программу.

Работа с массивами Pascal


#define NPOINTS 100 int main() < double points[NPOINTS]; int k; points[0] = 0.1; for(k=1; k < NPOINTS; k++) < points[k] = 0.1 + points[k-1]; >return 0; >

Эта программа заполняет массив действительных чисел значениями 0, 0.1, 0.2 и так далее. Отметим, что макропеременная NPOINTS используется как при объявлении массива, так и в качестве верхней границы цикла по всем его элементам. Если размер массива нужно будет изменить, то достаточно исправить одну строчку в программе (#define).

Читайте также:
Почему не работает программа сканирования hp

Пример работы с массивом, который задан с начальными значениями:

int main() < double points[] = ; int k; int npoints = sizeof(points)/sizeof(points[0]); for(k=0; k < npoints; k++) < printf(«points[%d] = %lfn», k, points[k]); >return 0; >

Типичная ошибка при работе с массивами состоит в указании неправильного индекса. Если в приведенной выше программе переменная цикла k будет пробегать значения от 0 до npoints включительно, то поведение программы, вообще говоря, может быть любым. Наиболее вероятным поведением является вывод на экран какого-то значения, но может возникнуть и критическая ошибка, которая приведет к аварийной остановке программы.

Представление массива в памяти и адресная арифметика

В памяти ЭВМ элементы массива записаны последовательно без пропусков. Имя массива является указателем на его начальный элемент (с индексом 0). Поскольку в массиве все элементы имеют одинаковый тип, то зная адрес начала массива (A), размер одного элемента (size) и индекс k можно вычислить адрес размещения k-ого элемента: A + k*size. Если требуется получить значение k-ого элемента массива, то достаточно выполнить одно умножение (k*size), одно сложение (A + k*size) и загрузить значение из памяти по только что вычисленному адресу. Таким образом, обращение к элементу массива очень эффективно и сложность этой операции не зависит от величины индекса k: получение (или изменение) значения нулевого элемента столь же эффективно, как и миллионного.

Хорошо, адрес начала массива мы знаем — это его имя, индекс нам известен, но как узнать size (размер одного элемента)? Чуть ниже мы узнаем как это сделать, но для работы с указателями на элементы массива это не требуется! В языке Си к указателям можно прибавлять целые числа. Например, если есть указатель double *a; , то значением выражения a+9 будет адрес десятого (еще раз вспомним, что массивы индексируются с нуля!) элемента массива, который начинается с адреса a . Компилятор сам понимает, что a является указателем на double и прибавляет нужное значение.

Обратной стороной последовательно хранения элементов в памяти является сложность вставки нового значения с сохранением порядка следования элементов. Например, если в массив нужно добавить новое значение по индексу 0, то чтобы «освободить» место все элементы массива придется сдвинуть на одну позицию. Ясно, что сложность этой операции зависит от длины массива. Чем больше длина, тем дольше выполняется это действие.

Передача массива в функцию

Функция может получать на вход массив. В действительности в функцию передается адрес начала массива и его длина. Прототип функции может быть оформлен либо так:

int print_array(double x[], int len);
int print_array(double *x, int len);

Эти варианты являются эквивалентными. Некоторые программисты предпочитают первый (квадратные скобки показывают, что формальный параметр функции является массивом), другие — второй (имя массива является указателем на нулевой элемент).

Естественно, что функция может иметь и другие параметры, в том числе, другие массивы. Это только пример.

Рассмотрим возможную реализацию функции распечатывания массива.

#include int print_array(double x[], int len) < int k; for(k = 0; k < len; k++) < printf(«x[%d] = %lfn», k, x[k]); >return 0; >

Читайте также:
Программа для проверки вай фай кто подключен к моему Wi-Fi

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

int main() < double points[] = ; int npoints = sizeof(points)/sizeof(points[0]); print_array(points, npoints); return 0; >

Одномерные массивы. Описание, ввод, вывод и обработка массивов на Паскале

Массивом называют упорядоченный набор однотипных переменных (элементов). Каждый элемент имеет целочисленный порядковый номер, называемый индексом. Число элементов в массиве называют его размерностью. Массивы используются там, где нужно обработать сразу несколько переменных одного типа – например, оценки всех 20 студентов группы или координаты 10 точек на плоскости. Строку текста можно рассматривать как массив символов, а текст на странице – как массив строк.

Массив описывается в разделе var оператором следующего вида:

Var ИмяМассива: array [НижнийИндекс.. ВерхнийИндекс] of Тип;

НижнийИндекс – целочисленный номер 1-го элемента массива,

.. – оператор диапазона Паскаля (именно две точки!);

ВерхнийИндекс – целочисленный номер последнего элемента,

Тип– любой из известных типов Паскаля; каждый элемент массива будет рассматриваться как переменная соответствующего типа.

Примеры массивов:

Var a: array [1..20] of integer;

Здесь мы описали массив с именем A, состоящий из 20 целочисленных элементов;

Var x,y: array [1..10] of real;

Описаны 2 массива с именами x и y, содержащие по 10 вещественных элементов;

Var t: array [0..9] of String;

Массив t состоит из 10 строк, которые занумерованы с нуля.

Таким образом, размерность (число элементов) массива вычисляется как

ВерхнийИндекс – НижнийИндекс + 1

Для обращения к отдельному элементу массива используется оператор вида

Здесь Индекс – целочисленный номер элемента (может быть целочисленным выражением или константой). Индекс не должен быть меньше значения нижнего или больше верхнего индекса массива, иначе возникнет ошибка «Constant out of range». Отдельный элемент массива можно использовать так же, как переменную соответствующего типа.

Примеры:

Пока мы изучаем одномерные массивы, в которых каждый элемент имеет один номер (индекс), характеризующий его положение в массиве. В математике понятию одномерного массива из n элементов соответствует понятие вектора из n компонент:

Как правило, ввод, обработка и вывод массива осуществляются поэлементно, с использованием цикла for

Ввод массива с клавиатуры:

Var a: array [1..n] of real;

Writeln (‘Введите элементы массива’);

For i:=1 to n do read (A[i]);

Размерность массива определена константой n, элементы вводятся по одному в цикле for – при запуске этой программы пользователю придется ввести 10 числовых значений. При решении учебных задач вводить массивы «вручную», особенно если их размерность велика, не всегда удобно. Существуют, как минимум, два альтернативных решения:

Описание массива констант удобно, если элементы массива не должны изменяться в процессе выполнения программы. Как и другие константы, массивы констант описываются в разделе const, приведем пример такого описания:

const a:array [1..5] of real=(

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

Формирование массива из случайных значений уместно, если при решении задачи массив служит лишь для иллюстрации того или иного алгоритма, а конкретные значения элементов несущественны. Для того, чтобы получить очередное случайное значение, используется стандартная функция Random(N), где параметром N передается целое или вещественное число. Она вернет случайное число того же типа, что тип аргумента и лежащее в диапазоне от 0 до N-1 включительно. Например, оператор вида a[1]:=Random(100); запишет в a[1] случайное число из диапазона [0,99].

Читайте также:
Как вы относитесь к прогнозам западных сми о невозможности выполнения программы кпсс

Для того, чтобы при каждом запуске программы цепочка случайных чисел была новой, перед первым вызовом Random следует вызвать стандартную процедуру Randomize;, запускающую генератор случайных чисел. Приведем пример заполнения массива из 20 элементов случайными числами, лежащими в диапазоне от -10 до 10:

var a:array [1..20] of integer;

for i:=1 to 20 do begin

Еще более удобный путь – чтение элементов массива из текстового или двоичного файла. Об этом рассказывается в главах 21 и 22.

Обработка массива (в данном случае, вычисляется сумма s его положительных элементов)

Var b:array [1..5] of real;

Writeln (‘Введите 5 элементов массива’);

for i:=1 to 5 do read (b[i]);

for i:=1 to 5 do if b[i]>0 then s:=s+b[i];

Как видно из этого примера, к массивам применимы все типовые алгоритмы, изученные в теме «Циклы».

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

For i:=1 to 5 do write (b[i]:6:2);

Здесь 5 элементов массива b напечатаны в одну строку. Для вывода одного элемента на одной строке можно было бы использовать оператор writeln вместо write

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Одномерные массивы. Способы описания и заполнения одномерных массивов

2) упорядоченный набор переменных, объединенных общим назначением и имеющих одно имя.

Элемент массива – отдельная переменная, входящая в массив.

Индекс элемента — номер элемента массива, обозначаемый числом или буквой (англ.- индекс).

Размер массива — количество элементов в массиве.

Размерность – число индексов в массиве (1-мерный,2-мерный, N-мерный).

Описание и заполнение одномерного массива

Массив — это структурированный тип для резервирования в памяти места под большое количество однородных элементов ( общий размер – не более 65.52 кБайт). Оперировать можно как с отдельными элементами массива, так и с массивом в целом.

ARRAY – зарезервированное слово Pascal, оно указывает, что данная переменная является массивом.

Изображение 1-мерного массива

Возможны 2 способа описания массива:

1 Описание массива в разделе переменных VAR:

i1..i2 – диапазон индексов (любой порядковый тип, кроме longint);

t – тип элемента.

Например:

VAR A: array [1..10] of byte;

VAR ENTER: array [1998..2002] of integer ;

VAR y: array[-3..5] of real ;

VAR FIO: array [1..30] of string ;

VAR mas: array [1..M] of real;

CONST b: array [1..5] OF byte = ( 1,4,3,2,0);

Заполнение одномерного массива возможно несколькими способами, основные из которых:

2 с помощью генератора случайных чисел;

3 объявление массива как CONST;

Упражнение arr1: Описать в разделе VAR и заполнить массив А из 5 целых элементов с клавиатуры. Вывести массив в строчку.

var a: array[1..5] of integer;

write(‘Введите элемент массива А[‘,i,’]= ‘);

ReadLn (a[i]);

writeLn(‘Результирующий массив А:’);

2 Описание массива в разделе описания типов TYPE:

Например:

TYPE mas = array[1..20] of integer;

TYPE m = array[1..5] of string[3];

Const mes: m =(’jan’,’feb’,’mar’,’apr’,’may’);

Упражнение arr2: Описать в разделе TYPE и заполнить массив MAS из 5 целых случайных чисел. Вывести массив в столбик.

TYPE a= array[1..5] of integer;

VAR mas: a;

randomize;

mas[i]:= random(100);

Упражнение arr3: Заполнить массив – CONST из 12 чисел.

const a: array[1..12] of byte=(1,3,2,3,0,0,4,5,6,7,8,2);

for i:=1 to 10 DO

Упражнение arr4: Заполнить массив – символьную CONST из 12 английских наименований месяцев года длиной в 3 символа, например: JAN, FEB и т. д.

Упражнение arr5: Заполнить массив по формуле: y = x2 в диапазоне [0; 1] с шагом 0.1.

Источник: pandia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru