1. Найти первый максимальный элемент массива и его индексы.
Процедура Append открывает существующий файл для добавления в него информации. Описание —Append(Var f:Text). Переменная f является файловой переменной типа Text, которая должна быть связана с внешним файлом с помощью процедуры Assign. Процедура Append открывает существующий внешний файл, имя которого поставлено в соответствие переменной f. Если файл уже открыт, то сначала он закрывается, а затем открывается повторно. Указатель текущей позиции (вспомните головки чтения, записи в магнитофоне) при этом устанавливается на конец данного файла.
Если сама процедура поиска первого максимального элемента массива вряд ли вызывает вопросы, то для вывода результата в файл Output.txt наших знаний не хватает. Мы можем переопределить вывод и значение максимального элемента с его индексами выводить на экран. Для этого необходимо:
Assign(Output,'Con'); Rewrite(Output);
и написать оператор WriteLn(Max,' ‘,iMax,' ',jMax). Однако массив выводится в файл Output.txt, а результаты работы — на экран. Где логика?
Воспользуемся процедурой Append. Добавление к основной программе может иметь и такой вид:
Search (n,m,A,Max,iMax, jMax) ;
Append (Output) ;
WriteLn (Max:5,iMax:5,jMax:5);
Измените процедуру Search для поиска последнего максимального элемента, для поиска всех максимальных элементов и их индексов.
2. Сформировать одномерный массив, каждый элемент которого равен сумме отрицательных элементов соответствующей строки заданной целочисленной матрицы. Задача требует введения одномерного массива, поэтому приведем описание данных, процедуры подсчета суммы отрицательных элементов в строке и добавления данных в выходной файл, а также основную программу.
3. Определить, есть ли в массиве элемент, равный 0.
Недостаток функции SNeg. Пусть первый элемент массива Х[1,1] равен нулю. Просмотр массива продолжается, несмотря на его бессмысленность. Устранение неточности — «задача определяет тип используемых конструкций повторения» — требует использования операторов While или Repeat — Until в функции Sneg. Проделайте это.
Домашнее задание: 1.1,1.2,1.3,2.1,2.3
4. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали. Элементы на главной диагонали характеризуется совпадением значением индексов — i=j, на второй i=N-j+l, где N — размерность массива.
Измените функцию так, чтобы симметричность массива проверялась относительно второй диагонали. В предыдущем примере был рассмотрен недостаток функции SNeg. Он присущ и этой функции. Устраните его.
5. В массиве А размерностью n*m к элементам четных столбцов прибавить элемент первого столбца соответствующей строки.
Особенностью решения задач этого типа является возможность изменения элемента, который должен использоваться в обработке. Например, прибавляем к элементам нечетных столбцов. Модификация X[i,2*j-l] приведет к тому, что элементы 3, 5 и т. д. столбцов увеличатся на удвоенное значение элементов первого столбца. Проведите корректное изменение процедуры Change.
То есть заполняется в виде «змейки».
6. Заполнить массив A размером n*m следующим образом, например n=6 и m=8:
Правило заполнения. Если номер строки — нечетное число, то A[i,j]=(i-l )*m+j, иначе — A[i,j]=i*m
Заполните массив по следующим правилам.
7. Составить программу, запрашивающую координаты ферзя на шахматной доске и показывающую поля доски, находящиеся под боем.
Заметим, что шахматную доску удобно представить в виде двумерного массива размером 8*8. Координаты ферзя определяются двумя числами (номер строки и номер столбца), но в шахматах принято вводить букву и число. Буква отвечает за номер строки, а число — за номер столбца. Поэтому не будем отступать от традиций и введем координаты именно таким образом. В программе сделаем проверку корректности ввода и если все правильно, то переведем букву в соответствующее ей число ('а' — 1, 'b' — 2, 'с' — 3,'d' — 4, ‘e’ — 5, ‘f’ — 6, 'g'-7,'h'- 8 ). Для решения задачи используем ряд свойств шахматной доски. Все диагонали доски делятся на восходящие и нисходящие.
На каждой диагонали выполняется свойство:
для клеток любой восходящей диагонали сумма номера
строки и номера столбца постоянна (i+j=Const); для клеток любой нисходящей диагонали разность номера
строки и номера столбца постоянна (i-j=Const). Проверьте, что для восходящих диагоналей сумма индексов изменяется от 2 до 16, а для нисходящих — разность от -7 до 7.
Основная программа состоит из одной строки — вызов процедуры Solve. Измените решение так, чтобы фиксировались клетки доски, находящиеся под боем хотя бы одной из фигур — ферзя и ладьи.