Задания для контрольной работы

Вариант 1.

Дана целочисленная прямоугольная матрица. Определить:

1) количество строк, не содержащих ни одного нулевого элемента (оформить в виде функции);

2) максимальное из чисел, встречающихся в заданной матрице более одного раза (оформить в виде процедуры).

Вариант 2.

Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента (оформить в виде функции). Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик (оформить в виде процедуры).

Вариант 3

Дана целочисленная прямоугольная матрица. Определить:

1) количество столбцов, содержащих хотя бы один нулевой элемент (оформить в виде функции);

2) номер строки, в которой находится самая длинная серия одинаковых элементов (оформить в виде процедуры).

Вариант 4

Дана целочисленная квадратная матрица. Определить:

1) произведение элементов в тех строках, которые не содержат отрицательных элементов (оформить в виде функции);

2) максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы (оформить в виде процедуры).

Вариант 5

Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов (оформить в виде функции);

2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы (оформить в виде процедуры).

Вариант 6

Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке и максимальным в j-м столбце.

Дана целочисленная прямоугольная матрица. Определить:

1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент (оформить в виде функции);

2) номера строк и столбцов всех седловых точек матрицы (оформить в виде процедуры).

Вариант 7

1) Для заданной матрицы размером 8x8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом (оформить в виде процедуры).

2) Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент (оформить в виде функции).

Вариант 8

1) Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик (оформить в виде процедуры).

2) Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент (оформить в виде функции).

Вариант 9

1) Соседями элемента Аij матрице назовем элементы Аkl, где i-1 £k£i+1, j-1£l£j+1, (k,l)¹(i,j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером 10х10 (оформить в виде процедуры).

2) В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали (оформить в виде функции).

Вариант 10

1) Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей (определение соседних элементов см. в варианте 9). Подсчитать количество локальных минимумов заданной матрицы размером 10х10 (оформить в виде процедуры).

2) Найти сумму модулей элементов, расположенных выше главной диагонали (оформить в виде функции).

Вариант 11

1) Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду (оформить в виде процедуры).

2) Найти количество строк, среднее арифметическое элементов которых меньше заданной величины (оформить в виде функции).

Вариант 12

1) Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями (оформить в виде процедуры).

2) Найти номер первой из строк, содержащих хотя бы один положительный элемент (оформить в виде функции).

Вариант 13

Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в зависимости от введенного режима), n может быть больше количества элементов в строке или столбце (оформить в виде процедуры).

Вариант 14

Осуществить циклический сдвиг элементов квадратной матрицы размером М×N вправо на k элементов таким образом: элементы первой строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично (оформить в виде процедуры).

Вариант 15

1) Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент (оформить в виде функции).

2) Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик (оформить в виде процедуры).

Вариант 16

1) Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке (оформить в виде процедуры).

2) Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента (оформить в виде функции).

Вариант 17

1) Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2, 2), следующий по величине - в позиции (3, 3) и т.д., заполнив таким образом всю главную диагональ (оформить в виде процедуры).

2) Найти номер первой из строк, не содержащих ни одного положительного элемента (оформить в виде функции).

Вариант 18

Дана целочисленная прямоугольная матрица. Определить:

1) количество строк, содержащих хотя бы один нулевой элемент (оформить в виде функции);

2) номер столбца, в котором находится самая длинная серия одинаковых элементов (оформить в виде процедуры).

Вариант 19

Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех строках, которые не содержат отрицательных элементов (оформить в виде функции);

2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы (оформить в виде процедуры).

Вариант 20

Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке и максимальным в j-м столбце.

Дана целочисленная прямоугольная матрица. Определить:

1) количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент (оформить в виде функции);

2) номера строк и столбцов всех седловых точек матрицы (оформить в виде процедуры).

 

Строки

Строковый тип - полезное и часто используемое расширение языка паскаль. В распоряжение программиста Turbo Pascal предоставляет ряд функций и процедур обработки строк:

Функции и процедуры Назначение
Length(Z: String): Integer Возвращает текущую длину строки Z
Concat(Z1, [Z2,...,Zn]: String): String Возвращает слияние (конкатенацию) строк ZbZ2,...,Zn
Copy(Z: String; Index: Integer; Count: Integer): String Возвращает подстроку строки Z длиной Count, начинающуюся с позиции Index
Pos(Substr: String; Z: String): Byte Определяет первое вхождение подстроки в строку и возвращает 0, если Z не содержит Substr или номер первого сим- вола Substr в Z
Insert(Source: String; var Z: String; Index: Integer) Вставляет в строку Z подстроку Source, начиная с позиции Index
Delete(var Z: String; Index, Count: Integer) Удаляет из строки Z подст року длиной Count, начинаю- щуюся с позиции Index
Str(N: [:Width[:Decimals]]; varZ: String) Преобразует числовое значение N в строковое Z. Возможно задание формата для N
Val(Z; var N; var Code: Integer) Преобразует строковое значение Z (строку цифр) в значение числовой переменной N.

Примеры решения заданий

Задача 1. Пусть задана строка, содержащая по крайней мере один данный символ. Требуется определить все позиции вхождения этого символа в строку (известно, что функция Pos возвращает позицию только первого вхождения подстроки в строку).

Решение: Алгоритм решения задачи представлен на рис. 6.1. Программа в Turbo Pascal будет иметь следующий вид:

Program max_diag;

Const Z: String='*?** * ? ?***';

ch: Char='?';

i: Byte=0;

Begin

WriteLn(Z);

While Pos(ch,Z)<>0 do

Begin

{вывод текущей позиции}

WriteLn(Pos(ch,Z)+i);

{удаление заданного символа}

Delete(Z,Pos(ch,Z),1);

{учет уменьшающейся длины}

Inc (i);

End;

WriteLn(Z);

ReadLn;

End.

Рис. 6.1. Блок-схема алгоритма решения задачи 1

Задача 2. Преобразовать строку, заменяя всякое вхождение одного данного символа: 1) на другой данный символ; 2) на данное слово.

Решение: Словами будем называть группы символов, разделённые пробелами (одним или несколькими) и не содержащие пробелов внутри себя.

При замене символа строки на другой символ её длина не изменяется. В этом случае можно рассматривать строку как символьный массив и при последовательном просмотре элементов строки выполнять необходимые переприсваивания значений. В случае же замены символа на слово (подстроки на подстроку) длина строки в общем случае динамически изменяется, поэтому удобнее применить стандартные процедуры Delete и Insert, выполняющие необходимые операции удаления и вставки.

Алгоритмы решения задачи представлены на рис. 6.2 и рис. 6.3.

Рис. 6.2. Блок-схема алгоритма решения задачи 2 (1)   Рис. 6.3. Блок-схема алгоритма решения задачи 2 (2)

1) Программа в Turbo Pascal будет иметь следующий вид:

Const z: String[24] = '\/\/\/\/\/\/\/\/\/\/';

old: Char='\'; new: Char='/';

Var i: Byte;

Begin

WriteLn('Исходная строка: ':22,z);

For i:=l to Length(z) do

If z[i]=old

then z[i]:=new;

Write('Строка после замены: ':22,z);

ReadLn;

End.

2) Программа в Turbo Pascal будет иметь следующий вид:

Const z: String='крутой сырой сухой';

old: String[1]='й';

new: String[3]='сть';

Var k,n: Byte;

Begin

n:=Length(old);

While Pos(old,z)<>0 do begin

k:=Pos(old,z);

Delete(z,k,n);

Insert(new,z,k);

end;

Write('Строка после замены: ',z);

ReadLn;

End.

Задача 3. Определить, является ли заданная строка (фраза) палиндромом. Палиндромом называется слово, фраза или стих, одинаково читающиеся слева направо и справа налево. Строку, последовательность символов z1,...,zn, будем называть палиндромом, если без учёта пробелов z1 = zn, z2=zn-1 и т.д.

Решение: Программа в Turbo Pascal будет иметь следующий вид:

Const z: String = 'ИСКАТЬ ТАКСИ';

Var i,q: Byte;

Begin

z:=Concat(' ''' ,z, ''' ');

Write ('Строка (фраза) ', z);

While Pos(' ',z)<>0 do

Delete(z,Pos(' ',z),l);

i:=l;

q:=Length(z);

While (i<=q div 2) and (z[i]=z[q+l-i]) do

Inc(i);

If i<=q div 2 then Write('не ');

Write('является палиндромом');

ReadLn;

End.

В первой программе из строки удаляются пробелы и после этого сравниваются пары симметричных символов: z1 и zn, z2 и zn-1 ,... Таких пар имеется q div 2, где q - количество символов в строке без учёта пробелов. Строка является палиндромом, если все пары просмотрены и совпадают.