Студопедия — Обработка массивов
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Обработка массивов






 

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

 

Квадратная матрица

 

Квадратной называется такая матрица, в которой количество строк равно количеству столбцов. Выделяют следующие элементы квадратной матрицы:

· главная диагональ;

· побочная диагональ;

· элементы, расположенные выше главной диагонали;

· элементы, расположенные ниже главной диагонали;

· элементы, расположенные выше побочной диагонали;

· элементы, расположенные ниже побочной диагонали;

Главная диагональ. Если значения индексов (i, j) элемента равны, то элементы расположены на главной диагонали.

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

if i=j then <инструкции>

Побочная диагональ. Если для значений индексов (i, j) элементов выполняется равенство: i+j=n+1, то элементы расположены на побочной диагонали.

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

if i+j=n+1 then <инструкции>

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

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

for i:=1 to n do

for j:=1 to n do

if i < j then <инструкции>

for i:=1 to n-1 do

for j:=i+1 to n do

<инструкции>

Если элементы расположены на главной диагонали и выше её необходимо использовать следующий фрагмент программы:

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

for i:=1 to n do

for j:=1 to n do

if i<=j then <инструкции>

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

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

for i:=1 to n do

for j:=1 to n do

if i>j then <инструкции>

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

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

for i:=1 to n do

for j:=1 to n do

if i>=j then <инструкции>

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

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

for i:=1 to n-1 do

for j:=1 to n-1 do

if i+j<=n then <инструкции>

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

А11 А12 А13 А14

A21 A22 A23 А24

A31 A32 A33 А34

A41 A42 A43 А44

for i:=2 to n do

for j:=2 to n-1 do

if i+j>n+1 then <инструкции>

Транспонирование матрицы.

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

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

Исходная матрица

Транспонированная матрица

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

 

Фрагмент программы транспонирования матрицы:

for i:=1 to n do {Просмотр всех строк матрицы}

for j:=i+1 to n do {Просмотр всех элементов в строке, расположенных выше главной диагонали}

begin

k:=a[i,j];

a[i,j]:= a[j,i];

a[j,i]:= k;

end;

СТРОКИ

 

В информатике часто используются массивы типа char, которые выделены в отдельный строковый тип - string[n] - где n<=255.

Способы описания переменных - строк аналогичны описанию массивов:

  • В разделе описания типов:

type

word=string [ 20 ];

var

a:word;

  • В разделе описания переменных:

var

a,b,c:string [ 30 ];

d:string [ 54 ];

  • Можно определить строковую переменную и ее начальное значение как констант-строку:

const

st:string[11]='информатика';

 

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

Над строками можно выполнять следующие действия:

  • Сцепление (сложение)

A1:='привет '; (string [7])

A2:='друг'; (string [4])

A3:=A1+A2;

значение A3 стало:'привет друг' (string[11])

Следует учитывать, что в операциях сцепления длина результирующей строки не должна превышать 255.

  • Операция сравнения.

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

'пролив' > 'прилив'

'11111' > '111'

'11111' < '2'

'fbr' > 'cru' т.к. 'f'>'c'

Функции:

  • функция соединения: CONCAT(s1,s2,...,sn) - складывает строки s1,s2,...,sn (результат не должен превышать 255);
  • функция выделения: COPY(S,T,K) где S - какая строка, T - с какого элемента, K - сколько элементов выделять;

st:='Привет!'; s:=copy(st,4,3); {Результатом будет следующая строка} s='вет';

st1:='Привет!'; s1:=copy(st,4,10); {Результатом будет следующая строка} s1='вет!';

функция определения длины строки: LENGTH(S) - результатом является число;

st:='Привет!'; k:=length(st); {Длина результирующей строки равна} k=7;

st1:='Всем привет!'; k1:=length(st1); {Длина результирующей строки равна} k1=12;

  • функция определения позиции: POS(T,S), где T - элемент, позицию которого надо определить, S - строка, в которой будет определение;

st1:='abcdef';

pos('de',st1)=4;

pos('r',st1)=0;

Процедуры:

  • процедура вырезания: DELETE(S,T,K), где S - какая строка, T - с какого элемента, K - сколько элементов вырезать;

st:='abcdef';

delete(st,2,3);

{Результатом будет следующая строка} st='aef';

  • процедура вставки: INSERT(T,S,K), где T - что вставлять, S - в какую строку, K - с какой позиции;

st1:='12389';

st2:='4567';

  • insert(st2,st1,4);

{Результатом будет следующая строка} st1='123456789';

  • процедура преобразования числа в строку: STR(T,S), где T - число, которое будет преобразовано, S - строка, в которую будет преобразовано число;

str(1500,st)='1500';

str(1500:6,st)=' 1500';

  • процедура преобразования строки в число: VAL(S,K,T), где S - из какой строки, K - будущее число, T - с какого места.

Символьный тип(char)

K типу char относится любой символ заключенный в апострофы. Для представления апострофа как символьную переменную, надо заключить его в апостроф.

Каждый символ имеет свой код и номер. Порядковые номера цифр 0,1..9 упорядочены по возрастанию. Порядковые номера букв также упорядочены по возрастанию, но не обязательно следуют друг за другом.

К символьным данным применимы знаки сравнения: >, <, >=, <=, <>.

Например: 'A' < 'W'

Функции, которые применимы к символьным переменным:

  • ORD(X) - определяет порядковый номер символа Х.

Пример: ord('a')=97.

  • CHR(X) - определяет символ по номеру.

Пример: chr(97)='a'.

  • PRED(X) - выдает символ, стоящий перед символом Х

Пример: pred('B')='A'

  • SUCC(X) - выдает символ, следующий после символа Х

Пример: succ('A')='B'.

  • UPCASE(ch) - преобразует строчную букву в прописную. Обрабатывает только буквы латинского алфавита.

ЗАПИСИ

 

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

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

Фамилия, имя, отчество (символьные массивы или строки);

  • Пол (перечислимый тип из двух значений);
  • Индекс специальности (целое) и т.д.

Таким образом, описание комбинированного типа представляет собой список описаний его элементов (которое называется также полями записи);

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

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

Объявление типа записи.

type

ИмяТипа= record

ИмяПоля1: ТипПоля1;

ИмяПоля2: ТипПоля2;

 

ИмяПоляN: ТипПоляN;

end;

Затем объявляются переменные соответствующего типа.

var

ИмяПеременной: ИмяТипа;

 

Например:

Пример 1.

type

avto=record

number: integer; {номер автомобиля}

marka: string[20]; {марка автомобиля}

fio: string[40]; {фамилия, инициалы владельца}

address: string[60]; {адрес владельца}

end;

var

m: avto;

Пример 2.

type address=record

k: longint; {почтовый индекс}

city: string[10]; {название города}

street: string; {название улицы}

house: integer; {номер дома}

flat: integer; {номер квартиры}

end;

Значение полей записи могут использоваться в выражениях. Обращение к значению поля осуществляется с помощью имени переменной и имени поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи avto, надо записать:

m.number, m.marka, m.fio, m.address

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

Обращение к полям записи имеет несколько громоздкий вид. Для решения этой проблемы в языке Turbo Pascal имеется оператор присоединения with, в виде:

with m do

begin

number:=1954;

marka:='Audi - 100'

fio:='Иванов И.И.';

address:='ул. Бочкарева 7 кв.38';

end;

 

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

type

anketa=record

facult: string;

group: 1..6;

fio: string;

address=record

k: longint;

city: string[10];

street: string;

house, flat: integer;

flat: integer; {номер квартиры}

end;

bd=record

date: 1..31;

month: 1..12;

year: integer;

end;

end;

var

ved: array[1..20] of anketa;

Здесь переменная ved – это массив записей. Каждая запись состоит из пяти полей, причем два последних поля сами являются записями. Обращение к элементам таких сложных структур происходит по составным именам, например: ved[5].address.city:=’Корытово’.







Дата добавления: 2015-10-19; просмотров: 482. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

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

Методы анализа финансово-хозяйственной деятельности предприятия   Содержанием анализа финансово-хозяйственной деятельности предприятия является глубокое и всестороннее изучение экономической информации о функционировании анализируемого субъекта хозяйствования с целью принятия оптимальных управленческих...

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия