Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

Массивы, объединяющие переменные с одной индексной величиной, называются одномерными. Например, элементы Z[1], Z[2], Z[3], Z[4] образуют одномерный массив {Zi}, . Элементы одномерного обозначаются именем массива и следующим за ним в квадратных скобках индексом. Индекс может быть выражением, значение которого должно быть в диапазоне, определяемом типом индекса.

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

Например, данные о планетах Солнечной системы представлены следующей таблицей (таблица 1):

Таблица 1 Планеты солнечной системы

Планета Расст. до Солнца Относ. обьем Относ. масса
Меркурий 57.9 0.06 0.05
Венера 108.2 0.92 0.81
Земля 149.6 1.00 1.00
Марс 227.9 0.15 0.11
Юпитер 978.3 1345.00 318.40
Сатурн 1429.3 767.00 95.20

Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].

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

Program Vvod2; Var I, J: Integer; A: Array [1..20, 1..20] Of Integer; Begin FOR I:= 1 TO 3 DOFOR J:= 1 TO 2 DO A[I, J]:= 456 + I End.

элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.

При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.

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

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

Рассмотрим пример работы с двухмерными массивами. Обозначим массивом оценки учеников класса по нескольким предметам. Каждая оценка является значением элемента массива оценок А и имеет порядковый номер (два индекса). Поставим в соответствие первому индексу номер фамилии в списке учеников, а второму – номер предмета, по которому получена оценка. Тогда двумерный массив оценок можно представить в виде таблицы: каждый элемент a[i,j] находится на пересечении i-ой строки и j-го столбца.

Исходные данные могут быть представлены в виде таблицы оценок (табл. 2).

Таблица 2 Годовые оценки по предметам

Фамилия Предмет
Физика Химия Математика Информатика История Биология
Иванов            
Петров            
Сидоров            
Якупов            

Можно создать одномерные массивы фамилий S студентов и наименований предметов Р. Значением элемента массива Р будет наименование предмета, а индексом – порядковый номер предмета, например: 1 – физика, 2 – химия, 3 – математика, 4 – информатика, 5 – история, 6 – биология.

Представленная выше таблица может быть представлена в виде (таблица 3) набора элементов (число строк - n, число столбцов- m).

Таблица 3 Набор элементов

Массив S Массив Р
P[1] P[2] P[3] P[4] P[5] P[6]
S[1] a[1,1] a[1,2] a[1,3] a[1,4] a[1,5] a[1,6]
S[2] a[2,1] a[2,2] a[2,3] a[2,4] a[2,5] a[2,6]
S[3] a[3,1] a[3,2] a[3,3] a[3,4] a[3,5] a[3,6]
S[n] a[n,1] a[n,2] a[n,3] a[n,4] a[n,5] a[n,6]

Массив оценок можно задать с использованием функции Random, например:

For i:=1 to n do for j:=1 to m do a[i,j]:=Random(4)+2;

Для вывода элементов массива А на экран удобно использовать вложенный цикл:

For i:=1 to n do begin writeln; write(S[I]:19,’ ½’);

For j:=1 to m do write(A[i,j]:7,’ ½’) end;

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

Содержание работы

Работа предполагает базовые знания школьного курса языка программирования Turbo Pascal. Запустить программу Pascal ABC. Ознакомиться с работой программы, строкой меню, окном редактора кода и ввода-вывода команд. Воспроизвести примеры, приведенные ниже, используя, где необходимо, преобразование команд «школьного алгоритмического языка» в операторы паскаля. По указанию преподавателя выбрать вариант из Приложения Д. По завершении работы результаты сохранить в файл.

Пример 1. Задан одномерный массив X1, X2, …,XN. Фрагмент алгоритма определяет произведение отрицательных элементов с четными номерами.

 
 

Рис. 11. Пример фрагмента блок-схемы

Пример 2. Вычислить сумму элементов числового массива A = (a1, a2,..., aN).

Для решения задачи используем циклический алгоритм. Подготовка цикла заключается в задании начального значения суммы, равного нулю. В качестве параметра цикла берем номер члена последовательности. Начальное значение параметра цикла равно 1, конечное значение – числу членов последовательности, шаг цикла +1. В теле цикла выполняется последовательное суммирование. Окончание цикла будет при значении параметра цикла, превышающего количество членов последовательности.

Program Summa; Uses Crt; Type Mas = Array [1..20] of Real; Var A: Mas;i, N: Integer;S: Real;BEGIN ClrScr; {очистка экрана } Write('Введите N = '); ReadLn(N); {ввод значения N} For i:= 1 to N dо {цикл по элементам массива} beginWrite('A [ ', i, ' ] = ');ReadLn(A[i]){ввод элементов массива} end; S:= 0; {присваивание начального значения} For i:= 1 to N do S:= S+A[i]; {суммирование} WriteLn; WriteLn('Сумма равна ', S: 5: 1); ReadLnEND.

Пример 3. Найти наибольший элемент числового массива A = (a1, a2,..., aN) и его номер.

Program MaxElem;Uses Crt;Type Mas = Array [1..20] of Real;Var A: Mas;i, N: Integer;k: Integer;Amax: Real;BEGINСlrScr;Write('Введите N = ');ReadLn(N);For i:= 1 to N do {Ввод значений элементов массива А}beginWrite('A [ ', i, ' ] = '); ReadLn(A[i])end;Amax:= A[1]; k:=1; {Поиск максимального элемента}For i:= 2 to N doIf A[i] > Amax thenbeginAmax:= A[i]; k:= iend;WriteLn; WriteLn('Наибольший элемент', k, '-й');WriteLn('Его значение ', Amax: 5: 1); ReadLn

END.

Пример 4. Пример 4. В баскетбольную команду могут быть приняты студенты, рост которых превышает 170 см. Составьте список кандидатов в команду из студентов класса.

N теста I Рост[i] > 170 K Кандидаты в команду
1 1 2 3 + - + 0 1 2 Кулов Уваров
2 1 2 - - 0 -
Program BascetBall; Uses Crt; Var SurName: Array [1..30] of String; { фамилии студентов } Height: Array [1..30] of Real; { рост студентов } Cand: Array [1..30] of String; { фамилии кандидатов } NPupil, i, K: Integer; { NPupil - число студентов, K - количество зачисленных}BEGIN ClrScr; Write('В КОМАНДУ ЗАЧИСЛЯЮТСЯ студенты, '); WriteLn('РОСТ КОТОРЫХ ПРЕВЫШАЕТ 170 СМ.'); WriteLn; Write('Сколько всего студентов? '); ReadLn(NPupil); WriteLn('Введите фамилии и рост студентов:'); For i:= 1 to NPupil do begin Write(i, '. Фамилия - '); ReadLn(SurName[i]); Write(' Рост - '); ReadLn(Height[i]); end; WriteLn; K:=0; { Составление списка команды } For i:= 1 to NPupil do If Height[i]>170 thenbegin K:=K+1; Cand[K]:= SurName[i] end; If K=0 then WriteLn('В ГРУППЕ НЕТ КАНДИДАТОВ В КОМАНДУ.') else begin WriteLn('КАНДИДАТЫ В БАСКЕТБОЛЬНУЮ КОМАНДУ:');For i:= 1 to K do WriteLn(i, '. ', Cand[i]);end; ReadLnEND.

Пример 5. Дан массив X(N). Получить новый массив Y(N) такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из X.

Данные Результат
N=7 X=(-1, 2, 0, 4, -3,-2,0) Y=(2, 4, 0, 0, -1, -3, -2)
Program NewOrder;Uses Crt;Var N, i, k: Integer;X, Y: Array [1..20] of Real;BEGINClrScr;Write('Введите N = '); ReadLn(N);For i:= 1 to N dobeginWrite('X[ ', i, ' ] = '); ReadLn(X[i])end;k:=0;For i:= 1 to N doIf X[i]>0 thenbegin k:=k+1; Y[k]:=X[i]end;For i:= 1 to N doIf X[i]=0 thenbegin k:=k+1; Y[k]:=X[i]end;For i:= 1 to N doIf X[i]<0 thenbegin k:=k+1; Y[k]:=X[i]end;Write('О т в е т: полученный массив');For i:= 1 to N do Write(Y[i]: 5: 1);WriteLn; ReadLn END

Пример 6. Заполнить матрицу порядка n по следующему образцу:

      ... n-2 n-1 n
      ... n-3 n-2 n-1
      ... n-4 n-3 n-2
... ... ... ... ... ... ...
n-1 n-2 n-3 ...      
n n-1 n-2 ...      
Program Massiv12; Var I, J, K, N: Integer; A: Array [1..10, 1..10] Of Integer; BeginWrite('Введите порядок матрицы: '); ReadLn(N); For I:= 1 To N Do For J:= I To N DoBegin A[I, J]:= J - I + 1; A[J, I]:= A[I, J];End; For I:= 1 To N DoBegin WriteLn; For J:= 1 To N Do Write(A[I, J]:4);EndEnd.

Задача 7. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.





Дата публикования: 2014-10-20; Прочитано: 981 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.016 с)...