Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Организация программ вложенной циклической структуры






Пример. Найти следующую сумму

Var i, n: integer;

x, sum: real;

Begin

writeln('Input N: ');

read(n);

sum: = 0;

for i: = 1 to n do

begin

x: = 1/(2*i-1);

if (i mod 2 = 0) then x: = -1*x;

sum: = sum + x;

end; {for}

writeln('The summ is ', sum: 0: 6);

readln;

readln

End.

В данном примере нам встретилась программа с вложенной циклической структурой, т. е. когда цикл вызывается в цикле.

Внешний цикл определяет количество проходов цикла, а внутренний цикл на каждом четном шаге внешнего цикла считает выражение, стоящее в задании под знаком сумма – x: = 1/(2*i-1).


Лекция 8. Массивы (2 часа)

Описание одномерных массивов

Массив - это упорядоченная совокупность однотипных данных. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве. Индексы образуют упорядоченные последовательности. Тип индекса определяет его допустимые значения. В качестве типа индекса может быть указан любой порядковый тип (boolean, char, integer, перечисляемый тип, а также диапазоны этих типов), кроме типа longint и его производных.

В зависимости от количества типов индексов различают: одномерные, тку мерные, трехмерные н n-мерные массивы. Двумерные массивы обычно называют матрицами, считая первый индекс - номером строки, а второй -номером столбца.

Тип элементов массива любой допустимый в Borland Pascal тип (в том числе и массив), кроме файла.

Объявление переменных типа массив выполняется двумя способами:

  • в операторе объявления переменных, например:

Var a: array [1..10] of integer; {массив из 10 целых чисел}

b: array [byte] of char; {массив из 256 символов, индекс элемента массива изменяется от 0 до 255}

с: аггау ['A'.. 'C', -5..-1] of byte; {матрица из 9 чисел}

d: array ['A'.. 'C'] of array [-5..-3] of byte; {матрица из 9 чисел, по структуре эквивалентная предыдущей}

  • с предварительным объявлением типа, например:

Туре mas=аггау[1..10] of integer; {объявляем тип}

Var a: mas; {объявляем переменную}

Максимальный размер массива

Ограничения на количество индексов в Borland Pascal нет, однако суммарная длина массива не должна превышать 65537 байт.

Присваивание массивов

Над массивом в целом определена единственная операция - операция присваивания.

Присваивание массивовзаключается в копировании элементов одного массива в другой. Эту операцию можно выполнять только над массивами одного типа.

Массивы считаются совпадающими по типу, если они объявлены через запятую в одной строке, например:

Var a, b: array [boolean] of real;

... a: =b;...

или, если вначале объявлен тип массива, а затем массивы этого типа:

Type mas: array [boolean] of real;

Const a: mas = (3.6, -5.1);

Var b: mas;

... b: =a;...

Программирование типовых алгоритмов: заполнение массива по закону, вычисление суммы и произведения элементов массива, поиск элементов массива, нахождение максимального и минимального элемента в массиве

Значения элементов массива в программе можно определить тремя способами. Во-первых, массив может быть инициализирован с использованием типизированных констант или просто присваиванием значений элементам. Во-вторых, элементы массива могут быть введены с клавиатуры или из файла. В-третьих, элементы массива могут быть определены в программе:

а) с использованием датчика случайных чисел;

б) заданным образом, в том числе, и скопированы из другого массива.

Для объявления инициализированных массивов в Borland Pascal используют типизированные констапты. При этом соответствующие значения указывают в скобках через запятую. Значения элементов многомерных массивов перечисляют в порядке возрастания индексов справа налево, заключая в скобки каждый подмассив. Для матриц такой порядок соответствует построчному указанию значений. Например:

Const a: array[1..5]of real = (0, -3.6, 7.8, 3.789, 5.0);

b: array [Boolean, 1..5] of real = ((0, -3.6, 7.8, 3.789, 5.0), (6.1, 0, -4.56, 8.9, 3.0)); {массив будет инициализирован следующим образом:

bfalse, 1=0, bfalse, 3=7.8, … btrue, 1=6/1, т.д.}

c: array [1..3, 0..l, -2..1] of byte = (((3, 6, 9, 6), (0, 4, 3, 9)),

((5, 7, 3.1), (45, 8, 0, 2)),

((5, 9, 2, 3), (1, 5, 8, 4))); …

Работа с массивом, как правило, сводится к действиям над его элементами. Для обращения к конкретному элементу массива необходимо указать имя массива и значения индексов элемента в квадратных скобках через запятую, например:

Var a: array[char, boolean] of real; {объявляем матрицу}

... a['A', true]: =5.1;... {присваиваем значение элементу аА, true}

Значения индексов можно указать непосредственно литералом, например, а[3], или косвенно, указав идентификатор переменной, которая содержит значение индекса, например, a[i].

Косвенное задание индексов позволяет реализовывать последовательную обработку элементов массивов. Причем, поскольку интервал изменения индекса определен при объявлении массива, для этого обычно применяют циклы с заданным количеством повторений. Параметр же цикла используют в качестве переменной косвенной адресации массива, например:

Var а: аrraу[1..6] of integer;

... for i: =l to 6 do a[i]: =i;... {при i=1 а1 присваивается 1, при i=2 a2 присваивается 2, при i=3 a3 присваивается 3 и т.д.}

Количество переменных, необходимых для косвенной адресации массивов, совпадает с размерностью массива. Так, для работы с матрицами используют две переменные, хранящие индексы: одну для хранения номеров строк, а вторую - номеров столбцов.

Из многомерных массивов допускается выделять подмиссивы, отбрасывая индексы, записанные справа, и оставляя индексы, определяющие данный подмассив так, из матрицы можно выделить строку, но нельзя столбец, например:

type mas=array[boolean] of real; {массив из двух вещественных чисел}

Const

a: array [l..2] of mas = ((3.6, -5.1),

(7.0, -1.2)); {матрица из четырех вещественных чисел}

Var b: mas;

Begin b: =a[l];...{a массив b скопирована первая строка матрицы а}

Ввод-вывод массивов выполняют поэлементно, используя циклы с заданным числом повторений, например:

Var a: array [1..5J of real;

Begin

for i: = l to 5 do Read(a[i]); (осуществляем ввод массива}

Readln; {очищаем буфер ввода, чтобы далее значения вводились со следующей строки}

Значения элементов массива вводят в порядке обращения к ним из цикла. Эти значения могут сдаваться в одной строке через пробел или с нажитием клавиши Enter после ввода одного или нескольких чисел.

При выполнении операций ввода-вывода матриц и массивов большой размерности целесообразно вводить и выводить значения построчно. Например:

Var a: array[l..5, 1..7] of real; {матрица а из 5 строк по 7 элементов}

Begin

for i: =l to 5 do {цикл ввода строк массива: a1, a2, a3, a4, a5}

begin for j: =l to 7 do {цикл ввода элементов i-й строки: }

Read(a[i, j]); {аi, 1, ai, 2, ai, 3, ai, 4, ai, 5, ai, 6, ai, 7}

ReadLn; {очищаем буфер ввода}

end;...

Пример: Разработать программу определения максимального элемента массива А(5) и его номера.

Вначале элементы массива необходимо ввести. Для выполнения этой операции используем цикл с заданным числом повторений.

Поиск максимального элемента выполним следующим образом. Запомним в качестве максимального, т. е. запишем в amax первый элемент и зафиксируем в imax его номер. Затем будем последовательно просматривать элементы массива, сравнивая их со значением, хранящимся в аmах. Если очередной элемент больше значения в аmах, то сохраняем его в качестве максимального в аmах и запоминаем его номер в imax. Дпя организации последовачелыюго просмотра используем цикл с заданным числом повторений, изменяя переменную цикла от 2 до 5, так как первый элемент мы уже учли. Просмотрев все элементы массива, найдем максимальный элемент и его номер. После этого необходимо вывести па экран исходный массив, максимальный элемент и его номер. Поскольку операции ввода-вывода массивов выполняют однотипно, на схеме алгоритма соответствующих циклов, так же как и запросов на ввод данных, обычно не показывают. Вместо этого в схему вставляют блок операции ввода/вывода, в котором указано имя массива и количество элементов, участвующих в операции.

Ниже приведем текст программы.

Var a: array [1..5] of real;

amax: real;

r, imax: byte;

Begin

{зanpoc на ввод массива}

WriteLn ('Введите 5 чисел: ');

{ввод элементов массива}

for i: =1 to 5 do Readl(a[i]);

ReadLn;

{поиск максимального эмемента}

amax: =a[1]; imax: =1;

for i: =2 to 5 do

if a[i]> amax then

begin

amax: =a[i]; imax: =i;

end;

{вывод массива}

WrtteLn('Исходные данные: ');

for i: = 1 to 5 do Write(a[i]; 5: 2);

WrileLn;

{вывод результата}

WrtteLn('Максимальный элемент равен ', аmаx: 5: 2, ', его напер равен ', imax);

End.

 

Пример. Разработать программу вычисления сумм элементов строк матрицы А(4.5). Полученные суммы записать в новый массив В.

Итак, нам задана матрица, имеющая 4 строки и 5 столбцов. Требуется сформировать одномерный массив В из четырех элементов, который будет содержать суммы элемента строк. Распечатать результат лучше так, чтобы суммы были выведены после соответствующей строки матрицы.

Программа должна начинаться с ввода матрицы. Основной цикл программы цикл по строкам. Переменная цикла i в нем будем изменяться oт 1 до 4. Для каждой i-й строки в этом цикле должно выполняться суммирование элементов. Суммирование будем осуществлять методом накопления, для чего перед суммированием обнулим соответствующий i-й элемент массива В, а затем в цикле выполним добавление элементов строки. После завершения цикла суммирования эту строку и ее сумму можно сразу выводить.

Var А: array [1..4, 1..5] of real;

B: array [1..4] of real;

i, j: byfe;

Begin

WriteLn ('Введите матрицу построчно: ');

for i: =l to 4 do {вводим матрицу}

begin

for j: =1 to 5 do Read(A[i, j])

ReadLn;

end;

Writeln('Результаты: ');

for i: =1 to 4 do {для каждой строки}

begin

B[i]: = 0; {обнуляем накапливаемую сумму}

for j: =l to 5 do B[i]: =B[i]+A[i, j]; {суммируем элементы строки}

for j: =1 to 5 do Write(A[i, j]: 7: 2); {выводим cтроку}

WriteLn('Сумма равна ', B[i]; 7: 2); {выводим сумму}

end;

end.


Лекция 9. Матрицы (2 часа)


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.012 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал