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.  являющиеся трехзначными  числами на сумму  цифр числа.


 

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

33736. Понятие и состав административных правонарушений. Административная ответственность и её виды. Производство по делам об административных правонарушениях 48.5 KB
  Понятие и состав административных правонарушений. Производство по делам об административных правонарушениях. Административное правонарушение противоправное виновное действие бездействие физического или юридического лица за которое Кодексом РФ об административных правонарушениях установлена административная ответственность. Предупреждение административный штраф лишение специального права предоставленного физическому лицу административный арест и дисквалификация могут устанавливаться и применяться только в качестве основных...
33737. Территориальные принципы организации местного самоуправления 36 KB
  Территории с низкой плотностью сельского населения; 2 территории всех поселений за исключением территорий городских округов а также возникающие на территориях с низкой плотностью населения межселенные территории входят в состав муниципальных районов; 3 территорию поселения составляют исторически сложившиеся земли населенных пунктов прилегающие к ним земли общего пользования территории традиционного природопользования населения соответствующего поселения рекреационные земли земли для развития поселения; 4 в состав территории поселения...
33738. Типология муниципальных образований в РФ в соответствии с ФЗ № 131 32.5 KB
  Сельское поселение один или несколько объединенных общей территорией сельских населенных пунктов поселков сел станиц деревень хуторов кишлаков аулов и других сельских населенных пунктов в которых местное самоуправление осуществляется населением непосредственно и или через выборные и иные органы местного самоуправления; Городское поселение город или поселок в которых местное самоуправление осуществляется населением непосредственно и или через выборные и иные органы местного самоуправления; Муниципальный район несколько...
33739. Порядок формирования органов МСУ по закону № 131 44.5 KB
  Структуру органов местного самоуправления составляют представительный орган муниципального образования глава муниципального образования местная администрация исполнительнораспорядительный орган муниципального образования контрольный орган муниципального образования иные органы местного самоуправления предусмотренные уставом муниципального образования и обладающие собственными полномочиями по решению вопросов местного значения. Наличие в структуре органов местного самоуправления представительного органа муниципального образования главы...
33740. Конституционно -правовые характеристика Российской Федерации 33 KB
  Конституционно правовые характеристика Российской Федерации Российская Федерация Россия есть демократическое федеративное правовое государство с республиканской формой правления. Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ. Никто не может присваивать власть в Российской Федерации. Суверенитет Российской Федерации распространяется на всю ее территорию.
33741. Законотворческий процесс: понятие, содержание стадии 45.5 KB
  Право законодательной инициативы принадлежит Президенту Российской Федерации Совету Федерации членам Совета Федерации депутатам Государственной Думы Правительству Российской Федерации законодательным представительным органам субъектов Российской Федерации. Право законодательной инициативы принадлежит также Конституционному Суду Российской Федерации Верховному Суду Российской Федерации и Высшему Арбитражному Суду Российской Федерации по вопросам их ведения. Законопроекты о введении или отмене налогов освобождении от их уплаты о...
33742. Понятие и виды нормативных актов. Действие нормативных актов по времени, пространстве и по кругу лиц 29 KB
  Нормативноправовой акт является одним из важнейших и основных источников права. В нормативноправовых актах закрепляются нормы которые учитывают интересы большинства и меньшинства в целом координируют их в зависимости от конкретных экономических социальных национальных и международных отношений. В отличии от других источников права правовой обычай юридический прецедент нормативноправовой акт обладает следующими признаками. Создается в результате правотворческой деятельности компетентных органов государства или референдумом; В...
33743. Федеральное собрание РФ –высший представительный орган Российской Федерации: понятие, структура, порядок формирования, компетенция 41 KB
  Федеральное собрание РФ высший представительный орган Российской Федерации: понятие структура порядок формирования компетенция. По Конституции РФ 1993 года статья 94 Федеральное Собрание парламент Российской Федерации является представительным и законодательным органом Российской Федерации. Федеральное Собрание состоит из двух палат Совета Федерации и Государственной Думы. В Совет Федерации входят по два представителя от каждого субъекта Российской Федерации: по одному от представительного и исполнительного органов государственной...
33744. Общие принципы организации органов представительной и исполнительной власти в субъектах РФ 61 KB
  Система законодательных представительных и исполнительных органов государственной власти субъектов Российской Федерации устанавливается ими самостоятельно в соответствии с основами конституционного строя Российской Федерации и настоящим Федеральным законом. Образование формирование деятельность законодательных представительных и исполнительных органов государственной власти субъектов Российской Федерации их полномочия и ответственность порядок взаимодействия между собой и с федеральными органами государственной власти основываются на...