Теория. Матрица – это двумерный массив, каждый элемент которого имеет два индекса: номер строки – i; номер столбца – j. Поэтому для работы с элементами матрицы необходимо использовать два цикла. Если значениями параметра первого цикла будут номера строк матрицы, то значениями параметра второго – столбцы (или наоборот). Обработка матрицы заключается в том, что вначале поочередно рассматриваются элементы первой строки (столбца), затем второй и т.д. до последней. Рассмотрим основные операции, выполняемые над матрицами при решении задач.
С матрицей можно делать все то, что и с одномерным массивом.
С матрицей как целой переменной можно только в одном случае работать, это когда один массив занести в другой, но оба эти массива должны быть одно типа и размерности.
Все остальные действия возможны только с элементами массива: сложение, вычитание, умножение, деление, сравнение.
Элементы главной диагонали имеют одинаковые индексы -x[1,1], x[2,2] и т.д., а у побочной (диагонали противоположной главной) индексы элементов в сумме равны n+1, т.е. i+j=n+1.
Постановка задачи. Составить программу для ввода целочисленного массива размерности 5х5 с клавиатуры и вывода суммы элементов его побочной диагонали на экран.
Решение задачи.
program P;
var
a: array [1..5,1..5] of longint;
i,j,s: longint;
begin
for i:=1 to 5 do
for j:=1 to 5 do read (a[i,j]);
s:=0;
for i:=1 to 5 do s:=s+a[i,6-i];
writeln (s);
end.
Обработка символьных строк
Теория. Текст – это произвольная последовательность символов некоторого алфавита. Алфавитом может служить любое множество символов, например (0, 1,2,...), (А, Б, В,...), (А, В, С,...).
Строкой символов, или символьной (строковой, текстовой) константой, называется последовательность символов, заключенных в апострофах.
Строка символов может состоять из одного или нескольких символов, а также не содержать ни одного символа (пустая строка, или строка нулевой длины). Максимальная длина текстовой строки 255 символов.
Мы знаем, что для обработки на компьютере данных того или иного типа используются переменные. Вспомним, что тип переменной определяется типом данных, которые она представляет.
Есть два типа данных: символьный и строковый.
1. Символьный тип данных (Char).
Описание: идентификатор char, (var x: char).
Диапазон значений: значением переменной этого типа может быть любой символ – это буквы, цифры, знаки препинания и специальные символы. Каждому символу алфавита соответствует индивидуальный числовой код от 0 до 255.
Значения для переменных типа char задаются в апострофах: sh:= '*'; а:= '3'; summa:='G'.
2. Строковый тип данных (string).
Как правило, одно целое число или один символ занимают в памяти ЭВМ два байта. В то же время для изображения символа достаточно одного байта. С целью экономии памяти машины при использовании символьных данных в языке Паскаль введено понятие строки. Строкой называется последовательность символов определенной длины. Элементы строки хранятся по два в двух байтах памяти ЭВМ.
Переменные типа string могут быть объявлены следующим образом:
var s1: string[30]; s2: string.
Число 30 означает максимально возможное количество символов строки s1.
Постановка задачи. Дано слово. Удалить ненужные символы,
“12 abc,.”, в слове.
Решение задачи.
program P1;
var
s, p, x: string;
d, I: longint;
begin
readln (s);
x: = ‘12abc,.’;
p: = ‘ ‘;
d: = length (s);
for i:=1 to d do
if pos (s[i],x)=0
then p: = p+s[i];
writeln (p);
end.
Сортировка массивов
Теория. Сортировка массива – это упорядочивание последовательности элементов по заданному признаку. Например, дано множество чисел {5, 2, 4, 3, 1}, т после выполнения сортировки по возрастанию будет получено множество {0, 1, 2, 3, 4, 5}.
Существует множество разнообразных алгоритмов сортировки последовательности чисел. Вот некоторые из них:
Сортировка выбором. Дана последовательность чисел a1,a2,…,an. Требуется переставить элементы так, чтобы они были расположены по убыванию. Для этого в массиве, начиная с первого, выбирается наибольший элемент и ставится на первое место, а первый — на место наибольшего.
Сортировка обменами. Дана последовательность чисел a1,a2,…,an. Требуется переставить числа в порядке возрастания. Для этого сравниваются два соседних числа аi и аi+1. Если аi > аi+1, то делается перестановка. Так продолжается до тех пор, пока все элементы не станут расположены в порядке возрастания.
Сортировка вставками. Дана последовательность чисел a1,a2,…,an. Требуется переставить числа в порядке возрастания. Делается это следующим образом. Пусть a1,a2,…,ai упорядоченная последовательность, т.е. а1 < а2 <... < аi, Берется следующее число аi+1 и вставляется в последовательность так, чтобы новая последовательность была также возрастающей. Процесс производится до тех пор, пока все элементы от i+1 до n не будут перебраны.
Постановка задачи. Отсортировать массив.
Решение задачи.
programm P;
var
a: array [1..10] of longint;
i,j,s,k: longint;
begin
for i:=1 to 10 do readln(a[i]);
for j:=1 to 9 do
begin
s:=a[j]; k:=j;
for i:=j+1 to 10 do
if a[i]<s
then begin s:=a[i]; k:=i; end;
a[k]:=a[j];
a[j]:=s;
end;
for i:=1 to 10 do writeln(a[i]);
end.
2.1.5 Разработка программ по теме «Геометрия»
Теория. Pascal иногда служит для написания программ, которые помогают быстро решать различные геометрические задачи. Для написания программ решающие геометрические задачи необходимы как минимум базовое знания геометрии и, иметь хорошее воображение.
Обычно разрабатывают программы для вычисления различных площадей, объемов или периметров фигур. Нахождения точек пересечения двух и более окружностей различных радиусов. Часто используется для нахождения расстоянии между двумя или более точками на плоскости, что позволяет к примеру найти самый короткий путь из точки А в точку В. При написания решения геометрических задач используются такие функции: sqrt (квадратный корень), abs (модуль числа), sqr (возвести в квадрат число), и другие.
Основной тип данных при решении геометрических задач является тип real. Вывод его осуществляется обычно с несколькими знаками после запятой: writeln(s:0:2), где 2 означает количество знаков после запятой числа s.
Постановка задачи. Заданы две окружности с центрами в точках (x1,y1) (x2,y2) и радиусами r1 и r2. Определите, является ли расстояние между точками (x1,y1) и (x2,y2) меньшим или равным сумме радиусов r1+r2.
Решение задачи.
program P1;
var
x1,y1,r1,x2,y2,r2,d: real;
Begin
readln (x1);
readln (y1);
readln (r1);
readln (x2);
readln (y2);
readln (r2);
d: = sqrt (sqr (x1-x2)+sqr(y1-y2));
if d <=r1+r2
then writeln (“Yes”)
else writeln (“No”);
end.