→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Работа с двумерными массивами 
Автор Сообщение
Администратор
Аватара пользователя

Регистрация: 03.11.2007
Сообщения: 559
Откуда: Украина
Специальность:

Репутация: 6 [ ? ]
Сообщение Работа с двумерными массивами
Есть действительная квадратная матрица порядка A(n x n). Создать массив B(m),m=n x n, элементы которого добыты чтением матрицы по спирали.


Математическое решение
Пронумеруем кольца от внешнего кольца к внутреннему. На схеме показаны изменения индексов при передвижении по строке и столбцу для произвольного k - го кольца. Общее число колец равняется (n+1) div 2.


Алгоритм в виде диаграммы действий


Текст программы
program prg4;
{ http://nataliya.kiev.ua }
uses crt;
type TMatrix=array[1..15,1..15]of real;
TVector=array[1..225]of real;
procedure InputMatrix(var A:TMatrix;var n:byte);
var i,j:integer;
q:char;
begin
write('n=');readln(n);
write('Input by hand(y/n)?');
readln(q);
if (q='y')or(q='Y')then
for i:=1 to n do
FOR J:=1 TO N DO
begin
write('A[',i,',',j,']=');
readln(a[i,j])
end
else
begin randomize;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(999)/10;
end;
end;
procedure OutputMatrix(const a:Tmatrix;m:byte);
var i,j:byte;
begin
for i:=1 to m do
begin
for j:=1 to m do
write(a[i,j]:6:1);
writeln;
end;
end;
procedure MatrixVector(const x:TMatrix;var y:TVector;n:byte);
var i,j,k,l:byte;
begin
l:=0;
for k:=1 to (n+1)div 2 do
begin
for j:=k to n-k+1 do
begin
l:=l+1;
y[l]:=x[k,j];
end;
for i:=k+1 to n-k+1 do
begin
l:=l+1;
y[l]:=x[i,n-k+1];
end;
for j:=n-k downto k do
begin
l:=l+1;
y[l]:=x[n-k+1,j];
end;
for i:=n-k downto k+1 do
begin
l:=l+1;
y[l]:=x[i,k];
end;
end;
end;
procedure OutputVector(const vect:TVector;m:byte);
var i:byte;
begin
writeln('Masiv:');
for i:=1 to m do
write(Vect:7:1);
end;
var a:TMatrix;
b:TVector;
n:byte;
begin
clrscr;
InputMatrix(a,n);
OutputMatrix(a,n);
MatrixVector(a,b,n);
OutputVector(b,n*n);
readkey;
end.
Результат работы программы
1) n=10
Input by hand(y/n)?n
55.1 33.7 25.3 59.9 57.4 94.3 91.5 96.6 24.7 30.0
81.5 73.2 80.0 67.8 58.2 15.6 82.1 16.0 15.6 30.5
27.4 45.2 28.3 74.9 92.3 71.3 10.6 67.8 84.8 76.2
62.6 41.0 93.5 26.7 9.8 53.8 55.0 77.8 63.9 19.9
80.0 72.5 62.4 18.4 5.3 71.2 63.0 90.0 64.9 74.8
1.1 39.0 96.1 25.5 37.0 91.4 24.4 96.4 50.0 82.5
91.6 7.6 57.7 70.7 23.5 25.7 64.7 3.6 49.9 38.3
72.5 82.1 22.8 9.4 2.8 98.7 96.5 54.4 15.6 45.5
66.4 94.6 26.2 17.7 77.6 77.6 50.6 60.0 51.8 74.4
34.7 29.8 94.7 88.8 45.2 74.3 79.6 41.1 30.3 47.6
Masiv:
55.1 33.7 25.3 59.9 57.4 94.3 91.5 96.6 24.7 30.0 30.5 76.2 19.9 74.8 82.5 38.3 45.5 74.4 47.6 30.3 41.1 79.6 74.3 45.2 88.8 94.7 29.8 34.7 66.4 72.5 91.6 1.1 80.0 62.6 27.4 81.5 73.2 80.0 67.8 58.2 15.6 82.1 16.0 15.6 84.8 63.9 64.9 50.0 49.9 15.6 51.8 60.0 50.6 77.6 77.6 17.7 26.2 94.6 82.1 7.6 39.0 72.5 41.0 45.2 28.3 74.9 92.3 71.3 10.6 67.8 77.8 90.0 96.4 3.6 54.4 96.5 98.7 2.8 9.4 22.8 57.7 96.1 62.4 93.5 26.7 9.8 53.8 55.0 63.0 24.4 64.7 25.7 23.5 70.7 25.5 18.4 5.3 71.2 91.4 37.0

2) n=4
Input by hand(y/n)?y
A[1,1]=1
A[1,2]=2
A[1,3]=3
A[1,4]=4
A[2,1]=8
A[2,2]=9
A[2,3]=0
A[2,4]=3
A[3,1]=12
A[3,2]=13
A[3,3]=18
A[3,4]=24
A[4,1]=68
A[4,2]=134
A[4,3]=3.11
A[4,4]=25
1.0 2.0 3.0 4.0
8.0 9.0 0.0 3.0
12.0 13.0 18.0 24.0
68.0 134.0 3.1 25.0
Masiv:
1.0 2.0 3.0 4.0 3.0 24.0 25.0 3.1 134.0 68.0 12.0
8.0 9.0 0.0 18.0 13.0
Теория к программе
Массивы
Массив - это структура данных, что представляет собой совокупность фиксированного размера и конфигурации упорядоченных однородных независимых переменных.
Массив относится к так называемым структурированным данным, то есть таких, что имеют фиксированную внутреннюю структуру (организацию).
Массив характеризуется:
1. Количеством размерностей (количеством координат, необходимых для определения местонахождения нужного элемента массива).
2. Общим идентификатором (именем) для всех элементов массива.
3. Индексом или совокупностью индексов, которые определяют каждый отдельный елемент масива.
Одномерный массив (вектор) - имеет одну размерность
При обращении к отдельному элементу массива необходимо указать его индекс (местонахождение в массиве):
A[7] i:=7; A[i]
Здесь i - индекс элемента массива, может быть только целого или натурального типа
Двумерные массивы (матричные) - имеют две размерности, m*n. Доступ к отдельному элементу массива осуществляется путем определения двух его координат: номера строки i=1..m и столбца j=1..n
Операции предоставления выполняются аналогично:
a[3,9]=8; B:=A[1,1]
В трехмерном массиве для доступа к элементу необходимо указать три индекса A[i,j,k]. Можно создавать массивы с большей размерностью, но работа с массивами, размерность которых превышает 3, существенным образом усложняет алгоритм, поэтому, по возможности, необходимо избегать организации подобных структур данных.
Вложенные циклы
Если один цикл есть составной чаcтиною второго цикла, такие циклы называются вложенными
Общие правила работы с вложенными циклами следующие:
а) теоретически глубина вложения не ограниченная, но если она будет превышать два - то есть большее трех последовательно вложенных один в один циклов,- это сделает программу трудной для чтения и отладки и вызовет возникновение ошибок;
б) границы тел циклов не должны пересекаться, то есть один цикл может быть полностью вложен в другой.

[i]


11.11.2007 18:51
Профиль ICQ
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»