Массивы в языках Pascal и Basic
Реферат, 17 Июня 2011, автор: пользователь скрыл имя
Описание
С понятием "массив" приходится сталкиваться при решении научно-технических и экономических задач обработки совокупностей большого количества значений.
Массив - это множество однотипных элементов, объединённых общим именем и занимающих вкомпьютере определённую область памяти.
Работа состоит из 1 файл
Документ Microsoft Word (2).doc
— 133.50 Кб (Скачать документ){procedure vvod_sl - сюда подставить приведенные выше процедуры}
{procedure print}
Var a:mas; n:byte;
Begin
randomize;
vvod_sl(n, a); print(n, a);
writeln('Сумма минимального и максимального элементов', a[Min(n, a)] + a[Max(n, a)]);
writeln('Количество
отрицательных элементов,
V(n, a);
print(n, a)
End.
При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.
Например, данные о планетах Солнечной системы представлены следующей таблицей:
|
Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: 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 DO
FOR 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.
При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.
При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.
Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.
Задача 6. Заполнить матрицу порядка n по следующему образцу:
1 2 3 ... n-2 n-1 n
2 1 2 ... n-3 n-2 n-1
3 2 1 ... n-4 n-3 n-2
... ... ... ... ... ... ...
n-1 n-2 n-3 ... 2 1 2
n n-1 n-2 ... 3 2 1
Program Massiv12;
Var I, J, K, N : Integer;
A : Array [1..10, 1..10] Of Integer;
Begin
Write('Введите порядок матрицы: '); ReadLn(N);
For I := 1 To N Do
For J := I To N Do
Begin
A[I, J] := J - I + 1; A[J, I] := A[I, J];
End;
For I := 1 To N Do
Begin
WriteLn;
For J := 1 To N Do Write(A[I, J]:4);
End
End.
Задача 7. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
Program Obmen;
Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;
Begin
WRITE('Введите
количество элементов в
FOR I := 1 TO N DO
FOR J := 1 TO N DO
Begin
WRITE('A[', I, ',', J, '] '); READLN(A[I, J])
End;
FOR I := 1 TO N DO
Begin
Max := A[I, 1]; Ind := 1;
FOR J := 2 TO N DO
IF A[I, J] > Max THEN
Begin
Max := A[I, J]; Ind := J
End;
Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp
End;
FOR I := 1 TO N DO
Begin
WriteLn;
FOR J := 1 TO N Do Write(A[I, J] : 3);
End; WriteLn
End.
Задача 8. Задана прямоугольная целочисленная таблица размером m×n. Указать столбец (назвать его номер), где минимальное количество элементов, кратных сумме индексов.
type mas2=array[1..20, 1..20] of
integer;
{Формирование
массива заданного размера с
помощью датчика
procedure create(var m, n: byte; var a: mas2);
var i, j: byte;
begin
write('Введите размеры таблицы: '); readln(m, n);
for i:=1 to m do
for j:= 1 to n do
a[i, j]:= -20+random(41);
end;
{вывод таблицы на экран}
procedure print(const m, n: byte; const a: mas2);
var i, j: byte;
begin
for i:=1 to m do
begin
writeln;
for j:=1 to n do
write(a[i, j]:5);
end;
writeln
end;
{Поиск нужного столбца; результат - в переменной k и, далее, - значение функции}
function solution(const m, n: byte; const a: mas2): byte;
var i, j, k, ke, mke: byte;
begin
k:=1; mke:=m;
for j:=1 to n do
begin
ke:=0;
for i:=1 to m do
if abs(a[i, j]) mod (i+j) = 0 then ke:=ke+1;
if ke<mke then begin mke:=ke; k:=j end
end;
solution := k;
end;
var m, n: byte; a: mas2;
begin
randomize;
create(m, n, a);
print(m, n, a);
writeln('Ответ: ', solution(m, n, a))
end.
Задания
на определение условия задачи по теме
"Массивы"
Контрольные вопросы и задания
- Что такое массив?
- Почему массив является структурированным типом данных?
- Что такое размерность массива? Существуют ли ограничения на размерность массива?
- Какого типа могут быть элементы массива?
- Какого типа могут быть индексы элементов массива?
- Какие простые типы данных относятся к порядковым?
- Какими способами может быть заполнен массив? Приведите примеры.
- Как определить минимальный объём памяти, отводимой под массив?
- Какие действия выполняют обычно над элементами массива?
- Может ли массив быть элементом массива?
- В каком случае массивы совместны по присваиванию?
- Пусть элементами массива A (a[1], a[2], a[3], a[4]) являются соответственно x, -x, x2, -x2. Чему будет равно значение выражения
- a[-a[a[3]-2]]+a[-a[a[3]]]
при x=2?
- Можно ли выполнять обход двумерного массива, организовав внешний цикл по столбцам, а внутренний — по строкам?
- Точно и однозначно сформулировать условие задачи, решение которой приведено в данной программе:
- Program Kr_N_4;
- Const NMax = 50;
- Type Mass = Array[1..NMax,0..NMax-1] Of Real;
- Var A : Mass; I, J, N : 0..NMax; C : Real;
- Begin Write('Количество элементов массива N=? '); ReadLn(N);
- For I := 1 To N Do
- For J := 0 To N-1 Do
- Begin Write('A[',I,',',J,']= '); Readln(A[I,J])End;
- For I := 1 To N Do
- For J := 0 To N-1 Do
- Begin C := A[I,J];
- A[I,J] := A[N-I+1,J];
- A[N-I+1,J] := C
- End;
- For I := 1 To N Do
- Begin For J := 0 To N-1 Do
- Write(A[I,J]:5:2,' ');
- WriteLn
- End
- End.
- Целесообразно ли использовать ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы? одной строки матрицы? одного столбца матрицы?