9693

Понятие структуры. Индекс массива

Лекция

Информатика, кибернетика и программирование

Понятие структуры До сих пор мы работали с простыми типами данных - логический (boolean), целый (integer, word, byte, longint), вещественный (real), символьный (char). Для оптимизации обработки больших объемов информации требуются да...

Русский

2013-03-15

149.5 KB

0 чел.

Понятие структуры

До сих пор мы работали с простыми типами данных – логический ( boolean ), целый ( integer , word , byte , longint ), вещественный ( real ), символьный ( char ).

Для оптимизации обработки больших объемов информации требуются данные, имеющие более сложное строение. Составные конструкции данных называются структурами. Если структура не изменяет своего строения на протяжении всего выполнения программы, в которой она описана, то такую структуру называют статической.

Самой распространенной статической структурой, реализованной практически во всех языках программирования, является массив.

Массив – совокупность однотипных данных объединенных общим именем различаемых по индексу.

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

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

Индекс массива

Номер элемента массива называется индексом. Индекс – это значение перечисляемого типа, определенного, как тип индекса данного массива. Например: целочисленный тип (integer , word или byte), логический или  символьный.

Описание массива 

В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом:

Type < имя _ типа >= array [ I ] of T; где I – тип индекса массива, T – тип его элементов.

Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных:

Var <имя массива>: array [ I ] of T; где I – тип индекса массива, T – тип его элементов.

Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа: I1 .. In . Например, индексы могут изменяться в диапазоне 1..20 или ‘ a ’..’ n ’.

При этом длину массива Паскаля характеризует выражение: ord(In)- ord(I1)+1.

Пример объявления целочисленных массивов из 10 элементов:

 Var 

 A: array [1..10] of integer;

 B: array [0..9] of integer;

 C: array [90..99] of integer;

 D: array [‘a’..’j’] of integer;

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

Прямая адресация.

При обращении к элементу массива индеек указывается в явном виде как константа (конкретное значение).

Пример:

Var 

A: array [1..6] of integer;

Begin

A[1]:=34;

A[2]:=17;

A[3]:=60;

A[4]:=40;

A[5]:=30;

A[6]:=4;

End.

Массив А

значения

34

17

60

40

30

4

индекс

1

2

3

4

5

6

Косвенная адресация

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

Пример:

Var 

A: array [1..6] of integer;

i:integer;

Begin

Значение переменной i

Имя элемента

массива

Значение

i:=1;

1

A[i]:=34;

A[1]

34

i:=i+1;

2

A[i]:=17;

A[2]

17

i:=i+1;

3

A[i]:=60;

A[3]

60

i:=i+1;

4

A[i]:=40;

A[4]

40

A[i+1]:=30;

A[5]

30

A[i+2]:=4;

A[6]

4

End.

Самая распространенная ошибка: результат вычислений оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта ошибка называется «выход за пределы массива».

Пример:

Var 

A: array [1..6] of integer;

i: integer;

Begin

i:=4;

A[i+5]:=34;

End.

Данная программа полностью соответствует синтаксису языка, и транслятор не выдаст ошибку, но на стадии выполнения произойдет ошибка выхода за пределы массива Паскаля. При i =4 выражение i +5=9, компьютер сделает попытку обратиться к элементу массива A [9], но такого элемента нет, поскольку описан массив размерностью 6.

Двойная косвенная адресация

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

Пример:

Var 

A,B: array [1..6] of integer;

Имя элемента

массива

Значение

i:integer;

Begin

B[1]:=6;

B[2]:=4

B[3]:=1

B[4]:=5

B[5]:=3

B[6]:=2

значения

30

60

50

20

40

10

индекс

1

2

3

4

5

6

A[B[1]]:=10;

A[6]

10

A[B[2]]:=20;

A[4]

20

A[B[3]]:=30;

A[1]

30

A[B[4]]:=40;

A[5]

40

A[B[5]]:=50;

A[3]

50

A[B[6]]:=60;

A[2]

60

End.

Действия с массивами в языке программирования Pascal.

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

Если А и В массивы одного типа, то над ними возможна только одна операция – присваивание. Если B:=A, то каждому элементу массива B будет присвоено соответствующее значение из массива A.

Пример:

Var 

A, B: array [1..6] of integer;

Begin

A[1]:=34;

A[2]:=17;

A[3]:=60;

A[4]:=40;

A[5]:=30;

A[6]:=4;

B:=A

End.

Массив А

Значения

34

17

60

40

30

4

индекс

1

2

3

4

5

6

Массив B

Значения

34

17

60

40

30

4

индекс

1

2

3

4

5

6

Все остальные действия над массивами производятся поэлементно! 

Заполнение массива

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

Ввод массива от пользователя (с клавиатуры)

Var 

  A : array [1..10] of integer ;

  I : byte ; {параметр цикла I будет и индексом массива} 

Begin 

  For i:=1 to 10 do 

     Readln (a[i]); { ввод i- го элемента производится с клавиатуры } 

Заполнения массива случайными целыми числами из диапазона от L до R

Var 

  A: array [1..10] of integer;

  I,L,R : integer ;

Begin 

  For i :=1 to 10 do 

     A [ i ]:= random (R-L+1)+L; { i -му элементу массива присваивается «случайное» целое число в диапазоне от L до R} 

Вывод массива

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

Var 

  A: array [1..10] of integer;

  I: byte;

Begin 

  For i :=1 to 10 do 

     Write ( a [ i ],’ ‘); {вывод массива осуществляется в строку, после каждого элемента печатается пробел} 

Задачи:

  1.  Заполнить массив из n (n<=15, вводиться от пользователя) элементов случайным образом числами, лежащими в диапазоне от 1 до 100. Вывести значения массива через запятую в строчку.
  2.  Заполнить массив из n (n<=15, вводиться от пользователя) элементов случайным образом числами, лежащими в диапазоне от -20 до 20. Вывести значения массива через «;» (точку с запятой) в столбик.
  3.  Заполнить массив из n (n<=15, вводиться от пользователя) элементов случайным образом трехзначными числами. Вывести значения массива через пробел в строчку.
  4.  Используя датчик случайных чисел, заполнить массив из n (n<=15, вводиться от пользователя) элементов четными двузначными положительными числами. Вывести значения массива через запятую в строчку.
  5.  Используя датчик случайных чисел, заполнить массив из n (n<=15, вводиться от пользователя) элементов положительными числами, кратными 5и не превышающими 1000. Вывести значения массива через запятую в строчку.
  6.  Заполнить массив из 10 элементов следующим образом:

 

1

2

3

4

5

6

7

8

9

10

  1.  Заполнить массив из 10 элементов следующим образом:

10

9

8

7

6

5

4

3

2

1

  1.  Заполнить массив подряд идущими целыми числами от L до R, где L и R вводятся от пользователя.
  2.  Заполнить массив из 7 элементов следующим образом:

 

1!

2!

3!

4!

5!

6!

7!

  1.  Заполнить массив из 10 элементов следующим образом:

 

20

21

22

23

210

  1.  Заполнить массив первыми n (n<=15, вводиться от пользователя) членами арифметической прогрессии (an = a1 + d (n - 1), первый член прогрессии  a1 и ее разность d вводятся от пользователя).
  2.  Заполнить массив первыми n (n<=15, вводиться от пользователя) членами геометрической прогрессии (an = a1*d (n - 1), первый член прогрессии a1 и ее знаменатель d вводятся от пользователя).
  3.  Заполнить массив первыми n (n<=15, вводиться от пользователя) членами последовательности Фибоначчи.
  4.  *Дано натуральное число n (n<=1000000). Заполнить массив цифрами данного числа.
  5.  *Заполнить массив первыми n (n<=15, вводиться от пользователя) натуральными числами, делящимися нацело на 3 и на 5.
  6.  *Заполнить массив первыми n (n<=15, вводиться от пользователя) простыми числами.


Обработка элементов массива

Линейный поиск

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

Пример:

В массиве n (n<=15, вводиться от пользователя) элементов, заданных случайным образом числами, лежащими в диапазоне от 1 до 100. Вывести индексы четных элементов массива.

Var 

A: array [1..15] of integer;

i:integer;

Begin

Randomize;

Writeln(‘Vvod n’);

Readln(n);

n

5

For i:=1 to n do

i

1

2

3

4

5

A[i]:=random(100)+1;

a

10

21

5

2

37

For i:=1 to n do

i

1

2

3

4

5

If a[i] mod 2=0 then

условие

+

-

-

+

-

Writeln(i);

1

4

End.

Задачи

В массиве n элементов, заданных случайным образом числами, лежащими в диапазоне от L до R (n (n<=20), L, R вводятся от пользователя).

1. Найти количество элементов:

  1.  являющихся нечетными числами;
  2.  равных 3 или 5;
  3.  являющихся двузначными числами;
  4.  модуль которых равен квадрату индекса;

2. Найти сумму элементов:

  1.  являющихся положительными числами;
  2.  являющихся одноразрядными числами;
  3.  кратных 3 и не кратных 5;

3. Заменить элементы:

  1.  значение которых равно нулю на 100;
  2.  являющиеся отрицательными числами на модуль их значения;
  3.  являющиеся трехзначными  числами на сумму  цифр числа.


 

А также другие работы, которые могут Вас заинтересовать

80709. Бухгалтерская отчетность 121.5 KB
  Бухгалтерская отчетность Адреса и сроки представления бухгалтерской отчетности Состав бухгалтерской отчетности Статистическая отчетность Срок хранения первичных документов Исправление бухгалтерских ошибок. Адреса и сроки представления отчетности Все организации за исключением бюджетных представляют годовую бухгалтерскую отчетность в соответствии с учредительными документами учредителям участникам организации или собственникам ее имущества а также территориальным органам государственной статистики по месту их регистрации...
80710. Учетная политика предприятия 125 KB
  Под учетной политикой организации понимается принятая ею совокупность способов ведения бухгалтерского учета первичного наблюдения стоимостного измерения текущей группировки и итогового обобщения фактов хозяйственной деятельности. К способам ведения бухгалтерского учета относятся способы группировки и оценки фактов хозяйственной деятельности погашения стоимости активов организация документооборота инвентаризации способы применения счетов бухгалтерского учета системы учетных регистров обработки информации и иные соответствующие...
80711. Малые предприятия: бухгалтерский учет и особенности налогообложения 122.5 KB
  Малые предприятия: бухгалтерский учет и особенности налогообложения Основные понятия о малом предпринимательстве Условия и показатели для применения упрощенной системы налогообложения Условия для применения простой формы бухгалтерского учета Ведение учета частными предпринимателями Изменения в налогообложении в связи с введением единого налога на вмененный доход Основные понятия о малом предпринимательстве...
80712. Бухгалтерский учет и его основные задачи 69.5 KB
  Основной целью хозяйственного учета является формирование качественной и своевременной информации о финансовой и хозяйственной деятельности предприятия, необходимой для управления рыночной экономикой, для подготовки, обоснования и принятия управляющих решений на различных уровнях, для определения поведения на рынке, определения своего места среди конкурентов и т.п.
80713. Бухгалтерский баланс 75.5 KB
  Понятие и виды бухгалтерского баланса Строение бухгалтерского баланса. Понятие и виды бухгалтерского баланса. Учетное понятие баланса это момент счетного отражения имущественного состояния хозяйства. Составлением вступительного организационного баланса открывается ведение бухгалтерского учета на данном предприятии.
80714. Система счетов и двойная запись 64 KB
  Понятие о счетах БУ и двойной записи. Понятие о счетах бухгалтерского учета и двойной записи Для текущего учета и контроля используется система счетов БУ. Счет это также накопитель информации который затем обобщается и используется для составления различных сводных показателей и отчетности СЧЕТ Д К Для обозначения остатков на счетах БУ пользуются термином сальдо Для отражения хозяйственных операций на счетах необходимо документальное подтверждение в качестве которого могут быть бумажные первичные документы магнитные носители и т. В...
80715. Первичный учет 68 KB
  Эти документы служат первичными учетными документами на основании которых ведется бухгалтерский учет. Первичные учетные документы принимаются к учету если они составлены по форме содержащейся в альбомах унифицированных форм первичной учетной документации а документы форма которых не предусмотрена в этих альбомах должна содержать следующие обязательные реквизиты: наименование документа; б дату составления документа; в наименование организации от имени которой составлен документ; г содержание хозяйственной операции; д измерители...
80716. Учетные регистры бухгалтерского учета 58 KB
  Учетные регистры бухгалтерского учета. Журнально ордерная форма бухгалтерского учета. Журнально ордерная форма учета обладает большими контрольными и аналитическими возможностями и применяется на больших предприятиях.
80717. Наречие и его категории 34.28 KB
  Ранние грамматисты относили наречие к нерасчлененному разряду частиц. Суит Есперсен Датский лингвист Отто Есперсен относил наречие к частицам указывая на то что такие слова как например up immeditely принадлежат к одной группе так как они не принадлежат ни к существительным ни к глаголам ни к прилагательным ни к глаголам ни к местоимениям. С одной стороны наречие занимает самостоятельную позицию члена словосочетания с другой стороны рассматривается наряду с классами неспособными быть самостоятельными членами словосочетания.