
- •Создание программ с использованием циклов. Работа с массивами
- •Введение
- •Лабораторная работа №6. Оператор цикла с параметрами
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Язык программирования Pascal
- •Var // объявление переменных
- •Лабораторная работа №7. Оператор цикла с предусловием
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Язык программирования Pascal
- •Var // объявление переменных
- •Лабораторная работа №8. Одномерный массив
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Язык программирования Pascal
- •Var // объявление переменных
- •Лабораторная работа №9. Двухмерный массив. Матрица.
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Язык программирования Pascal
- •Int a[2][3]; /* представлено в виде матрицы
- •Int a[100][100]; // матрица
- •Библиографический список
Язык программирования Pascal
Так как тип <тип>, идущий в описании массива за словом of, - любой тип Pascal, то он может быть, в частности, и другим массивом, например:
type
mat = array [0..5] of array [-2..2] of array [Char] of Byte;
Такую запись можно заменить более компактной:
type
mat = array [0..5,-2..2,char] of Byte;
Глубина вложенности структурированных типов вообще, а следовательно, и массивов - произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива не может быть больше 2 Гбайт.
Руководствуясь блок-схемой, записываем алгоритм на языке Pascal:
begin // начало программы
readln(M); // ввод переменной
// вводим значения элементов матрицы
for i := 1 to M do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := 1 to M do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
A[i,j]:=Random(100); // используем для ввода функцию генерации случайных чисел
end; // конец группы операторов, выполняемых в цикле
end; // конец группы операторов, выполняемых в цикле
// выводим значения элементов исходной матрицы
for i := 1 to M do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := 1 to M do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
Write(A[i,j],' '); // выводим элементы в одну строку
end; // конец группы операторов, выполняемых в цикле
Writeln; // переход на следующую строку
end; // конец группы операторов, выполняемых в цикле
// преобразуем матрицу
for i := M downto (M div 2)+(M mod 2)+1 do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := M-(i-1) to i-1 do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
X:=A[i,j];
K:=M-(j-1);
L:=i;
P:=i;
for r:=1 to 3 do
begin // начало группы операторов, выполняемых в цикле
A[L,M-(K-1)] := A[K,L];
L:=K;
K:=M-(P-1);
P:=L;
end; // конец группы операторов, выполняемых в цикле
A[L,M-(K-1)] := X;
end; // конец группы операторов, выполняемых в цикле
end; // конец группы операторов, выполняемых в цикле
// выводим значения элементов преобразованной матрицы
for i := 1 to M do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := 1 to M do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
Write(A[i,j],' '); // выводим элементы в одну строку
end; // конец группы операторов, выполняемых в цикле
Writeln; // переход на следующую строку
end; // конец группы операторов, выполняемых в цикле
end. // конец программы
По условию задачи все переменные должны быть объявлены как целые числа, следовательно, в разделе объявления переменных программы, располагающимся перед началом программы, должна содержаться следующая запись:
var // объявление переменных
M,i,j,X,K,L,P,r:Integer;
A:array[1..100,1..100] of Integer;
Реализация программы в среде Delphi выглядит следующим образом:
// конец программы program prog_lr11;
// указание компилятору создать консольное приложение
{$APPTYPE CONSOLE}
var // объявление переменных
M,i,j,X,K,L,P,r:Integer;
A:array[1..100,1..100] of Integer;
begin // начало программы
// сообщение пользователю о цели программы
writeln('Programma povorota matricy na 90 gradusov.');
// сообщение пользователю о необходимости ввода переменной
write('Vvedite razmer matricy M: ');
readln(M); // ввод переменной
Randomize; // настраиваем генератор случайных чисел
// вводим значения элементов матрицы
for i := 1 to M do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := 1 to M do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
A[i,j]:=Random(100); // используем для ввода функцию генерации случайных чисел
end; // конец группы операторов, выполняемых в цикле
end; // конец группы операторов, выполняемых в цикле
Writeln('Ishodnaya matrica');
// выводим значения элементов исходной матрицы
for i := 1 to M do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := 1 to M do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
Write(A[i,j],' '); // выводим элементы в одну строку
end; // конец группы операторов, выполняемых в цикле
Writeln; // переход на следующую строку
end; // конец группы операторов, выполняемых в цикле
// преобразуем матрицу
for i := M downto (M div 2)+(M mod 2)+1 do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := M-(i-1) to i-1 do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
X:=A[i,j];
K:=M-(j-1);
L:=i;
P:=i;
for r:=1 to 3 do
begin // начало группы операторов, выполняемых в цикле
A[L,M-(K-1)] := A[K,L];
L:=K;
K:=M-(P-1);
P:=L;
end; // конец группы операторов, выполняемых в цикле
A[L,M-(K-1)] := X;
end; // конец группы операторов, выполняемых в цикле
end; // конец группы операторов, выполняемых в цикле
Writeln('Preobrazovanaya matrica');
// выводим значения элементов преобразованной матрицы
for i := 1 to M do // цикл по строкам
begin // начало группы операторов, выполняемых в цикле
for j := 1 to M do // цикл по столбцам
begin // начало группы операторов, выполняемых в цикле
Write(A[i,j],' '); // выводим элементы в одну строку
end; // конец группы операторов, выполняемых в цикле
Writeln; // переход на следующую строку
end; // конец группы операторов, выполняемых в цикле
readln; // задерживаем закрытие консольного окна
end. // конец программы
Язык программирования C
В языке С определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Они формализуются списком константных-выражений следующих за идентификатором массива, причем каждое константное-выражение заключается в свои квадратные скобки.
Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного - три и т.д.
//объявление