- •Программирование на языке Pascal введение
- •Этапы разработки программ
- •Ядро Турбо Паскаль
- •Среда программирования Турбо паскаль
- •Функциональные клавиши
- •2.3. Текстовый редактор
- •Запуск и отладка программы
- •Элементы языка
- •3.1. Алфавит
- •3.2. Зарезервированные слова и идентификаторы
- •3.3. Общая структура программ в Турбо Паскаль
- •3.4. Основные типы данных. Простые типы
- •Основные операторы языка программирования Турбо Паскаль
- •4. 1. Ввод – вывод информации в Турбо Паскаль
- •4.2. Математические операции, встроенные математические функции Турбо Паскаль
- •4.3. Пустой оператор и составной оператор
- •4.4. Условный оператор
- •4.5. Оператор выбора
- •4.6. Операторы повторений
- •5. Символьные типы данных
- •6. Строковые типы данных
- •Стандартные процедуры и функции для строк
- •7. Структурированные типы данных. Массивы
- •7. 1. Одномерные массивы
- •Доступ к элементам массива
- •7.2. Сортировка массивов
- •7.2.1. Сортировка вставкой
- •7.2.2. Сортировка выбором
- •7.2.3. Сортировка обменом (пузырьковая сортировка)
- •7.3. Многомерные массивы
- •8. Записи
- •9. Множества
- •10. Типизированные константы
- •10.1. Константы простых типов и типа string
- •10.2. Константы-массивы
- •10.3. Константы-записи
- •10.4. Константы-множества
- •Литература
7.3. Многомерные массивы
Массивы могут иметь и более одного измерения. В таких случаях говорят о многомерных массивах. Многомерные массивы широко используются в математике, статистике и некоторых других прикладных науках (например, для матричных вычислений). Объявление двумерного массива выглядит следующим образом:
Var
TwoDimensionalArray: Array [1..80, 1..25] of Char;
Переменной TwoDimensionalArray соответствует некоторая матрица или двумерный массив, причем каждому элементу данного массива может быть поставлена в соответствие некоторая позиция на экране компьютера (на экране помещается 80 столбцов (с номерами от 1до 80) и 25 строк (с номерами от 1 до 25)). Таким образом, каждый элемент массива может быть использован для хранения одного символа, отображенного в соответствующей позиции экрана.
Поскольку элементы массивов расположены упорядоченно в соответствии с их номерами-индексами, необходимо внимательно относиться к изменению индексов. Обработка таких одномерных массивов ведется, как правило, с использованием вложенных циклов For…to…do.
Пример:
Применение некоторого двумерного массива.
Переменные Line и Column определяют номера строк и столбцов на экране.
Program DemoUsesTwoDimensionalArray;
Uses Crt;
Var
TwoDimensionalArray: Array[18..0, 1..25] of char;
Column, Line: integer;
Begin
ClrScr;
for Line:= 1 to 25 do
for Column: = 1 to 80 do
TwoDimensionalArray[Column, Line]:= Chr(32+Column);
{Вывод элементов массива. Номер столбца изменяется чаще}
{номера строки}
ClrScr;
for Line:= 1 to 25 do
begin
for Column: = 1 to 80 do
Write(TwoDimensionalArray[Column, Line]);
Writeln;
end;
End.
Пример:
Программа, которая выполняет «зеркальное» отображение элементов матрицы размерности m*n, элементами которой являются целые числа. Отображение осуществляется относительно вертикальной оси симметрии (меняет местами элементы первого столбца с последним, второго с предпоследним и т.д.).
Program VertMirrow;
Const
m = 10; {число строк}
n = 15; {число столбцов}
type
TMatr= array[1..m, 1..n] of integer;
Var
Matr: TMatr;
B: Integer;
i, j: integer;
Begin
Clrscr;
for i: =1 to m do {Ввод исходных значений матрицы}
for j: =1 to n do
readln(Matr[i, j]);
writeln ('Исходная матрица');
for i: =1 to m do
begin
for j: =1 to n do write (Matr [i, j]: 5);
writeln;
end;
writeln;
{Зеркальное отображение матрицы относительно вертикальной}
{оси симметрии}
for j: =1 to n div 2 do (Берем столбцы от первого до среднего)
for i: =1 to m do (Меняем местами симметричные столбцы)
begin
B:= Matr[i, j];
Matr[i,j]:= Matr [i, n-j+1];
Matr[i, n-j+1]:= B;
end;
Writeln('Преобразованная матрица:');
for i: =1 to m do
begin
for j: =1 to n do write (Matr [i, j]: 5);
writeln;
end;
writeln;
End.
Пример:
Программа, осуществляющей вывод элементов квадратной матицы порядка n и вывод, выполняя обход матрицы по «спирали», как показано на рисунке.
|
i
p p+1 n–p n–p+1
|
1
2
3
4
5
6 |
j p n–p+1 |
p p+1
n–p+1 |
|||||
1 2 3 4 5 6 |
|||||||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
||||
p n–p n–p+1 |
|||||||||
P –номер текущего витка «Спирали»
Программа, соответствующая данной схеме, имеет вид:
Program SpiralWrite;
Uses Crt;
const
n =10; {порядок квадратной матрицы}
type
TMatr = array[1…n, 1…n]of integer;
Var
Matr: TMatr; {исходная матрица}
i, j, p: integer;
Begin
ClrScr;
for i: =1 to n do
begin
for j: = 1 to n do read(Matr [i,j]);
end
writeln ('Исходная матрица:');
for i: = 1 to n do
begin
for j: = 1 to n do
write(Matr [i,j]:5);
writeln;
end;
writeln;
{Выписывание элементов матрицы по «спирали»}
for p: = 1 to (n+1) div 2 do
begin
{Выписывание элементов верхней строки p–го витка}
for j: =p to n-p+1 do
write(Matr[p, j]:4);
{Выписывание элементов правого столбца p–го витка}
for i: =p+1 to n-p+1 do
write(Matr[i,n-p+1]:4);
{Выписывание элементов нижней строки p–го витка}
for j: =n-p downto p do
write(Matr[n-p+1,j]:4);
{Выписывание элементов левого столбца p–го витка}
for i: =n-p downto p+1 do
write(Matr[i,p]:4);
end;
End.
В Турбо Паскаль можно одним оператором присвоения передать все элементы одного массива другому массиву того же типа, например:
Var
a,b: array [1…5]of integer;
begin
. . . .
a: =b
. . . .
end.
После этого присваивания все пять элементов массива a получат те же значения, что и в массиве b. Однако над массивами не определены операции отношения. Нельзя, например, записать: if a =b then…
Сравнить два массива можно поэлементно, например:
Var
a,b: array [1…5] of singl;
eq: Boolean;
i: byte;
Begin
. . . .
eq: = true;
for i: = 1 to 5 do
if a[1]< > b[j] then
eq: =fals;
if eq= false then
. . . .
End.
Задачи
Заполнить два массива размера nn, все элементы которого целые числа. Вычислить сумму двух массивов.
Заполнить массив размера nn, все элементы которого целые числа, затем ввести число. Вычислить произведение матрицы на число.
Заполнить массив размера nn, все элементы которого целые числа. Преобразовать массив, заменив строки столбцами.
Заполнить массив размера nn, все элементы которого целые числа. Преобразовать его:
а) расставив строки в порядке возрастания первого элемента каждой строки;
б) расставив строки в порядке убывания первого элемента каждой строки;
в) расставить столбцы в порядке возрастания первого элемента каждого столбца;
г) расставить столбцы в порядке убывания последнего элемента каждого столбца.
Усложнить предыдущую задачу условием: в случае равенства первых элементов провести расстановку по вторым элементам, затем в случае равенства вторых – по третьим и т.д.
Заполнить массив размера nn, все элементы которого целые числа. Вывести на экран:
а) строки, первые элементы которых – четные числа;
б) строки, первые элементы которых – положительные числа;
в) строки, сумма элементов которых – четное число;
г) столбцы, первые элементы которых – положительные числа;
д) столбцы, первые элементы которых – четные числа;
е) те строки, где элемент главной диагонали массива – четное число.
Заполнить массив размера nn, все элементы которого натуральные числа. Подсчитать число комбинаций символов 'н', 'о'. Комбинации 'но', 'он',
,
входят
в это число.Заполнить случайным образом массив nn, все элементы которого целые числа. Вывести на экран максимальные элементы строк.
Заполнить случайным образом массив размера nn, все элементы которого целые числа. Получить новый массив, переставляя его блоки в соответствии с рисунком:
а) б)
1
2
3
4
2
1
3
4
Заполнить случайным образом массив размера nn. Определить максимальный элемент в заштрихованной области.
а
