Скачать 88.04 Kb.
|
Тема 4. ИСПОЛЬЗОВАНИЕ И ОБРАБОТКА МАССИВОВ Переменные, которые мы использовали при составлении программ до сих пор, называются простыми переменными. Каждая простая переменная имеет имя, и под каждую такую переменную выделяется ячейка памяти, обращение к которой осуществляется по этому имени. Использование только простых переменных затрудняет или делает вообще невозможным решение многих важных задач. Когда мы имеем дело с большим количеством данных одного типа, то обозначать их различными именами и обрабатывать становится затруднительно. Например, пусть имеется совокупность действительных чисел 1.6, 14.9,-5.6,8.5,0.46. Конечно, можно каждое число обозначить своим именем, например А1, SB, M, NIC, NUM. Но можно для всей совокупности чисел ввести одно обобщающее имя, а индексом отметить конкретное число, например, A1,A2,A3,A4,A5. Обобщенные имена используются и в математике, и в программировании в том случае, когда рассматриваются массивы данных. Под массивом понимается конечная совокупность данных одного типа, упорядоченная по значению индекса. Каждый элемент массива обозначается именем массива с индексом. Массив описывается при помощи задания типа его компонентов и типа индексов. При задании типа индексов фактически указывается число компонентов массива, поэтому тип индексов может быть любым скалярным или ограниченным. При задании типа индексов нельзя использовать вещественный тип данных. Число компонентов массива фиксируется при описании и в процессе выполнения программы не меняется. Тип компонентов массива может быть простым или сложным. ОДНОМЕРНЫЙ МАССИВ (ВЕКТОР) Общий вид описания одномерного массива: type имя типа = array [тип индекса] of тип компонент; var идентификатор: имя типа; Например: type vectl = array [1..12] of real; var o,b,/: vectl; Массив может быть описан и без представления типа в разделе описания типов данных: var идентификатор: array [тип индексов] of тип компонент; Например: var mas : array[1.. 10] of integer; Если в программе используется несколько массивов одного типа, то в разделе описаний типов идентификаторы этих массивов перечисляются через занятую, затем следует описание типа. var g, h : array [0..4] of real; m, n: array [1703..2003] of real; Для ссылок на отдельные элементы массива используется переменная с индексом. Переменная с индексом - это имя переменной, обозначающей массив, вслед за которым в квадратных скобках стоит выражение, определяющее индекс элемента, например: a[1];b[i]; c[2*n+l];f[k div2]; т.е. в качестве индекса можно использовать константу, переменную или арифметическое выражение, но обязательно того же типа, что и указанный в описании массива тип индекса, иначе ЭВМ выдаст сообщение об ошибке. Элементы массива могут стоять как в левой части оператора присваивания, так и в выражениях. Над переменной с индексом можно производить любые операции, а также использовать в качестве аргументов в стандартных функциях, которые допустимы для данных его базового типа (типа компонентов массива). Если базовый тип есть real, то допустимы все операции над данными вещественного типа, включая и стандартные функции. Ввод и вывод элементов одномерного массива выполняется поэлементно с использованием оператора цикла for, который определяет порядок заполнения (вывода) массива. Пример. Программа, в которой вводится с клавиатуры и затем выводится на дисплей вектор а, состоящий из 10 действительных чисел. uses crt; var a : array [1 ..10] of real; i: integer; begin clrscr; for i := 1 to 10 do read(a[i]); for i := 1 to 10 do write(a[i] : 7 : 2) end. При составлении программ с использованием одномерных массивов некоторые задачи встречаются особенно часто. Ниже приведены фрагменты соответствующих программ. Часто встречающиеся задачи на одномерный массив Пусть задан вектор а, состоящий из п действительных элементов. Задача 1. Найти сумму элементов вектора а. sum := 0; for i := 1 to n do sum := sum + a[i]; Задача 2. Найти произведение элементов вектора а. p:=1; for i := 1 to n do p := р*a[i]; Задача 3 . Найти количество отрицательных элементов вектора а. k:=0; for i:= 1 to п do if a[i]<0 then k:=k + 1; Задача 4. Найти максимальный элемент вектора a, max := а [1]; for i := 2 to n do if a[i] > max then max :=a[i]; Задача 5.Найти максимальный элемент вектора а с указанием его индекса. Max:=a[1];k:=1; For i:=2 to n do If a[i]>max then begin max :=a[i];k:=i; end; Пример. Заданы векторы f и g, каждый из 8 действительных чисел. Найти вектор h=f+g вычислить его модуль. program masl; var f, g, h: array [ 1 ..8] of real; i: integer; modh: real; begin clrscr; Writeln ('введи вектор f :'); for i := 1 to 8 do read(f[i]); writeln(‘введите число g:'); for i :=1 to 8 do read(g[i]); modh := 0; for i:=1 to 8 do begin h[i]:=f[i]+g[i]; modh : = modh + sqr(h[i]) end; modh := sqrt(modh); writeln(‘вектор h:’); for i:= l to 8 do write(h[i]); writeln; writeln('modh =’, modh : 7 : 2) end. Использование и обработка двумерного массива (матрицы) Двумерный массив, или матрица, является более сложной структурой, чем вектор, так как представляет собой таблицу, состоящую из определенного количества строк и столбцов. При определении элемента матрицы необходимо указать два индекса: номер строки и номер столбца. Общий вид описания двумерного массива: array [тип индекса 1, тип индекса 2] of тип компонентов; Тип индекса, так же как и при описании одномерного массива, может быть любым скалярным или ограниченным, кроме действительного и неограниченного целого. Тип индекса 1 определяет число строк в матрице, а тип индекса 2 - число столбцов. Тип компонентов можег быть любым простым или сложным. Двумерный массив можно описать различными способами. Пусть матрица а с действительными компонентами состоит из 10 строк и 12 столбцов. Приведем примеры описания матрицы а.
matr - array [1.. 10 ] of vect; var a: matr; 3. var a : array [1 ... 10,1 .. 12 ] of real; Для обращения к отдельным элементам матрицы применяется переменная с индексами. Сначала записывается идентификатор матрицы, затем в квадратных скобках через запятую два индексных выражения, первое из которых обозначает позицию строки, второе - столбца. Выражение должно определять значение того же типа, что и указанные в описании массива типы индексов, иначе ЭВМ выдаст сообщение об ошибке. Элементы массива могут стоять как н левой части оператора присваивания, так и в выражениях. Над переменной с индексом можно производить любые операции, которые допустимы для данных его базового типа (типа компонентов массива). Если базовый тип есть rеal, то допустимы все операции над данными вещественного типа, включая и стандартные функции. Ввод и вывод элементов двумерного массива выполняется с использованием двойного цикла с параметром. Ввод массива a(10, 10): for i := 1 to 10 do begin writeln ('введи элементы', i,' строки'); for j := 1 to 10 do read ( a [i,j]); end; Вывод массива а(10, 10) writeln ('вывод массива А(10, 10)'); for i::= 1 to 10 do begin for i : 1 to 10 do write(a[i,j] : 7 : 1); writeln end; Часто встречающиеся задачи на двумерный массив При составлении программ с использованием двумерных массивов некоторые задачи встречаются особенно часто. Ниже приведены фрагменты соответствующих программ. Пусть для примера дана матрица а(4, 4). Задача 1. Найти сумму элементов матрицы а. sum := 0; for i: = 1 to 4 do for j: = 1 to 4 do sum : = sum + a[i,j]; Задача 2 . Найти максимальный элемент матрицы а. max : = а[1, 1]; for i: = 1 to 4 do for j: = 1 to 4 do if a[i,j] > max then max : = a[i,j]; Примечание: при вычислении минимального элемента матрицы знак неравенства меняется на противоположный и переменную следует назвать min. Задача 3 . Найти максимальный элемент матрицы а с запоминанием его индексов. max : = а[1, 1]; к:=1; т: =1; for i: = 1 to 4 do for j: = 1 to 4 do if a[i,j] > max then max : = a[i,j]; k: = i; m: =j; end; Задача 4 . Найти количество положительных элементов матрицы а. k:=0; for i: = 1 to 4 do for j: = 1 to 4 do if a[i,j] >0 then к:=к+ 1; Задача 5. Получить вектор b из положительных элементов, расположенных в четных строках матрицы а. Фактическое число элементов вектора b неизвестно, т.к. оно зависит от значений элементов матрицы а. В описании вектора b необходимо указать максимально возможное число положительных элементов в четных строках матрицы а. var a : array [1..4, 1..4] of real; b : array [1 .. 8 ] of real; {2 строки с четными номерами по 4 элемента в каждой строке} ........................................... k:=0; for i: = 1 to 4 do for j: = 1 to 4 do if (a[i,j] > 0) and (i mod 2 = 0 ) then begin k : = k + 1; b[k] : = a[i,j]; end; {Фактическое число элементов вектора b определяется значением переменной к} writeln('вывод вектора b'); for i:= 1 to k do write(b[i] : 5 : 2); Задача 6 . Сформировать вектор b из сумм элементов столбцов матрицы а. Количество элементов в массиве b равно числу столбцов матрицы а. Var a : array [1..4, 1..4] of real; b : array [1 .. 4 ] of real; ....................................... for j := 1 to 4 do begin b[j] := 0; for i: = 1 to 4 do b[j]:= b[j] + a[i,j]; end; writeln('вывод вектора b'); for i:= 1 to 4 do write(b[i] : 5 : 2); Задача 7. Найти произведение элементов 2-го столбца матрицы а(4,4). for I := 1 to 4 do p:=p*a[i,2]; Задачи с использованием главной или побочной диагонали матрицы Существует множество задач, в которых необходимо использовать элементы главной или побочной диагонали матрицы (эти понятия имеют смысл только для квадратных матриц!). Пусть дана матрица a(4, 4). a11,a22,a33,a44 - элементы главной диагонали матрицы. На главной диагонали индексы строки и столбца равны, то есть i = j. Элемент главной диагонали можно обозначать как a[i,j]. У элементов матрицы, лежащих выше главной диагонали, i <j, а у тех, которые ниже, i <j, a14,a23,a32,a41 - элементы побочной диагонали матрицы. На побочной диагонали сумма индексов строки и столбца постоянна и на единицу больше размера матрицы, то есть для матрицы a(4, 4) i+j = 5, поэтому элемент побочной диагонали можно обозначать как а[i,5 - i]. У элементов a[i,j], лежащих выше побочной диагонали, i+j<5, а у элементов a[i,j], лежащих ниже побочной диагонали, i +j > 5. Задача 1 . Найти сумму элементов, лежащих на главной диагонали матрицы а. sum := 0; for i:=1 to 4 do sum := sum + a[it i]; Задача 2 . Найти сумму элементов матрицы а, расположенных выше ее главной диагонали. sum = 0; for i: = 1 to 4 do for j : = 1 to 4 do if i <j then sum + a[i,j]; Задача 3. Найти сумму элементов побочной диагонали матрицы а. sum = 0; for i: = 1 to 4 do sum : = sum + a[i, 5-i]; Задача 4. Найти сумму элементов матрицы а, лежащих выше ее побочной диагонали. sum = 0; for i: = 1 to 4 do for j : = 1 to 4 do if i + j< 5 then sum : = sum + a[i,j]; Пример выполнения задания 4 Дана матрица а(4,4). Получить матрицу b(4,4) по правилу: а также произведение элементов строки, содержащей наименьший элемент матрицы, program lab4; uses crt; var k,i,j: integer; b, a : array [1 .. 4,1 .. 4] of real; p, min : real; begin clrscr ; writeln ( 'введите матрицу a'); for i: 1 to 4 do for j := 1 to 4 do read(a[i,j]); min := a[1,1]; k:=1; {формирование матрицы b} { поиск минимального элемента и номера строки, в которой он находится} for i := 1 to 4 do for j := 1 to 4 do begin if a[i,j] > 0 then b[i,j] := 2*a[i, j] else if a[I,j]< min then begin min:=a[i,j]; k:-i end end; p:=1; for j:=1 to 4 do p:= p*a [k,j]; {вычисление произведения k-ой строки} writeln(' вывод b(4,4)'); for i:= 1 to 4 do begin for j:= 1 to 4 do write(b[i,y]; 6 : 2,' '); writeln end; writeln (' минимальн. элемент =', min : 7 :2 ); writeln ('произведение элементов', к: 2,' строки =', p:7:2) end.0> |
Первичная обработка бланков, проводимая в рцои, включает в себя совокупность следующих процедур | «Обработка металлов давлением»/ Авторы – составители: И. М. Курлова, О. И. Макушина. – Магнитогорск: гапоу чо «Политехнический колледж»,... | ||
Тема. Практическое занятие 27. Обработка и вручение отправлений с наложенным платежом | Целью настоящей работы является изучение методов программирования на java с использованием массивов | ||
Заявление «Выдача дубликата свидетельства о регистрации залога взамен утраченного, непригодного для использования» 38 | Учебный план по специальности 09. 05. 01 «Применение и эксплуатация автоматизированных систем специального назначения» предполагает... | ||
К таким средствам можно отнести использование команд поиска, фильтрации и использование запросов. Простейшим способом поиска информации... | Цель урока: Создание условий для формирования представлений об обработке двумерных массивов | ||
Извещение о проведении открытого запроса предложений в электронной форме №332-2013/2ДП | Разработка и внедрение системы Динамической сегментации с использованием массивов неструктурированных данных (Big Data) для увеличения... |
Поиск Главная страница   Заполнение бланков   Бланки   Договоры   Документы    |