Файл: Особенности и примеры использования массивов при разработке программ (Определение массива).pdf
Добавлен: 29.03.2023
Просмотров: 180
Скачиваний: 1
ВВЕДЕНИЕ
Актуальность выбранной темы обусловлена тем, что массивы очень широко используются при разработке различного рода приложений. Массивы являются распространенным и полезным способом сохранения многих различных частей связанных данных. Массивы полезны при создании отсортированных и неотсортированных списков данных, при сохранении таблиц данных и для выполнения многих других задач. С понятием «массив» приходится работать и при решении научно-технических и экономических задач, связанных с обработкой совокупностей большого количества значений.
Объект исследования: Массивы в программах
Предмет исследования: работа с массивами
Цель: рассмотреть работу с массивами на примере Телефонного справочника ООО «Данрайт».
Задачи:
Изучить определение массива.
Изучение характеристики ООО «Данрайт» и определение плана работ.
Рассмотреть работу с массивами на примере Телефонного справочника ООО «Данрайт».
Обобщить и систематизировать теоретический и практический материал по теме.
Глава 1. Определение массива
Алгоритмом называется строго определенная последовательность действий, определяющих процесс перехода от исходных данных к искомому результату.
Свойства алгоритма:
1)Дискретность. Алгоритм должен представлять процесс решения задачи как последовательность выполнения простых действий (шагов, этапов).
2)Детерминированность (Однозначность). Каждое действие (шаг, этап) должно быть четким, однозначным, исключающим произвольное толкование и не оставляющим места для двусмысленности.
3)Результативность. Алгоритм должен приводить к решению задачи или сообщению, что задача решений не имеет за конечное число шагов.
4)Конечность. Каждое отдельное действие, как и весь алгоритм должны иметь возможность реального исполнения. Поэтому алгоритм имеет придел, т. е. конечен.
5)Массовость. Алгоритм разрабатывается в общем виде так, чтобы его можно было применять для класса задач, различающихся только исходными данными.
Алгоритмы бывают линейные, разветвляющиеся и циклические. Линейный алгоритм – это алгоритм, в котором действия выполняются только один раз и строго в том порядке, в котором они записаны.
Разветвляющийся алгоритм – это алгоритм, в котором то или иное действие выполняется после анализа условия.
Циклический алгоритм - это алгоритм, в котором группа операторов выполняется несколько раз подряд.
Циклические алгоритмы используются для работы с массивами.
Массивом - называется упорядоченная последовательность величин одного типа. Массив характеризуется именем, размером и размерностью. Имена массивов образуются по тем же правилам, что и имена простых переменных. Размер массива определяет число элементов в массиве. Размерность массива – это число индексов, определяющих местоположение элементов в массиве. Индексы записываются после имени массива в скобках через запятую. Если размерность массива равна единице, то такой массив называют одномерным, если двум – двумерным.
Для реализации циклического процесса можно использовать операторы присваивания, безусловного перехода, условного перехода, но есть и специальные операторы.
Условный оператор IF условие THEN оператор [ELSE оператор] где IF, THEN, ELSE – ключевые слова «если» …, «то» … «иначе»; условие – логическое выражение. Работа оператора: Оператор IF проверяет условие, если логическое выражение принимает значение «истина», то выполняется оператор, следующий за THEN, затем управление передается следующей операторной строке. Если логическое выражение принимает значение «ложь», то выполняется оператор, следующий за оператором ELSE. Если в операторе IF опущена ветвь ELSE, то при значении логического выражения «ложь» управление передается следующей операторной строке.
Оператор цикла while имеет такую структуру:
while условие do оператор;
Это надо понимать так: пока истинно условие, стоящее между while и do, выполняется оператор после do, называемый телом цикла. Перед каждым заходом в цикл проверяется условие: если оно истинно, то выполняется оператор, если ложно, то автоматически осуществляется выход из цикла.
Если оператор в цикле состоит из нескольких операторов, то поместить их нужно в операторные скобки begin - end (сравните оператор цикла for). Не стоит также забывать, что сами операторы разделяются оператором "точка с запятой" (но перед закрывающим END в конце ставить её не обязательно).
while условие do
begin
оператор 1; оператор 2; оператор 3; ........... оператор N
end;
Cуществует и оператор цикла с параметром в Pascal он записывается так:
for i := N1 to N2 do оператор;
Всё, что находится между for и do, называется заголовком цикла, после do – телом цикла. Переменная i зазывается параметром цикла и имеет порядковый тип (целые числа, логический тип, символы, перечислимый и диапазонный тип). Слова for, to и do – это служебные слова Pascal, которые использовать в своих программах для обозначения переменных нельзя. Индекс i, которым обозначаются номера действий в операторе цикла, изменяется от меньшего N1 к большему N2 (N1 ≤ N2). Первый номер N1 по значению не должен превышать второй N2, иначе цикл не запустится и ОПЕРАТОР ни разу не выполнится.
Оператор цикла этого типа действует так:
— сначала индекс i приравнивается N1 – минимальному возможному значению;
— потом проверяется, не превышает ли i второго номера N2 (i ≤ N2). Если это условие выполняется, то идем на следующий пункт, иначе (то есть при i > N1) – выходим из цикла;
— выполняется ОПЕРАТОР в теле цикла;
— далее увеличивается i на 1, и повторяем со второго пункта (т.е. проверяем истинность условия i ≤ N2, выполняем оператор, увеличиваем i на 1, и т.д).
В роли начального значения N1 наиболее часто используют 1 или 0 (это зависит от задачи).
Объединяя массивы и циклы можно написать небольшое число операторов, которые обрабатывают большой объем данных. Выполнение тех же задач с использованием отдельных переменных может потребовать написания сотен операторов.
Таким образом, массив - это множество однотипных элементов, объединённых общим именем и занимающих в компьютере определённую область памяти. Количество элементов в массиве всегда конечно. В общем случае массив - это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Массив представляет собой фиксированное количество упорядоченных однотипных компонент, снабженных индексами, т.е. является совокупностью конечного числа данных одного типа. В качестве элементов массива можно использовать любой тип данных, поэтому вполне правомерно существование массивов записей, массивов указателей, массивов строк, массивов и т.д.
Массивы могут быть:·
- одномерными (одна строка – несколько столбцов);·
- двумерными (несколько строк – несколько столбцов).
Одномерные массивы
Каждому используемому в программе конкретному массиву должно быть дано свое имя. Это имя будем называть полной переменной, поскольку ее значение есть весь массив. Каждая компонента массива может быть явно обозначена путем указания имени массива, за которым следует селектор компоненты — взятый в квадратные скобки индекс, задающий правило вычисления номера нужной компоненты. Это отличие от привычной записи индекса в математике, когда он указывается справа в нижней позиции, объясняется необходимостью использования линейной записи программы, так что многоуровневая запись должна быть исключена. При ссылке на компоненты массива индекс записывается на одном уровне с именем и заключается в квадратные скобки. Таким образом, для ссылки на отдельные компоненты используется запись вида (имя массива) [<индекс>] которую будем называть частичной переменной (поскольку ее значением является не весь массив, а отдельная его компонента, номер которой задается индексом) — применительно к массивам она называется переменной с индексом. В нашем примере массив получит имя v, а ссылки на отдельные его компоненты производятся с помощью частичных переменных v[ 1], v[2], ..., v[1ОО]. В общем случае в качестве индекса может, быть использовано выражение, значение которого и определяет номер компоненты массива. При этом важно, что в индексное выражение могут входить переменные, так что при изменении их значений меняется и значение индекса, которое определяет номер компоненты массива. Таким образом, одна и та же переменная с индексом в процессе выполнения программы может обозначать различные компоненты массива. Тип значения индексного выражения называют типом индекса. Множество значений типа индекса должно быть перенумерованным множеством, тем самым определяя количество компонент и их упорядоченность. При задании регулярного типа кроме типа индекса необходимо задать тип компонент. Задание такого регулярного типа, как одномерный массив, т.е. вектор, имеет вид:
А: аrrау [(тип индекса)] оf <тип компонент>, где <тип компонент> — имя или задание типа.
Типовые алгоритмы обработки одномерных массивов
Тест.
Дано: Мама мыла раму
Результат: умар алым амаМ
Тест.
Дано: Мама мыла раму
Результат: умар алым амаМ
- Заполнение, вывод элементов массива
- Сумма, произведение элементов
- Выбор по условию
- Максимальный (минимальный) элемент
- Вставка, удаление элементов
|
Типовой алгоритм |
Программная реализация(Паскаль) |
|
1 |
2 |
|
Заполнение массива |
Program pr; Const n=10; Var a: array [1…n] of…; I:integer; Begin For i:=1 to n do Readln (a[i]); … |
|
Вывод в строку |
… For i=1 to n Write(a[i]); … |
|
Сумма, произведение элементов |
… S:=0;P:=1; For I:=1 to n Begin S:=s+a[i]);P:=p*a[i]); End; |
|
Выбор по условию |
… K:=0;S:=0;P:=1; For i:=1 to n do If{условие} then Begin K=k+l;s:=s+a[i];p:p*a[i]; End; … |
|
Максимальный (минимальный) элемент |
… Max:=a[1];min:=a[1]; For i:=1 to n do Begin If a[i]>max then max:=a[i]; If a[i]> min then min:=a[i]; End; … |
|
Вставка |
… For i:=n downto k do a[i+1]:=a[i]; a[k]:=x; … |
|
Удаление |
… For i:=k to (n-1) do a[i]:=a[i+1]; … |
Типовые алгоритмы обработки строковых переменных
- «Разобрать» число на цифры, поместив каждую цифру в ячейку массива.
- «Разобрать» строку, поместив каждый символ в ячейку массива.
- «Разобрать» предложение, поместив каждое слово в ячейку массива.
|
Типовой алгоритм |
Программная реализация |
|
«Разобрать» строки на буквы |
Var a:array [1…10]of char; Stroka: string; I,n:integer; Begin Readln (stroka); n:=length(stroka); For i:=1 to n do a[i]:=copy(stroka,I,1); … End. |
|
«Разобрать» число на цифры |
Var a:array [1…10] of byte; Stroka:string; I,n,k:integer; Begin Readln (stroka); n:=length(stroka); For i:=1 to n do Val(copy(stroka,I,1),a[i],k); … End. |
|
«Разобрать» предложение на слова |
Program pr; Var a:array[1…10] of string Stroka:string; I,n,j,k:integer; Begin Readln (stroka); n:=lengyh(stroka); For i:=1 to n do If copy(stroka,I,1)=’ ‘then k:=k+1; K:=k+1; J:=1; For i:=1 to n do If copy(stroka,I,1)=’ ‘then j:=j+1 Else a[j]:=a[j]+copy(stroka,I,1); … End. |
Сортировка методом «Пузырька»
Дан массив:
|
5 |
8 |
4 |
9 |
3 |
Необходимо сортировать его в порядке возрастания.
1-й шаг.
|
5 |
8 |
4 |
9 |
3 |
|
5 |
4 |
8 |
9 |
3 |
|
5 |
4 |
8 |
9 |
3 |
|
5 |
4 |
8 |
3 |
9 |
2-й шаг.
|
4 |
5 |
8 |
3 |
9 |
|
4 |
5 |
8 |
3 |
9 |
|
4 |
5 |
3 |
8 |
9 |
3-й шаг.
|
4 |
5 |
3 |
8 |
9 |
|
4 |
3 |
5 |
8 |
9 |
4-й шаг.
|
3 |
4 |
5 |
8 |
9 |
Итого:
|
3 |
4 |
5 |
8 |
9 |
Паскаль:
For j:=n downto 2 do
For i:=1 to j-1 do
If a[i]>a[i+1] then
Begin
X:=a[i]; a[i]:=a[i+1]; a[i+1]:=x;
End;
…
Двумерные массивы
Двумерный массив – структура данных, хранящая в себе прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен.
Для описания двумерных массивов используются те же способы, что и для одномерных массивов.
Таким образом, для создания двумерного целочисленного массива размерностью 5×7 (5 строк, 7 столбцов) необходимо записать:
Способ 1
Type mas=array[1..5,1..7] of integer;
Способ 2
Var mas:array[1..5,1..7] of integer;
Для последовательного перебора всех элементов двумерного массива необходимо использовать вложенный цикл:
For i:=1 to 5 do {перебор строк матрицы}
For j:=1 to 7 do {перебор столбцов (ячеек) в строке}
Т.е. значение индекса строки (i) увеличится только в том случае, если индекс столбца (j) дойдет до своего конечного значения (в примере j = 7).При такой организации перебора элементов массива процесс перебора будет проходить по следующей схеме: