Формирование значений элементов массива случайным образом и с клавиатуры и вывод их на экран
Операции работы с двумерными массивами аналогичны операциям работы с одномерными массивами, нужно только не забывать о различиях между массивами. Обычно при работе с двумерными массивами используются вложенные циклы.
Очень часто значения элементов массива вводятся с клавиатуры. Этот способ задания информации слишком трудоемок при работе с массивами больших размеров. Для отладки широкого класса алгоритмов такой ввод информации должен быть заменен на формирование элементов массива случайным образом. Для этого используют встроенные средства Турбо Паскаля, процедуру Randomize и функцию Random. Вы уже сталкивались с этими средствами. Сегодня же наша задача создать процедуры различного ввода элементов в массив и процедуру вывода элементов на экран.
Приведем пример формирования массива случайным образом. Эта процедура должна принять входными параметрами массив, количество строк и столбцов, заданные пользователем с клавиатуры в основном разделе операторов. Так как наша процедура будет воздействовать на пустой исходный массив, то его мы должны передать по ссылке. Количество строк и столбцов достаточно передать копиями по значению.
Procedure InsertMas1(Var X : MyArray; n, m: integer);
Var
i, j : integer;
Begin
Randomize;
for i := 1 to n do {пробегая последовательно строки массива}
for j := 1 to m do {просмотрим каждую ее ячейку текущего столбца}
X[i, j]:= Random(50); {и запишем туда случайное число, которое сформирует компьютер в диапазоне [0..49]}
End;
Теперь, чтобы воспользоваться этой процедурой, достаточно вызвать ее в основном разделе программы, передав ей параметры.
Рассмотрим процедуру вывода элементов массива на экран. Для того, чтобы наш массив при выводе выглядел удобно в виде таблицы, поставим при переходе к новой строке пустой оператор writeln и применим формат вывода элементов на экран (:5).
Procedure PrintMas(X : MyArray; n, m: integer);
Var
i, j : integer;
Begin
for i := 1 to n do {пробегая последовательно строки и столбцы массива}
begin
for j := 1 to m do
write(X[i, j]:5); {выведем элемент массива на экран, выделив ему 5 знакомест}
writeln; {переход на новую строку}
end;
End;
Задание. Наберите программу-шаблон для работы с двумерными массивами. Как вы уже знаете из предыдущей темы, она должна содержать две процедуры ввода и процедуру вывода элементов заданного массива. Основной раздел операторов должен содержать диалог с пользователем и защиту программы от ввода недопустимых значений для количества строк и столбцов. Сохраните файл в соответствующем каталоге на своей дискете, а листинг решенной задачи покажите учителю для оценки.
Рассмотрите процедуру, решающую следующую задачу.
Задача. Дана таблица действительных чисел. Сосчитайте сумму всех чисел в таблице.
Procedure Summa(A : MyArray; n, m: integer; Var S: real);
Var
i, j : integer;
Var
i, j , Summa : integer;
Begin
S:= 0;
for i := 1 to n do
for j := 1 to m do
S := S+A[i,j];
End.
Обратите внимание, что внутри цикла со счетчиком i организован цикл со счетчиком j. В результате суммируются в начале числа 1-й строки (i=1, при j=1, 2, ..., m), затем суммируются числа 2-й строки (i=2, при j=1, 2, ..., m) и т.д.
В данной программе в теле одного цикла содержится другой цикл. Такие циклы, как Вы уже знаете, называются вложенными. Причем цикл со счетчиком i является внешним, а цикл со счетчиком j – внутренним. Не забывайте основное правило при написании вложенных циклов: последний оператор внутреннего цикла должен либо предшествовать, либо совпадать с последним оператором внешнего цикла. Вложенные циклы напоминают матрешек, вложенных одна в другую.
Задание. Откройте файл программы-шаблона, сохраните его под другим (соответствующем задаче) именем и дополните текст программы функцией нахождения суммы элементов, правильно преобразовав в нее рассмотренную выше процедуру. Внесите в программу необходимые операторы и комментарии. Покажите учителю файл программы и листинг для оценки.
Задание. Ниже приведен фрагмент решения некоторой задачи. Внимательно рассмотрев решение, сформулируйте решаемую задачу и оформите по всем правилам, применив знания текущего занятия. Файл и листинг решенной задачи покажите учителю для оценки.
. . .
for i := 1 to N do
Begin
M := a[i,1];
S := a[i, 1];
for j := 2 to N do
begin
if M>a[i, j]
Then
M := a[i, j];
S := S+a[i, j];
end;
writeln (i:7, M:6, S:6:3);
End;
. . .
Дата добавления: 2015-05-16; просмотров: 890;