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


 

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

52098. Фізико-географічне положення та берегова лінія Африки 49 KB
  Розмістити порядкові номери географічних обєктів по океанам до яких вони належать Острів Камчатка Острів Шпіцберген Півострів Аравійський Острів Шрі-Ланка Півострів Скандинавський Острови Японські Острів НоваЗемля Острів Ісландія Хребет Ломоносова Острови Бермудські Острів Мадагаскар Море Червоне Острови Гавайські Море Карське Море Чорне Море Берингове Хребет Менделеєва Півострів Індостан Півострів Сомалі Острові Філіппінські Море Азовське Море Саргасове Острови Маріанські ...
52100. Общая характеристика климата Африки 5.32 MB
  Общая характеристика климата Африки Цель: формировать у учащихся систему знаний об общих особенностях климата Африки и основных климатообразующих факторах; совершенствовать практические умения объяснять особенности климата Африки характеризовать влияние климатообразующих факторов на его формирование развивать коммуникативные навыки воспитывать интерес к предмету. Оборудование: физическая карта Африки климатическая карта Африки учебники атласы шаблоны в рабочей тетради приготовлена картосхема Африки. В рабочей тетради вы должны были...
52101. Природні зони Африки 7.36 MB
  Мета: повторити вивчений матеріал; зясувати рівень оволодіння учнями навчальним матеріалом з попередніх тем; формувати знання про особливості розміщення природних зон Африки; поглибити систему знань учнів про взаємозвязки природних компонентів у складі природних зон; сформувати в учнів вміння складати характеристику природних зон в певній послідовності за типовим планом...
52102. Особливості географічного положення Африки. Елементи берегової лінії. Дослідження та освоєння 1.58 MB
  Мета: формувати загальні уявлення про зміст та структуру розділу Материки; ознайомити з планом вивчення материків; розкрити поняття географічне положення;познайомити учнів з історією відкриття Африки. Обладнання: фізична карта світу фізична карта Африки плани характеристики географічного положення материка контурні карти портрети дослідників підручники атласи. До Африки взимку відлітають птахи України: лелеки ластівки журавлі тощо.
52103. Води суходолу Африки 890.5 KB
  Мета: сформувати в учнів уявлення про особливості вод суходолу Африки; охарактеризувати головні річкові системи та басейни основні типи озер; систематизувати знання учнів про гідрологічні особливості території; продовжити формування практичних умінь характеристики водних ресурсів; сформувати поняття учнів про гідроекологічні проблеми Африки; удосконалити навички роботи з картами атласу контурною картою; виховувати бережливе ставлення до природи водних...
52104. Африка. Особливості географічного положення та історія дослідження материка 101 KB
  Мета: ознайомити учнів з історією дослідження Африки, своєрідністю природи материка, яка пов`язана з особливостями географічного положення, сформувати уявлення про періоди дослідження материка; закріпити вміння визначити координати крайніх точок материка; розвивати творчу уяву...
52105. Внутрішні води Африки 53 KB
  Кагера що впадає в озеро Вікторія. Що таке озеро Які за походженням вони бувають Виступи дітей ОЗЕРА Більшість озер Африки розташовані уздовж Східноафриканських розломів. Найбільше з них озеро Танганьїка глибиною 1470 метрів друге за глибиною після Байкалу і найдовше світі озеро 670 км. Найбільше озеро Африки і друге за площею пріноводне озеров світі після о.
52106. Agatha Christie 72 KB
  Аgatha Mary Clarissa Christie is possibly the worlds most famous detective story writer. She wrote 79 novels and several plays. Her sales outnumber those of William Shakespeare. However, behind her 4,680,000 words was a painfully shy woman whose life was often lonely and unhappy.