Как задается диапазон изменения индексов массива

от admin

Большая Энциклопедия Нефти и Газа

Иногда нужно знать диапазон изменения индексов массива . Значением примитивной функции PROTOTYPE является прототип, использованный при создании массива. Значением параметра функции PROTOTYPE должен быть массив, ее результат — цепочка-прототип.  [2]

Для нее характерно равномерное отображение значений ключа на весь диапазон изменения индексов , поэтому ее кладут в основу большинства преобразований ключей. Кроме того, при N, равном степени двух, эта функция эффективно вычисляется. Однако если ключ представляет собой последовательность букв, то именно от такой функции и следует отказаться. Дело в том, что в этом случае допущение о равновероятности всех ключей ошибочно.  [3]

Как показывают экспериментальные исследования выхлопных газов ГПА различных типов, диапазон изменения индекса концентрации составляет в среднем от 0 6 до 3 0 в зависимости от эмиссионной характеристики камеры сгорания, технического состояния агрегатов и наработки с начала эксплуатации и после капитального ремонта.  [4]

В языках программирования — синтаксическая конструкция, определяющая нижнюю и верхнюю границы диапазона изменения индекса массива .  [5]

Объявление массива компонентов ничем не отличается от объявления обычного массива — указывается имя массива, диапазон изменения индекса и тип элементов массива.  [7]

Описатель CONTROLLED используется при динамическом распределении памяти, например для размещения в памяти массивов, у которых диапазоны изменения индексов не определены в момент входа в блок, а вычисляются в процессе выполнения блока.  [8]

В паспорте ОСВ задается либо число команд в ОСВ, либо длина ОСВ в байтах, а также диапазоны изменения индексов элементов векторов при циклической организации выполнения команд ОСВ.  [9]

Элементарные инфиксные и префиксные операторы могут применяться к операндам, являющимся массивами, и давать в результате массивы с тем ограничением, что эти массивы должны быть идентичны по числу размерностей и диапазонам изменения индексов . Типы элементов массивов могут различаться при условии, что могут быть выполнены соответствующие преобразования типа. Например, если А и В — два массива с идентичными размерностями и диапазонами изменения индексов, то A — f — В дает в результате массив той же размерности, каждый элемент которого является суммой соответствующих элементов А и В.  [10]

В PL / 1, в отличие от фортрана II и IV, индексы могут принимать не только положительные значения, но и нулевые и отрицательные; поэтому в атрибуте размерности PL / I характеристика диапазона изменения индекса для каждой из размерностей массива может задаваться и с помощью граничной пары.  [11]

Параметром функции ARRAY является цепочка, образованная двумя цепочками PROTOTYPE ( A), между которыми стоит запятая. Таким образом, в новом массиве диапазон изменения индексов для обоих измерений одинаков.  [12]

Динамическое моделирование большинства структур языка Алгол осуществляется относительно просто и во многих случаях позволяет прямо использовать возможности аппаратуры. Массивы хранятся последовательно с неполным дескриптором, который необходим для динамического определения диапазона изменения индексов , однако описание типа и числа размерностей массива позволяет компилировать формулы доступа в последовательности выполняемых команд. Описания также позволяют применять специфические в отношении типов операции, которые обычно прямо обеспечиваются аппаратурой, за исключением нескольких случаев, упомянутых в предыдущем разделе. Основные области, требующие динамического программного моделирования, — это среда ссылок, параметры, передаваемые по имени, и ввод-вывод.  [13]

Перед тем, как новому вектору будет выделена память, будут найдены значения выражений / К и М для определения диапазона изменения индексов нового вектора и количества необходимой памяти.  [14]

В таких языках, как Алгол и ПЛ / I, требования к декларациям данных ослаблены в тех случаях, когда при небольшой потере в эффективности выполнения можно получить значительный выигрыш в гибкости. Хранение и обработку массивов можно организовать наиболее эффективно при наличии в декларациях массивов полной информации о типе, числе размерностей и диапазоне изменения индекса для каждой размерности, как это делается, например, в Фортране. Однако от такой полной фиксации структуры массива сильно страдает гибкость. Например, программист, пишущий на Фортране, часто вынужден определять массивы в расчете на наихудшие входные данные, отводя под них гораздо больше памяти, чем может в действительности понадобиться. Другой крайностью являются массивы АПЛ, вообще не требующие деклараций; они могут создаваться динамически, когда понадобятся, и могут быть переформированы в любой момент. Это соглашение дает большую гибкость, но поскольку приходится непрерывно проверять дескриптор, выполнение программы замедляется. Алгол представляет собой золотую середину между этими двумя крайностями. В программе на Алголе необходимо описать тип и число размерностей массива, но не обязательно задавать размер массива или диапазоны изменения индексов. Зная тип массива и число размерностей, компилятор Алгола способен скомпилировать весьма эффективные последовательности команд для обработки массива. Во время выполнения программы должны существовать простые дескрипторы, задающие диапазон изменения индекса для каждой раз мерности; дескриптор должен проверяться и обрабатываться каждый раз, когда происходит обработка массива. Потеря в скорости при таком подходе незначительна, зато программист получает важное средство — массивы, у которых размеры и диапазоны изменения индексов могут определяться динамически во время выполнения программы. Язык ПЛ / I, в частности, содержит многочисленные примеры средств, предусмотренных специально для достижения разумного баланса между противоречивыми требованиями эффективности выполнения и гибкости.  [15]

Паскаль / Методические разработки Turbo Pascal

Изучить принципы работы с одно — и двумерными массивами на языке Pascal.

2 Задачи работы

Научиться основным алгоритмам решения задач с использованием массивов на языке Pascal.

3 Порядок выполнения работы

3.1 В среде программирования Turbo Pascal составить и отладить программу решения следующей задачи тему « Одномерные массивы »:

Задан массив из 8 действительных чисел вида а 1 , а 2 , а 3 ,…, а 8 . Вывести на экран в одну строку все элементы массива и выполнить задание в соответствии с указанным преподавателем вариантом приложения А .

3.2 Получить численные результаты и провести их анализ .

3.3 Составить и отладить программу решения следующей задачи на тему « Двумерные массивы »:

Задан целочисленный двумерный массив размера 3 х 4. Вывести на экран массив в виде матрицы , состоящей из трех строк и четырех столбцов , и выполнить задание в соответствии с указанным преподавателем вариантом приложения В .

3.4 Проанализировать полученные результаты .

3.5 Составить отчет о проделанной работе .

4 Отчет о проделанной работе должен содержать

— название и цель работы ;

— номер и условие своего варианта ;

— полученные численные результаты ;

— анализ численных результатов ;

— ответы на контрольные вопросы пункта 7 в соответствии с указаниями преподавателя .

5 Теоретические положения

5.1 Общие сведения о массивах

Массивом называется совокупность элементов одинакового типа . Число элементов в массиве называется размерностью массива ; каждый элемент массива задается своим порядковым номером в массиве – так называемым индексом .

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

Для создания типа массивов в языке Pascal используются служебные слова TYPE и ARRAY, позволяющие создать пользовательский тип данных « Массив ». Каждому типу массивов присваивается собственное имя ; элементы , относящиеся к данному массиву , описываются в операторе VAR как переменные его типа .

Ввод и вывод элементов массива осуществляется в циклах . Индексы элементов массивов записываются в квадратных скобках .

5.2 Одномерные массивы

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

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

Язык Pascal допускает описание в программах одномерных массивов в следующем виде : TYPE < Имя _ типа _ массива >=ARRAY [< Диапазон _ индексов >] OF < Тип >,

где TYPE — служебное слово , используемое для создания пользовательского типа данных ; ARRAY … OF — служебные слова для описания массивов (“ Массив … из ”);

< Имя _ типа _ массива > — задаваемое пользователем имя типа массива ( требования к именам типов совпадают с требованиями к именам переменных ); < Диапазон _ индексов > – диапазон изменения индексов массива . В качестве данного диапазона может

выступить любой порядковый тип , кроме LONGINT. Чаще всего используют тип — диапазон , в котором задают границы изменения индексов ;

< Тип > — тип элементов массива , например , REAL, INTEGER, CHAR и др . Примеры описания типа массивов :

TYPE М =ARRAY [1..10] OF INTEGER; TYPE AR=ARRAY [0..15] OF REAL; TYPE V Т =ARRAY [-5..5] OF SINGLE;

TYPE GRUP=ARRAY [1..27] OF STRING[10].

Переменные , относящиеся к тому или иному типу массивов , должны быть соответственно объявлены в разделе описания переменных .

Например : VAR REZ:M; VAR P:AR; VAR A:V Т ;

Можно также описать переменную как непосредственно имеющую тип массива , например : VAR REZ:ARRAY [1..10] OF INTEGER.

При обращении к элементам массива в тексте программы обязательно требуется указывать их порядковый номер в массиве , например , REZ[1], POLE[0], A[5], STUD[i] ( где i принадлежит диапазону изменения индексов массива ).

Одномерные массивы , диапазон индексов которых начинается с 1, также иногда называются векторами . Например , если задан вектор V из 5 чисел (3, 0, 5, -7, 8), то второй элемент вектора равен 0 ( т . е . V[2]=0), пятый элемент вектора равен 8 ( т . е . V[5]=8) и т . д .

5.3 Примеры основных типов задач с использованием одномерных массивов

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

— нахождения суммы ( произведения ) элементов массива ; — определения наибольшего ( наименьшего ) элемента в массиве ;

— нахождения количества элементов массива , удовлетворяющих определенным условиям ; — упорядочения массива в порядке возрастания ( убывания ) элементов .

Рассмотрим перечисленные типы задач на следующих примерах .

5.3.1 Нахождение суммы элементов массива

Пусть известно , что в автопарке , имеющем 18 машин марки КАМАЗ , каждый из КАМАЗов перевез за день определенный объем груза . Определить суммарный объем перевозок грузов за день .

При решении задачи будем использовать тип массива KAMAZ для описания всех КАМАЗов автопарка ; переменную Р [i] для описания объема груза , перевезенной i- ой машиной за день (i меняется от 1 до 18). Текст программы может иметь при этом следующий вид :

Type KAMAZ =array[1..18] of real; Var i:integer;

For i:=1 to 18 do Begin

Writeln (‘ Введите объем перевозок ’, i, ‘– й машины , т ’); Readln (p[i]);

Writeln (‘ Суммарный объем перевозок S=’,S:8:2,’ т ’);

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

Аналогично реализуется и алгоритм нахождения произведения элементов массива ( с заменой начального значения суммы S:=0 на начальное значение произведения S:=1, и с заменой операции сложения элементов массива «+» на операцию умножения «*»).

5.3.2 Нахождение наибольшего элемента в массиве

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

Для описания списка зарплат сотрудников воспользуемся типом массива ZARPL, для задания зарплаты каждого из сотрудников – переменной SOTR.

Текст программы к приведенному примеру : Program pr2;

Type ZARPL=array[1..16] of real; Var i:integer;

sotr:ZARPL; Max: real;

For i:=1 to 16 do Begin

Writeln (‘ Введите зарплату ’, i,’ – го сотрудника , руб .’); Readln(sotr[i]);

For i:=2 to 16 do if max<sotr[i] then max:=sotr[i]; Writeln(‘ Наибольшая зарплата =’,max:10:2,’ руб .’); End.

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

Аналогично может быть найден и наименьший элемент в массиве . Для этого достаточно заменить в изложенной программе условие max<sotr[i] на условие min>sotr[i], где i меняется от 1 до 1 до 16, min – переменная типа REAL.

5.3.3 Нахождение количества элементов массива, удовлетворяющих некоторому условию

Известны результаты экзамена 22 студентов одной группы по информатике . Определить , сколько студентов сдали экзамен на 4 и 5.

Один из вариантов решения поставленной задачи имеет следующий вид : Program pr3;

Type INF=array[1..22] of integer; Var stud:INF;

for i:=1 to 22 do begin

1: writeln(‘ Введите оценку ’,i,’- го студента ’); readln(stud[i]);

if (stud[i]<1) or (stud[i]>5) then goto 1; if stud[i]>3 then p:=p+1;

writeln(‘ На 4 и 5 сдали экзамен ’,p:2,’ студентов ’); end.

В данной программе для обозначения списка оценок по информатике использовался тип массива INF, для обозначения оценок конкретных студентов – переменная stud. Программа предусматривает проверку корректности вводимых данных : при попытке ввода несуществующей по пятибалльной системе оценки ,

программа повторяет ее ввод . Для этого используется оператор перехода GOTO, где имя метки , к которой осуществляется переход ( в данном случае 1), описывается в разделе описания меток LABEL.

5.3.4 Сортировка массива по возрастанию

Известны результаты соревнования 9 участников по стрельбе . Расположить данные результаты в порядке возрастания набранных при стрельбе очков .

Алгоритм решения данной задачи является наиболее сложным из приведенных выше примеров и требует использования вложенных циклов .

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

Type STREL=array[1..9]of integer; Var rez:strel;

For i:=1 to 9 do begin

writeln(‘ Введите результаты ’,i,’- го участника ’); readln(rez[i]);

for i:=1 to 8 do for j:=i+1 to 9 do if rez[i]>rez[j] then begin

writeln(‘ Отсортированные по возрастанию результаты :’); for i:=1 to 9 do write (rez[i]:5,’ ‘);

Здесь STREL – тип массива результатов стрельбы участников , rez[i] – переменная для описания результатов i- го участника (i меняется от 1 до 9). Вспомогательная переменная s используется при перестановке местами элементов массива .

5.4 Двумерные массивы

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

Двумерные массивы , в которых диапазоны индексов начинаются с 1, также называются иногда матрицами . Размерность каждой матрицы определяется как MxN, где М – число строк в матрице , N – число столбцов . Например , задана матрица А размерностью 3 х 4.

Здесь элемент A[2,1]=5, A[1,2]=-7, A[3,2]=5, A[3,3]=-8. Первый индекс элемента двумерного массива задает номер строки матрицы , в которой расположен элемент , второй индекс – номер столбца .

Если число строк матрицы равняется числу столбцов , то матрицы данного типа называются квадратными . Элементы квадратной матрицы вида B[1,1], B[2,2], B[3,3]… составляют главную диагональ матрицы . Иногда вводят понятие побочной диагонали квадратной матрицы для элементов вида B[1,N], B[2,N-1], B[3,N-2]…B[N,1], где N – число строк ( столбцов ) матрицы .

Описание типов двумерных массивов в языке Pascal осуществляется аналогично описанию типов одномерных массивов с добавлением диапазона изменения второго индекса .

TYPE MATR=[1..4,1..5] OF INTEGER; TYPE B=[2..9,0..6] OF REAL;

TYPE C=ARRAY[-1..4,-1..4] OF CHAR.

Также допускается указание имени другого типа массива в качестве типа элементов массива , например :

TYPE VEC=ARRAY[1..4] OF REAL; MAS=ARRAY[1..5] OF VEC.

В результате приведенного выше описания тип массива MAS будет объявлен как тип двумерного массива , первый индекс которого будет меняться от 1 до 5, а второй индекс – от 1 до 4, т . е . размерность массива составит 5 х 4 элементов .

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

5.5 Примеры задач с использованием двумерных массивов При решении задач на использование двумерных массивов применяются , как правило , те же алгоритмы , что

и при работе с одномерными массивами . Проиллюстрируем это на конкретных примерах .

5.5.1 Нахождение наибольшего элемента в заданной строке матрицы

Пусть задана матрица А из действительных чисел размера 3 х 4. Найти наибольший элемент во второй строке данной матрицы .

Приведем программу решения задачи в виде :

Type Matr=array[1..3,1..4] of real; Var max:real;

for i:=1 to 3 do for j:=1 to 4 do begin

writeln(‘ Введите элемент а [‘,i,’,’,j,’]’); readln(a[i,j]);

max:=a[2,1]; for j:=2 to 4 do

if max<a[2,j] then max:=a[2,j];

writeln(‘ Наибольший элемент второй строки =’,max:8:2); end.

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

5.5.2 Нахождение элементов массива, удовлетворяющих определенному условию

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

Для решения поставленной задачи может быть использована следующая программа : program Sessia;

type PR=array [1..5,1..2]of integer; Fam=array[1..5]of string[10];

var r:pr; st:fam; i,j:integer;

for i:=1 to 5 do begin

writeln(‘ Введите фамилию ‘,i,’- го студента ‘); readln(st[i]);

writeln(‘ Введите оценку данного студента по химии ( от 2 до 5)’); readln(r[i,1]);

writeln(‘ Введите оценку данного студента по информатике ( от 2 до 5)’); readln(r[i,2]);

if (r[i,1]=5) and (r[i,2]=5) then writeln(‘ Студент — отличник — ‘,st[i]); end.

В данной программе для хранения фамилий студентов используется одномерный строковый массив st типа Fam, для хранения оценок студентов – двумерный целочисленный массив r типа PR, причем первый столбец матрицы r используется для хранения результатов экзамена по химии , второй столбец – экзамена по информатике . Если у некоторого студента оценки за оба экзамена составили 5 баллов , то его фамилия будет выведена на экран с сообщением « Студент — отличник ».

5.5.3 Нахождение сумм элементов строк матрицы

Рассмотрим задачу нахождение сумм элементов строк матрицы на примере задачи подсчета итогов футбольного чемпионата .

Пусть задана таблица результатов игр 5 команд футбольного чемпионата размера 5 х 5. На диагонали таблицы стоят значения 0, другие элементы таблицы равны 0, 1 или 2, где 0 баллов соответствует проигрышу команды в игре , 1 балл – ничьей , 2 балла – выигрышу . Определить сумму баллов каждой команды по результатам чемпионата .

Легко заметить , что для построения матрицы R результатов игр достаточно ввести лишь стоящую выше ( или ниже ) главной диагонали половину матрицы , т . к . результаты остальных игр могут быть рассчитаны из известного соотношения : если , например , первая команда обыграла вторую , то элемент R[1,2]=2, а элемент R[2,1]=2-R[1,2]=0; аналогично , если вторая команда сыграла в ничью с третьей , то R[2,3]=1, R[3,2]=2- R[2,3]=1. Таким образом , нетрудно получить вид взаимосвязи элементов матрицы : R[i,j]+R[j,i]=2, где i и j меняются от 1 до 5 ( кроме элементов главной диагонали ). На главной диагонали матрицы R по условию задачи всегда стоят числа 0.

Перейдем к написанию программы решения поставленной задачи . Program foot;

Type tab=array[1..5,1..5] of integer; Var r:tab;

for j:=i+1 to 5 do begin

writeln (‘ Введите результат игры ‘,i,’– й команды с ’,j,’ – й : 0, 1 или 2 балла ’); readln(r[i,j]);

for j:=1 to i-1 do r[i,j]:=2-r[j,i];

for i:=1 to 5 do begin

for j:=1 to 5 do write(r[i,j]:4); writeln;

for j:=1 to 5 do s:=s+r[i,j];

writeln(i,‘- ая команда набрала ’,s:3,’ очков ’); end;

6 Методические рекомендации к выполнению работы

6.1 При выполнении задания воспользоваться алгоритмами решения стандартных задач по теме « Одномерные массивы », изложенными в п .5.3.1-5.3.4.

6.2 Провести численные расчеты для вектора (4, 7, -9, 5, 1, -5, 10, 7). Проанализировать правильность полученных результатов .

6.3 При решении задачи воспользоваться примерами программ в п .5.5.1-5.5.3 и алгоритмами п .5.3.1-5.3.4.

Читать:
Cpu nb vid control что это

Пример вывода на экран двумерного массива в виде матрицы размерности 3 х 4 приводится в следующем фрагменте программы :

for i:=1 to 3 do begin

for j:=1 to 4 do write( а [i,j]:5); writeln;

Проанализировать полученные результаты .

7 Контрольные вопросы

7.1 Что понимают под массивом данных ?

7.2 Что называют размерностью массива ?

7.3 Что понимают под индексом элемента массива ?

7.4 Какой массив называется одномерным ?

7.5 Приведите примеры одномерных массивов .

7.6 Как описываются одномерные массивы на языке PASCAL?

7.7 Как задается диапазон изменения индексов массива ?

7.8 Как обозначаются индексы массивов на языке PASCAL?

7.9 Какие стандартные алгоритмы по работе с одномерными массивами Вы знаете ?

7.10 Поясните понятия двумерного массива , матрицы .

7.11 Что обозначают индексы матрицы ?

7.12 Сколько элементов в матрице из 7 строк и 9 столбцов ?

7.13 Дайте понятие квадратной матрицы , диагоналей квадратной матрицы .

7.14 Приведите пример описания двумерных массивов на языке PASCAL.

7.15 Поясните порядок использования вложенных циклов при вводе элементов двумерного массива .

1. Фаронов В . В . Турбо Паскаль 7.0. Начальный курс . – М .: Нолидж . – 2000. – 576 с .

2. Зуев Е . А . Система программирования Turbo Pascal. – М .: Радио и связь . – 1992. – 288 с .

3. Рубенкинг Н . Турбо Паскаль для Windows. – М .: Мир . — 1994. – 535 с .

4. Информатика . Базовый курс / Под ред . С . В . Симоновича – СПб : Питер .- 2000. – С .560 — 611.

Приложение А Варианты заданий на тему «Одномерные массивы»

1) Найти среднее арифметическое всех элементов массива .

2) Найти наименьший элемент в массиве .

3) Найти количество положительных элементов массива .

4) Найти количество отрицательных элементов массива .

5) Определить , сколько раз встречается число 7 среди элементов массива .

6) Определить , сколько элементов массива меньше , чем число 6.

7) Определить , сколько элементов массива больше , чем число 3.

8) Найти сумму всех неотрицательных элементов массива .

9) Найти наименьшее из чисел а 1 , 2 а 2 , 3 а 3 ,…, 8 а 8 .

10) Найти наибольшее из чисел 2 а 1 , 3 а 2 , 4 а 3 ,…, 9 а 8 .

11) Найти сумму а 1 +2 а 2 +3 а 3 +…+8 а 8 .

12) Найти наименьший по модулю элемент массива .

13) Найти разность между наибольшим и наименьшим элементами массива .

14) Отсортировать массив в порядке убывания элементов .

15) Найти произведение отрицательных элементов массива .

16) Найти сумму всех элементов массива , имеющих четные индексы .

17) Найти наибольший из элементов массива , имеющих нечетные индексы .

18) Найти среднее арифметическое всех положительных элементов массива .

19) Найти среднее арифметическое всех отрицательных элементов массива .

20) Найти сумму элементов массива , превышающих число 5.

Приложение В Варианты заданий на тему «Двумерные массивы»

1) Найти наибольший элемент в третьем столбце матрицы .

2) Найти сумму всех элементов матрицы .

3) Найти сумму всех положительных элементов матрицы .

4) Найти наименьший элемент в первой строке матрицы .

5) Найти среднее арифметическое значение элементов второго столбца матрицы .

6) Найти произведение элементов третьего столбца матрицы .

7) Найти сумму элементов первой и третьей строк матрицы .

8) Определить , сколько раз встречается число 5 среди элементов всей матрицы .

9) Определить , сколько раз встречается число 1 среди элементов третьей строки матрицы .

10) Найти количество отрицательных элементов в матрице .

11) Найти количество отрицательных элементов в первой строке матрицы .

12) Найти количество неотрицательных элементов во втором столбце матрицы .

13) Найти сумму элементов второй строки матрицы .

14) Найти наибольший элемент в матрице .

15) Найти наименьший элемент в матрице .

16) Найти наименьший по модулю элемент в первой строке матрицы .

17) Найти среднее арифметическое значение всех отрицательных элементов матрицы .

18) Определить , сколько элементов матрицы превышает число 2.

19) Расположить все элементы матрицы в строку в порядке возрастания .

20) Расположить все элементы матрицы в строку в порядке убывания .

Методические указания к лабораторной работе

Использование строковых переменных в среде программирования Pascal

Научиться принципам работы со строковыми переменными в среде программирования Pascal .

2 Задачи работы

Изучить приемы решения задач с использованием строковых переменных .

3 Порядок выполнения работы

3.1 В среде программирования Turbo Pascal составить и отладить программу решения следующей задачи :

Задан список студентов из 7 фамилий . Распечатать данный список в столбец и выполнить задание в соответствии с указанным преподавателем вариантом приложения А .

3.2 Провести анализ результатов работы программы .

3.3 Составить отчет о проделанной работе .

4 Отчет о проделанной работе должен содержать

— название и цель работы ;

— номер и условие своего варианта ;

— полученные при расчетах результаты ;

— анализ полученных результатов ;

— ответы на контрольные вопросы пункта 6 в соответствии с указаниями преподавателя .

5 Теоретические положения

5.1 Описание переменных строкового типа

Для обработки текстов в среде программирования Turbo Pascal используется тип STRING ( строка ). Количество символов в строке — переменной задается объявлением типа STRING[N] , где значение N может быть любой константой порядкового типа , не превышающей 255.

Объявление типа STRING[N] указывает , что число символов в строке — переменной может изменяться в диапазоне от 1 до N . Если при описании типа количество символов в строке не указано , то по умолчанию длина строки принимается максимально возможной , т . е . 255 символов .

Строка в Turbo Pascal трактуется как цепочка символов . К любому символу в строке можно обратиться так же , как к элементу символьного массива типа ARRAY [1..N] OF CHAR . Над символами строки можно осуществлять необходимые действия и , тем самым , изменять содержание строки , ее длину и т . д .

Пример : program pr1; var st:string[6];

i:integer; begin st:=’ primer ‘; for i:=1 to 6 do write(st[i], ‘ ‘); end.

В результате работы данной программы на экран будут распечатаны следующие значения : p r i m e r

Таким образом , первым символом st[1] в переменной st является буква p , вторым символом st[2] является r , третьим – i и т . д .

К строкам можно применять операцию сцепления , например : program pr2;

var st:string[3]; begin

В результате работы предложенной выше программы переменной st будет присвоено значение ’abc’. Допускается сравнение строковых переменных . Операции отношений =, <>, >, <, >=,<= выполняются над двумя строками посимвольно , слева направо , с учетом внутренней кодировки символов .

Примеры сравнения строковых переменных с результатом « Истина »: ‘A’ < ‘B’

‘Turbo Pascal’ > ‘Turbo’ ‘2’ > ’1’

5.2 Процедуры и функции по работе со строками

Действия над строками реализуются в Turbo Pascal с помощью следующих встроенных процедур и функций . 5.2.1 Функция Concat(S1[,S2,…,SN]): string – сцепляет ( объединяет ) строки S1, S2,…, SN . Параметры , указанные в квадратных скобках , не являются обязательными .

Как задается диапазон изменения индексов массива

Методические указания

к лабораторной работе

Части 4 и 5

Использование одномерных и двумерных массивов

1 Цель работы

Изучить принципы работы с одно- и двумерными массивами на языке Pascal .

2 Задачи работы

Научиться основным алгоритмам решения задач с использованием массивов на языке Pascal .

3 Порядок выполнения работы

3.1 В среде программирования Turbo Pascal составить и отладить программу решения следующей задачи тему «Одномерные массивы»:

Задан массив из 8 действительных чисел вида а1, а2, а3,…, а8. Вывести на экран в одну строку все элементы массива и выполнить задание в соответствии с указанным преподавателем вариантом приложения А.

3.2 Получить численные результаты и провести их анализ.

3.3 Составить и отладить программу решения следующей задачи на тему «Двумерные массивы»:

Задан целочисленный двумерный массив размера 3 х 4. Вывести на экран массив в виде матрицы, состоящей из трех строк и четырех столбцов, и выполнить задание в соответствии с указанным преподавателем вариантом приложения В.

3.4 Проанализировать полученные результаты.

3.5 Составить отчет о проделанной работе.

4 Отчет о проделанной работе должен содержать

— название и цель работы;

— номер и условие своего варианта;

— полученные численные результаты;

— анализ численных результатов;

— ответы на контрольные вопросы пункта 7 в соответствии с указаниями преподавателя.

5 Теоретические положения

5.1 Общие сведения о массивах

Массивом называется совокупность элементов одинакового типа. Число элементов в массиве называется размерностью массива; каждый элемент массива задается своим порядковым номером в массиве – так называемым индексом.

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

Для создания типа массивов в языке Pascal используются служебные слова TYPE и ARRAY , позволяющие создать пользовательский тип данных «Массив». Каждому типу массивов присваивается собственное имя; элементы, относящиеся к данному массиву, описываются в операторе VAR как переменные его типа.

Ввод и вывод элементов массива осуществляется в циклах. Индексы элементов массивов записываются в квадратных скобках.

5.2 Одномерные массивы

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

Язык Pascal допускает описание в программах одномерных массивов в следующем виде:

TYPE <Имя_типа_массива>=ARRAY [<Диапазон_индексов>] OF <Тип>,

где TYPE — служебное слово, используемое для создания пользовательского типа данных;

ARRAY … OF — служебные слова для описания массивов (“Массив…из”);

<Имя_типа_массива> — задаваемое пользователем имя типа массива (требования к именам типов совпадают с требованиями к именам переменных);

<Диапазон_индексов> – диапазон изменения индексов массива. В качестве данного диапазона может выступить любой порядковый тип, кроме LONGINT . Чаще всего используют тип-диапазон, в котором задают границы изменения индексов;

<Тип> — тип элементов массива, например, REAL, INTEGER , CHAR и др.

Примеры описания типа массивов:

TYPE М =ARRAY [1..10] OF INTEGER;

TYPE AR=ARRAY [0..15] OF REAL;

TYPE VТ=ARRAY [-5..5] OF SINGLE;

TYPE GRUP=ARRAY [1..27] OF STRING[10].

Переменные, относящиеся к тому или иному типу массивов, должны быть соответственно объявлены в разделе описания переменных.

Можно также описать переменную как непосредственно имеющую тип массива, например:

VAR REZ:ARRAY [1..10] OF INTEGER.

При обращении к элементам массива в тексте программы обязательно требуется указывать их порядковый номер в массиве, например, REZ[1], POLE[0], A[5], STUD[i] (где i принадлежит диапазону изменения индексов массива).

Одномерные массивы, диапазон индексов которых начинается с 1, также иногда называются векторами.

Например, если задан вектор V из 5 чисел (3, 0, 5, -7, 8), то второй элемент вектора равен 0 (т.е. V[2]=0), пятый элемент вектора равен 8 (т.е. V[5]=8) и т.д.

5.3 Примеры основных типов задач с использованием одномерных массивов

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

-нахождения суммы (произведения) элементов массива;

-определения наибольшего (наименьшего) элемента в массиве;

-нахождения количества элементов массива, удовлетворяющих определенным условиям;

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

Рассмотрим перечисленные типы задач на следующих примерах.

5.3.1 Нахождение суммы элементов массива

Пусть известно, что в автопарке, имеющем 18 машин марки КАМАЗ, каждый из КАМАЗов перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день.

При решении задачи будем использовать тип массива KAMAZ для описания всех КАМАЗов автопарка; переменную Р[ i ] для описания объема груза, перевезенной i -ой машиной за день ( i меняется от 1 до 18).

Текст программы может иметь при этом следующий вид:

Type KAMAZ =array[1..18] of real;

For i:=1 to 18 do

Writeln (‘Введите объем перевозок ’, i, ‘–й машины, т’);

Writeln (‘Суммарный объем перевозок S =’, S :8:2,’ т’);

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

Аналогично реализуется и алгоритм нахождения произведения элементов массива (с заменой начального значения суммы S :=0 на начальное значение произведения S :=1, и с заменой операции сложения элементов массива «+» на операцию умножения «*»).

5.3.2 Нахождение наибольшего элемента в массиве

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

Для описания списка зарплат сотрудников воспользуемся типом массива ZARPL , для задания зарплаты каждого из сотрудников – переменной SOTR .

Текст программы к приведенному примеру:

Type ZARPL=array[1..16] of real;

For i:=1 to 16 do

Writeln (‘Введите зарплату ’, i ,’ –го сотрудника, руб.’);

For i:=2 to 16 do if max<sotr[i] then max:=sotr[i];

Writeln (‘Наибольшая зарплата =’, max :10:2,’ руб.’);

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

Аналогично может быть найден и наименьший элемент в массиве. Для этого достаточно заменить в изложенной программе условие max<sotr[i] на условие min>sotr[i], где i меняется от 1 до 1 до 16, min – переменная типа REAL.

5.3.3 Нахождение количества элементов массива, удовлетворяющих некоторому условию

Известны результаты экзамена 22 студентов одной группы по информатике. Определить, сколько студентов сдали экзамен на 4 и 5.

Один из вариантов решения поставленной задачи имеет следующий вид:

Type INF=array[1..22] of integer;

for i:=1 to 22 do

1: writeln (‘Введите оценку ’, i ,’-го студента’);

if (stud[i]<1) or (stud[i]>5) then goto 1;

if stud[i]>3 then p:=p+1;

writeln (‘На 4 и 5 сдали экзамен ’, p :2,’ студентов’);

В данной программе для обозначения списка оценок по информатике использовался тип массива INF, для обозначения оценок конкретных студентов – переменная stud. Программа предусматривает проверку корректности вводимых данных: при попытке ввода несуществующей по пятибалльной системе оценки, программа повторяет ее ввод. Для этого используется оператор перехода GOTO, где имя метки, к которой осуществляется переход (в данном случае 1), описывается в разделе описания меток LABEL.

5.3.4 Сортировка массива по возрастанию

Известны результаты соревнования 9 участников по стрельбе. Расположить данные результаты в порядке возрастания набранных при стрельбе очков.

Алгоритм решения данной задачи является наиболее сложным из приведенных выше примеров и требует использования вложенных циклов.

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

Программа реализации изложенного алгоритма может иметь следующий вид:

Type STREL=array[1..9]of integer;

writeln (‘Введите результаты ’, i ,’-го участника’);

for j:=i+1 to 9 do

if rez[i]>rez[j] then

writeln (‘Отсортированные по возрастанию результаты:’);

for i:=1 to 9 do write (rez[i]:5,’ ‘);

Здесь STREL – тип массива результатов стрельбы участников, rez[i] – переменная для описания результатов i-го участника (i меняется от 1 до 9). Вспомогательная переменная s используется при перестановке местами элементов массива.

5.4 Двумерные массивы

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

Двумерные массивы, в которых диапазоны индексов начинаются с 1, также называются иногда матрицами. Размерность каждой матрицы определяется как MxN , где М – число строк в матрице, N – число столбцов.

Например, задана матрица А размерностью 3х4 следующего вида:

Здесь элемент A [2,1]=5, A [1,2]=-7, A [3,2]=5, A [3,3]=-8. Первый индекс элемента двумерного массива задает номер строки матрицы, в которой расположен элемент, второй индекс – номер столбца.

Если число строк матрицы равняется числу столбцов, то матрицы данного типа называются квадратными. Элементы квадратной матрицы вида B[1,1], B[2,2], B[3,3]… составляют главную диагональ матрицы. Иногда вводят понятие побочной диагонали квадратной матрицы для элементов вида B[1,N], B[2,N-1], B[3,N-2]…B[N,1], где N – число строк (столбцов) матрицы.

Описание типов двумерных массивов в языке Pascal осуществляется аналогично описанию типов одномерных массивов с добавлением диапазона изменения второго индекса.

TYPE MATR=[1..4,1..5] OF INTEGER;

TYPE B=[2..9,0..6] OF REAL;

TYPE C=ARRAY[-1..4,-1..4] OF CHAR.

Также допускается указание имени другого типа массива в качестве типа элементов массива, например:

TYPE VEC=ARRAY[1..4] OF REAL;

MAS=ARRAY[1..5] OF VEC.

В результате приведенного выше описания тип массива MAS будет объявлен как тип двумерного массива, первый индекс которого будет меняться от 1 до 5, а второй индекс – от 1 до 4, т.е. размерность массива составит 5х4 элементов.

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

5.5 Примеры задач с использованием двумерных массивов

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

5.5.1 Нахождение наибольшего элемента в заданной строке матрицы

Пусть задана матрица А из действительных чисел размера 3х4. Найти наибольший элемент во второй строке данной матрицы.

Как задается диапазон изменения индексов массива

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

Например, пусть программа пользователя выполняет некоторые действия над последовательностью целых чисел, насчитывающей сто элементов i1, i2, . i100 которые требуется сохранить до конца ее работы. Вместо того чтобы описывать указанные переменные сто раз, можно один раз объявить целочисленную переменную i , состоящую из ста элементов, — массив.

Массив представляет собой совокупность данных одного типа с общим для всех элементов именем.

Элементы массива пронумерованы, и обратиться к каждому из них можно по номеру (или нескольким номерам — например, для элемента таблицы задается номер строки и столбца). Номера элементов массива иначе называются индексами, а сами элементы массива — переменными с индексами (индексированными переменными).

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

•тип — общий тип всех элементов массива;

•размерность (ранг) — количество индексов массива;

•диапазон изменения индекса (индексов) — определяет количество элементов в массиве.

Вектор (одномерный массив) — это пример массива, в котором элементы нумеруются одним индексом.

Если в массиве хранится таблица значений (матрица), то такой массив называется двумерным, его элементы нумеруются двумя индексами — номером строки и столбца соответственно. Массивы еще большей размерности (трехмерные, четырехмерные и т. д.) на практике встречаются довольно редко.

В качестве номера (индекса) элемента массива, в общем случае, используется выражение порядкового типа. Наиболее часто индекс — это целая константа или переменная типа integer , реже — типа char или boolean .

При обращении к элементу массива индекс указывается в квадратных скобках после имени массива. Например, а[3], Ь[1,2] . Однако использование элементов массива в качестве обычных переменных не дает существенной выгоды. Массивы ценны тем, что их индексы сами могут быть переменными или выражениями, обеспечивая доступ не к одному, а к последовательности элементов. Обработка массивов производится при изменении индексов элементов.

Например, в случае использования выражения следующие переменные удобно применять для просмотра в цикле элементов массива:

• a[i] — всех элементов;

• a[2*i] — элементов, стоящих на четных местах;

• a[2*i-i] — элементов, стоящих на нечетных местах.

&nbspпредыдущая &nbsp &nbsp &nbsp &nbsp&nbspменю &nbsp &nbsp &nbsp &nbspвверх &nbsp &nbsp &nbsp &nbsp&nbspследующая

Похожие статьи