Рейтинг@Mail.ru
Menu
Скачать картинки на телефон бесплатно.
Заставки для телефона, аватарки.
(Вырезать из фотографии)

Роза `Гренд Могул` Яхта `Алиса` Лесное озеро Музей `Пирогово` Белочка
Выберите рубрику (тему)

Тема: Операторы цикла. Работа с двумерными массивами

Программа 4

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

Математическое решение

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

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

Операторы цикла. Работа с двумерными массивами.
Программа 4.
Есть действительная квадратная матрица порядка A(n x n). Создать массив B(m),m=n x n, элементы которого добыты чтением матрицы по спирали..
Алгоритм в виде диаграммы действий

Текст программы

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[i]: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тиною второго цикла, такие циклы называются вложенными
    Общие правила работы с вложенными циклами следующие:
      а) теоретически глубина вложения не ограниченная, но если она будет превышать два - то есть большее трех последовательно вложенных один в один циклов,- это сделает программу трудной для чтения и отладки и вызовет возникновение ошибок;
      б) границы тел циклов не должны пересекаться, то есть один цикл может быть полностью вложен в другой.

Случайный анекдот

Экзамен, студентка валится безвозвратно. За дверью стоит толпа и думает, как ее выручить. Наконец в аудиторию врывается парень и кричит:
- Иванова, у тебя сын родился!
Препод ее, естественно, поздравляет, ставит оценку, расписывается.
Дата: 05-05-2005   Автор: Admin   Подрубрика: Сессия